Skip to content

راهنمای استقرار و به‌روزرسانی اتوماتیک GitHub Actions برای برنامه‌های Tauri متن باز

1. معرفی

این مقاله به‌تفصیل نحوه استفاده از GitHub Actions برای پیاده‌سازی ساخت اتوماتیک، انتشار، و قابلیت به‌روزرسانی اتوماتیک برنامه برای برنامه‌های Tauri از طریق UpgradeLink را توضیح می‌دهد. از طریق این راهنمای شما یاد می‌گیرید که چگونه Workflowهای GitHub Actions را پیکربندی کنید تا فرآیند کاملاً اتوماتیک از ارسال کد تا به‌روزرسانی برنامه را تکمیل کنید.

2. معرفی ابزارهای اصلی

1. Tauri GitHub Action رسمی

پلاگین GitHub Action رسمی ارائه شده توسط Tauri به توسعه‌دهندگان کمک می‌کند تا برنامه‌های Tauri را به‌طور خودکار در محیط GitHub Actions بسازند، بسته‌بندی کنند، و به GitHub Releases منتشر کنند.

پلاگین Action ارائه شده توسط UpgradeLink برای بارگذاری فایل به‌روزرسانی (latest.json) تولید شده توسط برنامه Tauri به سرور UpgradeLink استفاده می‌شود. UpgradeLink آدرس فایل برنامه را در فایل json می‌خواند، فایل را ذخیره می‌کند، فایل‌های نسخه برنامه را به‌طور خودکار ایجاد می‌کند، و استراتژی‌های به‌روزرسانی مربوطه را ایجاد می‌کند.

3. پروژه نمونه با Workflow کامل

پروژه نمونه با Workflow کامل

3. توضیح Workflow

Workflow از دو job اصلی تشکیل می‌شود:

  1. publish-tauri: ساخت و انتشار برنامه Tauri به GitHub Releases

    • ساخت چند پلتفرمی: همزمان از macOS، Linux، و Windows پشتیبانی می‌کند
    • استخراج شماره نسخه: استخراج شماره نسخه برنامه از خروجی ساخت Tauri
    • مدیریت انتشار: به‌طور خودکار GitHub Release ایجاد کرده و بسته‌های نصب برنامه را بارگذاری می‌کند
  2. upgradeLink-upload: هم‌گام‌سازی اطلاعات به‌روزرسانی با UpgradeLink

    • وابستگی‌ها: منتظر تکمیل job publish-tauri می‌ماند
    • آگاهی نسخه: شماره نسخه برنامه را از طریق پارامترهای خروجی دریافت می‌کند
    • فراخوانی API: از UpgradeLink Action برای بارگذاری latest.json به سرور به‌روزرسانی استفاده می‌کند

4. مراحل ادغام دقیق

1. آماده‌سازی

ابتدا، موارد زیر را اطمینان حاصل کنید:

  • مخزن GitHub ایجاد شده و کد برنامه Tauri بارگذاری شده است
  • حساب پلتفرم UpgradeLink دارید و مراکز زیر را به‌دست آورده‌اید:
  • در پیکربندی برنامه tauri در پلتفرم UpgradeLink، آدرس مخزن GitHub را پیکربندی کرده‌اید.

2. پیکربندی GitHub Secrets

مولفه‌های محیطی رمزگذاری شده زیر را در Settings > Security > Secrets and variables > Actions مخزن GitHub اضافه کنید:

نام Secretتوضیح
UPGRADE_LINK_ACCESS_KEYکلید دسترسی ارائه شده توسط پلتفرم UpgradeLink برای احراز هویت فراخوانی API
UPGRADE_LINK_ACCESS_SECRETsecret دسترسی ارائه شده توسط پلتفرم UpgradeLink برای احراز هویت فراخوانی API
UPGRADE_LINK_TAURI_KEYشناسه منحصر به فرد اختصاص داده شده توسط پلتفرم UpgradeLink برای برنامه Tauri شما
TAURI_SIGNING_PRIVATE_KEYکلید خصوصی امضای برنامه Tauri (اگر نیاز به امضای کد باشد)
TAURI_SIGNING_PRIVATE_KEY_PASSWORDرمز عبور کلید خصوصی امضای (اگر تنظیم شده باشد)

3. توصیه می‌شود ابتدا با استفاده از tauri-action رسمی ارائه شده توسط Tauri تست کنید تا اطمینان حاصل شود که ساخت و انتشار نسخه‌های Releases به درستی انجام می‌شود.

از آنجایی که استفاده از Workflow tauri-action ممکن است با مشکلات مختلف مجوز مواجه شود، نیاز به اجرای پیش‌بینی فرآیند دارید.

4. اطلاعات پیکربندی پیش‌فرض ارائه شده توسط رسمی را تغییر دهید

Workflow نمونه رسمی

تغییرات زیر را بر اساس مثال رسمی انجام دهید:

name: 'publish'

on:
  push:
    branches:
      - main

