"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تحديث محتوى موقع الويب في الموعد المحدد عبر GitHub Actions

تحديث محتوى موقع الويب في الموعد المحدد عبر GitHub Actions

تم النشر بتاريخ 2024-11-06
تصفح:388

أود أن أشارك رحلتي في بناء نظام إدارة محتوى مستدام ذاتيًا ولا يتطلب قاعدة بيانات محتوى بالمعنى التقليدي.

المشكلة

يتم تخزين المحتوى (منشورات المدونة والإشارات المرجعية) لهذا الموقع في قاعدة بيانات Notion:

Updating website content on schedule via GitHub Actions

قاعدة البيانات مع الإشارات المرجعية –  Notion UI

كانت المشكلة التي كنت أحاول حلها هي عدم الاضطرار إلى نشر موقع الويب يدويًا بعد كل إشارة مرجعية أقوم بإضافتها هناك. علاوة على ذلك - اجعل الاستضافة رخيصة قدر الإمكان، لأنه بالنسبة لي لا يهم حقًا مدى سرعة وصول الإشارات المرجعية التي أقوم بإضافتها إلى قاعدة بيانات Notion الخاصة بي إلى الإنترنت.

لذلك، وبعد إجراء بعض الأبحاث، توصلت إلى الإعداد التالي:

Updating website content on schedule via GitHub Actions

نظرة عامة رفيعة المستوى على آلية تقديم المحتوى

يتكون النظام من عدة مكونات:

  • إجراء "الدفع إلى الصفحة الرئيسية" الذي ينشر التغييرات
  • إجراء "تحديث المحتوى" الذي يقوم بتنزيل المحتوى من Notion API وتنفيذ التغييرات
  • يتم تشغيل إجراء "تحديث المحتوى في الموعد المحدد" من حين لآخر ويؤدي إلى تشغيل إجراء "تحديث المحتوى"

دعونا ننظر إلى كل واحد منهم من الداخل إلى الخارج بالتفصيل.

سير العمل "الدفع إلى الرئيسي".

ليس هناك الكثير مما يمكن قوله هنا، إعداد قياسي جدًا، - عندما يكون هناك دفعة إلى الفرع الرئيسي، يقوم سير العمل هذا ببناء التطبيق ونشره على صفحات Cloudflare باستخدام 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 }}

سير عمل "تحديث المحتوى".

لا يمكن تشغيل سير العمل هذا إلا "يدويًا"... ولكن أيضًا تلقائيًا لأنه يمكنك تشغيله باستخدام GitHub Personal Access Token، المعروف أيضًا باسم PAT. لقد كتبته في البداية لأنني أردت نشر التغييرات من هاتفي. يقوم بتنزيل المنشورات والإشارات المرجعية باستخدام Notion API ثم - إذا كان هناك أي تغيير في قاعدة التعليمات البرمجية - ينشئ التزامًا ويدفعه. لكي يعمل بشكل صحيح، يجب أن يتم تزويد سير العمل هذا بـ PAT الذي لديه "حق الوصول للقراءة والكتابة إلى التعليمات البرمجية" للمستودع:

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

سير عمل "تحديث المحتوى في الموعد المحدد".

هذا بسيط جدًا: فهو يعمل من حين لآخر ويؤدي إلى تشغيل سير العمل أعلاه. لكي يعمل سير العمل بشكل صحيح، يجب أن يتم تزويد سير العمل هذا بـ GitHub PAT الذي يتمتع "بحق الوصول للقراءة والكتابة إلى الإجراءات" الخاصة بالمستودع. في حالتي، الأمر بات مختلفًا:

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

خاتمة

بالنسبة لي، أثبت هذا الإعداد أنه جيد ومرن حقًا. بسبب البنية المعيارية، يمكن تشغيل إجراء "تحديث المحتوى" يدويًا - على سبيل المثال. من هاتفي أثناء السفر. بالنسبة لي كانت هذه تجربة قيمة أخرى للتحسين التدريجي لسير العمل.

آمل أن تجد هذا مفيدًا؟

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/prudkohliad/updating-website-content-on-schedule-via-github-actions-39o7?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3