From 4b378ca7103a0ec24bb071cd55e733d10ed1f3b9 Mon Sep 17 00:00:00 2001 From: Dream Hunter Date: Wed, 25 Feb 2026 14:20:26 +0800 Subject: [PATCH] ci: optimize workflows with parallel jobs and conditional checks (#843) * ci: optimize workflows with parallel jobs and conditional checks * ci: add sync and tag triggers to frontend_pagefunction_deploy --- .github/workflows/frontend_deploy.yaml | 65 ++++++++++----- .../frontend_pagefunction_deploy.yaml | 31 +++++-- .github/workflows/tag_build.yml | 82 +++++++++++++++++-- 3 files changed, 143 insertions(+), 35 deletions(-) diff --git a/.github/workflows/frontend_deploy.yaml b/.github/workflows/frontend_deploy.yaml index ba8605d9..f912b5e1 100644 --- a/.github/workflows/frontend_deploy.yaml +++ b/.github/workflows/frontend_deploy.yaml @@ -10,10 +10,8 @@ on: workflow_dispatch: jobs: - deploy: + deploy-frontend: runs-on: ubuntu-latest - permissions: - contents: write steps: - name: Checkout uses: actions/checkout@v4 @@ -25,40 +23,63 @@ jobs: - uses: pnpm/action-setup@v3 name: Install pnpm - id: pnpm-install with: version: 8 run_install: false - name: Deploy Frontend for ${{ github.ref_name }} + if: ${{ env.FRONTEND_NAME != '' }} run: | cd frontend/ echo "${{ secrets.FRONTEND_ENV }}" > .env.prod - export project_name=${{ secrets.FRONTEND_NAME }} pnpm install --no-frozen-lockfile - export frontend_branch=${{ secrets.FRONTEND_BRANCH }} + export frontend_branch="${{ secrets.FRONTEND_BRANCH }}" if [ -n "$frontend_branch" ]; then echo "Deploying branch $frontend_branch" - pnpm run deploy:actions --project-name=$project_name --branch $frontend_branch + pnpm run deploy:actions --project-name=$FRONTEND_NAME --branch $frontend_branch else echo "Deploying branch production" - pnpm run deploy --project-name=$project_name + pnpm run deploy --project-name=$FRONTEND_NAME fi - echo "Deploying production for ${{ github.ref_name }}" echo "Deployed for tag ${{ github.ref_name }}" - - export tg_mini_app_project_name=${{ secrets.TG_FRONTEND_NAME }} - if [ -n "$tg_mini_app_project_name" ]; then - echo "Deploying telegram mini app $tg_mini_app_project_name" - if [ -n "$frontend_branch" ]; then - echo "Deploying telegram mini app branch $frontend_branch" - pnpm run deploy:actions:telegram --project-name=$tg_mini_app_project_name --branch $frontend_branch - else - echo "Deploying telegram mini app branch production" - pnpm run deploy:telegram --project-name=$tg_mini_app_project_name - fi - echo "Deployed telegram mini app for ${{ github.ref_name }}" - fi env: CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + FRONTEND_NAME: ${{ secrets.FRONTEND_NAME }} + + deploy-telegram-frontend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 8 + run_install: false + + - name: Deploy Telegram Frontend for ${{ github.ref_name }} + if: ${{ env.TG_FRONTEND_NAME != '' }} + run: | + cd frontend/ + echo "${{ secrets.FRONTEND_ENV }}" > .env.prod + pnpm install --no-frozen-lockfile + export frontend_branch="${{ secrets.FRONTEND_BRANCH }}" + if [ -n "$frontend_branch" ]; then + echo "Deploying telegram mini app branch $frontend_branch" + pnpm run deploy:actions:telegram --project-name=$TG_FRONTEND_NAME --branch $frontend_branch + else + echo "Deploying telegram mini app branch production" + pnpm run deploy:telegram --project-name=$TG_FRONTEND_NAME + fi + echo "Deployed telegram mini app for ${{ github.ref_name }}" + env: + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + TG_FRONTEND_NAME: ${{ secrets.TG_FRONTEND_NAME }} diff --git a/.github/workflows/frontend_pagefunction_deploy.yaml b/.github/workflows/frontend_pagefunction_deploy.yaml index e5b29602..2791f41d 100644 --- a/.github/workflows/frontend_pagefunction_deploy.yaml +++ b/.github/workflows/frontend_pagefunction_deploy.yaml @@ -1,13 +1,35 @@ name: Deploy Frontend with page function on: + workflow_run: + workflows: [Upstream Sync] + types: [completed] + push: + tags: + - "*" workflow_dispatch: jobs: - deploy: + check: + runs-on: ubuntu-latest + outputs: + has_config: ${{ steps.check.outputs.has_config }} + steps: + - name: Check PAGE_TOML + id: check + run: | + if [ -n "$PAGE_TOML" ]; then + echo "has_config=true" >> $GITHUB_OUTPUT + else + echo "has_config=false" >> $GITHUB_OUTPUT + fi + env: + PAGE_TOML: ${{ secrets.PAGE_TOML }} + + deploy: + needs: check + if: ${{ needs.check.outputs.has_config == 'true' }} runs-on: ubuntu-latest - permissions: - contents: write steps: - name: Checkout uses: actions/checkout@v4 @@ -19,7 +41,6 @@ jobs: - uses: pnpm/action-setup@v3 name: Install pnpm - id: pnpm-install with: version: 8 run_install: false @@ -33,7 +54,7 @@ jobs: echo '${{ secrets.PAGE_TOML }}' > wrangler.toml pnpm install --no-frozen-lockfile pnpm run deploy - echo "Deploying prodcution for ${{ github.ref_name }}" + echo "Deploying production for ${{ github.ref_name }}" env: CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/.github/workflows/tag_build.yml b/.github/workflows/tag_build.yml index 30327063..09bebedb 100644 --- a/.github/workflows/tag_build.yml +++ b/.github/workflows/tag_build.yml @@ -6,10 +6,8 @@ on: - "*" jobs: - build: + build-frontend: runs-on: ubuntu-latest - permissions: - contents: write steps: - name: Checkout uses: actions/checkout@v4 @@ -21,7 +19,6 @@ jobs: - uses: pnpm/action-setup@v3 name: Install pnpm - id: pnpm-install with: version: 8 run_install: false @@ -32,12 +29,58 @@ jobs: - name: Zip Frontend dist run: cd frontend/dist/ && zip -r frontend.zip * && mv frontend.zip ../ + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: frontend + path: frontend/frontend.zip + + build-telegram-frontend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 8 + run_install: false + - name: Build Telegram Frontend run: cd frontend && pnpm install --no-frozen-lockfile && pnpm build:telegram:release - name: Zip Telegram Frontend dist run: cd frontend/dist/ && zip -r telegram-frontend.zip * && mv telegram-frontend.zip ../ + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: telegram-frontend + path: frontend/telegram-frontend.zip + + build-backend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3 + name: Install pnpm + with: + version: 8 + run_install: false + - name: cp wrangler.toml run: cd worker && cp wrangler.toml.template wrangler.toml @@ -57,11 +100,34 @@ jobs: pnpm build zip -r worker-with-wasm-mail-parser.zip dist/worker.js dist/*.wasm + - name: Upload worker.js + uses: actions/upload-artifact@v4 + with: + name: worker-js + path: worker/worker.js + + - name: Upload wasm worker + uses: actions/upload-artifact@v4 + with: + name: worker-wasm + path: worker/worker-with-wasm-mail-parser.zip + + release: + runs-on: ubuntu-latest + needs: [build-frontend, build-telegram-frontend, build-backend] + permissions: + contents: write + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + - name: Upload to Release uses: softprops/action-gh-release@v2 with: files: | - frontend/frontend.zip - frontend/telegram-frontend.zip - worker/worker.js - worker/worker-with-wasm-mail-parser.zip + artifacts/frontend/frontend.zip + artifacts/telegram-frontend/telegram-frontend.zip + artifacts/worker-js/worker.js + artifacts/worker-wasm/worker-with-wasm-mail-parser.zip