jobs:
  publish-tauri:
    permissions:
      contents: write
    outputs:
      appVersion: ${{ steps.set-job-output.outputs.appVersion }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - platform: 'macos-latest' # for Arm based macs (M1 and above).
            args: '--target aarch64-apple-darwin'
          - platform: 'macos-latest' # for Intel based macs.
            args: '--target x86_64-apple-darwin'
          - platform: 'ubuntu-22.04'
            args: ''
          - platform: 'ubuntu-22.04-arm' # Only available in public repos.
            args: ''
          - platform: 'windows-latest'
            args: ''

    runs-on: ${{ matrix.platform }}
    steps:
      - uses: actions/checkout@v4

      - name: install dependencies (ubuntu only)
        if: startsWith(matrix.platform, 'ubuntu-') # This must match the platform value defined above.
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils

      - name: setup node
        uses: actions/setup-node@v4
        with:
          node-version: lts/*
          cache: 'yarn' # Set this to npm, yarn or pnpm.

      - name: install Rust stable
        uses: dtolnay/rust-toolchain@stable # Set this to dtolnay/rust-toolchain@nightly
        with:
          # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
          targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

      - name: Rust cache
        uses: swatinem/rust-cache@v2
        with:
          workspaces: './src-tauri -> target'

      - name: install frontend dependencies
        # If you don't have `beforeBuildCommand` configured you may want to build your frontend here too.
        run: yarn install # change this to npm or pnpm depending on which one you use.

      - uses: tauri-apps/tauri-action@v0
        id: tauri-action  # Add id for later reference
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
        with:
          tagName: tauri-demo-v__VERSION__
          releaseName: 'tauri-demo v__VERSION__'
          releaseBody: 'See the assets to download this version and install.'
          releaseDraft: false # Do not create draft version
          prerelease: false # Not as pre-release version
          args: ${{ matrix.args }}

      - name: Set job output
        id: set-job-output
        if: matrix.platform == 'ubuntu-22.04'
        run: |
          echo "appVersion=${{ steps.tauri-action.outputs.appVersion }}" >> $GITHUB_OUTPUT
          

  upgradeLink-upload:
      needs:  publish-tauri  # Depends on publish-tauri job completion
      permissions:
        contents: write
      runs-on: ubuntu-latest
      steps:
        - name: Send a request to UpgradeLink
          uses: toolsetlink/upgradelink-action@3.0.2
          with:
            access_key: ${{ secrets.UPGRADE_LINK_ACCESS_KEY }}
            access_secret: ${{ secrets.UPGRADE_LINK_ACCESS_SECRET }}
            config: |
              {
                "app_type": "tauri",
                "request": {
                  "app_key": "${{ secrets.UPGRADE_LINK_TAURI_KEY }}",
                  "latest_json_url": "https://github.com/toolsetlink/tauri-demo/releases/download/tauri-demo-v${{ needs.publish-tauri.outputs.appVersion }}/latest.json"
                }
              }

5. مشکلات رایج و راه‌حل‌ها

1. مشکلات مجوز GitHub Actions

اگر با خطاهای ناکافی مجوز مواجه شدید، اطمینان حاصل کنید:

  • permissions: contents: write در فایل Workflow پیکربندی شده است
  • مجوزهای Actions در تنظیمات مخزن به‌درستی پیکربندی شده اند

2.troubleshooting بروزرسانی ساخت

  • برای اطلاعات خطای خاص، به لاگ‌های GitHub Actions مراجعه کنید
  • اطمینان حاصل کنید که همه وابستگی‌ها به‌درستی نصب شده، به‌ویژه وابستگی‌های سیستم برای پلتفرم Linux
  • سازگاری نسخه‌های Rust و Node.js را تایید کنید
  • بررسی کنید که آیا شناسه برنامه در کنسول UpgradeLink با پیکربندی مطابقت دارد
  • تأیید کنید که آیا فایل latest.json صحیح در GitHub Releases تولید شده است

6. خلاصه

با پیکربندی بالا، می‌توانید فرآیند کاملاً اتوماتیک ساخت، انتشار، و به‌روزرسانی برای برنامه‌های Tauri را پیاده‌سازی کنید. هرگاه که کد به برانچ مشخص شده رانده شود، GitHub Actions به‌طور خودکار کارهای زیر را تکمیل خواهد کرد:

  1. تشخیص تغییرات کد
  2. ساخت برنامه Tauri در محیط‌های چند پلتفرمی
  3. ایجاد GitHub Release و بارگذاری بسته‌های نصب
  4. استخراج شماره نسخه برنامه
  5. هم‌گام‌سازی اطلاعات به‌روزرسانی با پلتفرم UpgradeLink
  6. کاربران نهایی از طریق UpgradeLink اعلان‌های به‌روزرسانی برنامه را دریافت خواهند کرد

این فرآیند اتوماتیک به شدت کارایی توسعه را بهبود می‌بخشد، خطاهای عملیات دستی را کاهش می‌دهد، و به توسعه‌دهندگان اجازه می‌دهد تا بیشتر بر توسعه功املیات برنامه تمرکز کنند.

toolsetlink@163.com