Rumah  >  Artikel  >  hujung hadapan web  >  Mengemas kini kandungan tapak web mengikut jadual melalui Tindakan GitHub

Mengemas kini kandungan tapak web mengikut jadual melalui Tindakan GitHub

PHPz
PHPzasal
2024-08-17 15:20:01686semak imbas

Saya ingin berkongsi perjalanan saya membina sistem pengurusan kandungan lestari sendiri yang tidak memerlukan pangkalan data kandungan dalam erti kata tradisional.

Masalahnya

Kandungan (catatan blog dan penanda halaman) tapak web ini disimpan dalam pangkalan data Notion:

Updating website content on schedule via GitHub Actions

Pangkalan data dengan penanda halaman –  UI Notion

Masalah yang saya cuba selesaikan ialah tidak perlu menggunakan tapak web secara manual selepas setiap penanda halaman yang saya tambahkan di sana. Dan selain itu – pastikan pengehosan semurah mungkin, kerana bagi saya ia tidak begitu penting betapa pantas penanda halaman yang saya tambahkan pada pangkalan data Notion saya berakhir dalam talian.

Jadi, selepas beberapa penyelidikan saya menghasilkan persediaan berikut:

Updating website content on schedule via GitHub Actions

Ikhtisar peringkat tinggi mekanisme penyampaian kandungan

Sistem ini terdiri daripada beberapa komponen:

  • Tindakan "Tekan ke Utama" yang menggunakan perubahan
  • Tindakan "Kemas Kini Kandungan" yang memuat turun kandungan daripada Notion API dan melakukan perubahan
  • Tindakan "Kemas Kini Kandungan pada Jadual" berjalan sekali-sekala dan mencetuskan tindakan "Kemas Kini Kandungan"

Mari kita lihat setiap satu daripada mereka dari dalam ke luar secara terperinci.

Aliran Kerja "Tekan ke Utama".

Tidak banyak yang boleh dikatakan di sini, persediaan yang agak standard, – apabila terdapat tolakan ke cawangan utama, aliran kerja ini membina apl dan menggunakan ia ke Cloudflare Pages menggunakan Wrangler CLI:

name: Push to Main
on:
  push:
    branches: [main]
  workflow_dispatch: {}
jobs:
  deploy-cloudflare-pages:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup pnpm
        uses: pnpm/action-setup@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version-file: .node-version
          cache: pnpm
      - name: Install node modules
        run: |
          pnpm --version
          pnpm install --frozen-lockfile
      - name: Build the App
        run: |
          pnpm build
      - name: Publish Cloudflare Pages
        env:
          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
        run: |
          pnpm wrangler pages deploy ./out --project-name ${{ secrets.CLOUDFLARE_PROJECT_NAME }}

Aliran Kerja "Kemas Kini Kandungan".

Aliran Kerja ini hanya boleh dicetuskan "secara manual"... tetapi juga secara automatik kerana anda boleh mencetuskannya menggunakan Token Akses Peribadi GitHub, a.k.a. PAT. Saya pada mulanya menulisnya kerana saya mahu menggunakan perubahan daripada telefon saya. Ia memuat turun siaran dan penanda halaman menggunakan API Notion dan kemudian – jika terdapat sebarang perubahan pada pangkalan kod – membuat komitmen dan menolaknya. Untuk berfungsi dengan betul, aliran kerja ini mesti disediakan dengan PAT yang mempunyai "akses Baca dan Tulis kepada kod" repositori:

name: Update Content
on:
  workflow_dispatch: {}
jobs:
  download-content:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          # A Github Personal Access Token with access to the repository 
          # that has the follwing permissions:
          # ✅ Read and Write access to code
          token: ${{ secrets.GITHUB_PAT_CONTENT }}
      - name: Setup pnpm
        uses: pnpm/action-setup@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version-file: .node-version
          cache: pnpm
      - name: Install node modules
        run: |
          pnpm --version
          pnpm install --frozen-lockfile
      - name: Download articles content from Notion
        env:
          NOTION_KEY: "${{ secrets.NOTION_KEY }}"
          NOTION_ARTICLES_DATABASE_ID: "${{ secrets.NOTION_ARTICLES_DATABASE_ID }}"
        run: |
          pnpm download-articles
      - name: Download bookmarks content from Notion
        env:
          NOTION_KEY: ${{ secrets.NOTION_KEY }}
          NOTION_BOOKMARKS_DATABASE_ID: ${{ secrets.NOTION_BOOKMARKS_DATABASE_ID }}
        run: |
          pnpm download-bookmarks
      - name: Configure Git
        run: |
          git config --global user.email "${{ secrets.GIT_USER_EMAIL }}"
          git config --global user.name "${{ secrets.GIT_USER_NAME }}"
      - name: Check if anything changed
        id: check-changes
        run: |
          if [ -n "$(git status --porcelain)" ]; then
            echo "There are changes"
            echo "HAS_CHANGED=true" >> $GITHUB_OUTPUT
          else
            echo "There are no changes"
            echo "HAS_CHANGED=false" >> $GITHUB_OUTPUT
          fi
      - name: Commit changes
        if: steps.check-changes.outputs.HAS_CHANGED == 'true'
        run: |
          git add ./src/content
          git add ./public
          git commit -m "Automatic content update commit"
          git push

Aliran Kerja "Kemas Kini Kandungan pada Jadual".

Yang ini agak mudah: ia hanya berjalan sekali-sekala dan mencetuskan aliran kerja di atas. Untuk berfungsi dengan betul, aliran kerja ini mesti disediakan dengan PAT GitHub yang mempunyai "akses Baca dan Tulis kepada tindakan" repositori. Dalam kes saya ia adalah PAT yang berbeza:

name: Update Content on Schedule
on:
  schedule:
    - cron: "13 0,12 * * *"
  workflow_dispatch: {}
jobs:
  trigger-update-content:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Dispatch the Update Content workflow
        env:
          # A Github Personal Access Token with access to the repository 
          # that has the follwing permissions:
          # ✅ Read and Write access to actions
          GH_TOKEN: ${{ secrets.GITHUB_PAT_ACTIONS }}
        run: |
          gh workflow run "Update Content" --ref main

Kesimpulan

Bagi saya persediaan ini telah terbukti sangat bagus dan fleksibel. Oleh kerana struktur modular, tindakan "Kemas Kini Kandungan" boleh dicetuskan secara manual - mis. dari telefon saya semasa dalam perjalanan. Bagi saya ini adalah satu lagi pengalaman berharga peningkatan progresif aliran kerja.

Semoga anda mendapati ini membantu ?

Atas ialah kandungan terperinci Mengemas kini kandungan tapak web mengikut jadual melalui Tindakan GitHub. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn