From 5daa151b5e715f6379e4df2f4c71a0f30da0e355 Mon Sep 17 00:00:00 2001 From: LingandRX <56020800+LingandRX@users.noreply.github.com> Date: Sat, 23 May 2026 14:27:57 +0800 Subject: [PATCH] Refactor GitHub Actions workflow for clarity and efficiency (#46) --- .github/workflows/release.yml | 107 ++++++++++++++-------------------- 1 file changed, 45 insertions(+), 62 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index df1693e..c35b227 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,152 +9,136 @@ permissions: contents: write jobs: - # ── Phase 1: 依赖统一前置基础架构(Infrastructure Stage) ─────────────────── + # ── Phase 1: 依赖准备 ─────────────────── setup: name: Prepare Dependencies runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: '22' - - - name: Cache Node Modules + - uses: actions/cache@v4 id: cache-nodemodules - uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-release-v22-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-release-v22- - - - name: Install dependencies - if: steps.cache-nodemodules.outputs.cache-hit != 'true' + - if: steps.cache-nodemodules.outputs.cache-hit != 'true' run: npm ci - # ── Phase 2: 全量生产级断言检查(秒级瞬时恢复缓存,安全闭环) ────────────────── + # ── Phase 2: 质量检查 ────────────────── lint: name: Lint runs-on: ubuntu-latest needs: setup steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: '22' - - name: Restore Node Modules - uses: actions/cache@v4 + - uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-release-v22-${{ hashFiles('**/package-lock.json') }} - - name: Run ESLint - run: npm run lint + - run: npm run lint typecheck: name: TypeScript Check runs-on: ubuntu-latest needs: setup steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: '22' - - name: Restore Node Modules - uses: actions/cache@v4 + - uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-release-v22-${{ hashFiles('**/package-lock.json') }} - - name: Generate WXT types - run: npx wxt prepare - - - name: Run TypeScript type check - run: npm run typecheck + - run: npx wxt prepare + - run: npm run typecheck test: name: Unit Tests runs-on: ubuntu-latest needs: setup steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: '22' - - name: Restore Node Modules - uses: actions/cache@v4 + - uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-release-v22-${{ hashFiles('**/package-lock.json') }} + - run: npx wxt prepare + - run: npm run test - - name: Generate WXT types - run: npx wxt prepare - - - name: Run tests - run: npm run test - - # ── Phase 3: 多端分布式高精打包(Compile & Upload Artifacts) ─────────────── + # ── Phase 3: 打包 ─────────────────────── build-extension: name: Package Extension runs-on: ubuntu-latest - needs: [ lint, typecheck, test ] + needs: [lint, typecheck, test] steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: '22' - - name: Restore Node Modules - uses: actions/cache@v4 + - uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-release-v22-${{ hashFiles('**/package-lock.json') }} - # 执行 WXT 高阶打包压缩指令 - name: Build and Zip Extension run: | npm run zip npm run zip:firefox - # 💡 核心自愈补丁:显式将 .output 下打包出的真实生产绝对路径文件, - # 稳固地上存至 GitHub 的常驻产物箱中进行安全物理隔离,防范后期发布网络崩溃导致产物蒸发! + # 🔍 关键调试步骤:确认 zip 文件位置 + - name: Verify output files + run: | + echo "=== .output/ ===" + ls -la .output/ 2>/dev/null || echo "Not found" + echo "=== All zip files ===" + find . -name "*.zip" -type f 2>/dev/null || echo "No zip files" + - name: Upload Extension Artifacts uses: actions/upload-artifact@v4 with: name: extension-zips path: | .output/*.zip + dist/*.zip + *.zip + if-no-files-found: error # ← 如果没有文件,直接报错 retention-days: 7 - # ── Phase 4: 独立中央签发发布(Atomic Release Publisher) ─────────────────── + # ── Phase 4: 发布 ─────────────────────── release: name: Create GitHub Release runs-on: ubuntu-latest needs: build-extension steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - # 💡 独立下载打包完好的绝对产物包 - name: Download Extension Artifacts uses: actions/download-artifact@v4 with: name: extension-zips path: release-artifacts + # 🔍 调试:确认下载成功 + - name: Verify downloaded artifacts + run: | + echo "=== release-artifacts/ ===" + ls -la release-artifacts/ + - name: Extract version from tag id: version run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" - # 💡 最终无风险原子级发布大礼包 - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: @@ -163,6 +147,5 @@ jobs: draft: false prerelease: ${{ contains(github.ref_name, '-') }} generate_release_notes: true - # 百分之百精准指向被下载下来的、毫无路径污染风险的 Zip 包实体 files: | - release-artifacts/*.zip \ No newline at end of file + release-artifacts/*.zip