Files
testing-tool/.github/workflows/release.yml
T
Ubuntu c8ad2a2283 fix(ci): fix release workflow artifact upload issue
- Split artifact upload into 3 separate steps (Chrome, Firefox, Source)
- Update download steps to match new artifact names
- Add if-no-files-found: error for better error handling
- Fix Node.js 20 compatibility issue with upload-artifact@v4 glob pattern
2026-05-23 14:37:39 +08:00

196 lines
5.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
# ── Phase 1: 依赖统一前置基础架构(Infrastructure Stage) ───────────────────
setup:
name: Prepare Dependencies
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Cache Node Modules
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'
run: npm ci
# ── 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
with:
node-version: '22'
- name: Restore Node Modules
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-release-v22-${{ hashFiles('**/package-lock.json') }}
- name: Run ESLint
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
with:
node-version: '22'
- name: Restore Node Modules
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
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
with:
node-version: '22'
- name: Restore Node Modules
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 tests
run: npm run test
# ── Phase 3: 多端分布式高精打包(Compile & Upload Artifacts ───────────────
build-extension:
name: Package Extension
runs-on: ubuntu-latest
needs: [ lint, typecheck, test ]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Restore Node Modules
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 的常驻产物箱中进行安全物理隔离,防范后期发布网络崩溃导致产物蒸发!
- name: Upload Chrome Extension
uses: actions/upload-artifact@v4
with:
name: chrome-extension
path: .output/testing-tools-*.zip
retention-days: 7
if-no-files-found: error
- name: Upload Firefox Extension
uses: actions/upload-artifact@v4
with:
name: firefox-extension
path: .output/testing-tools-*-firefox.zip
retention-days: 7
if-no-files-found: error
- name: Upload Source Code
uses: actions/upload-artifact@v4
with:
name: source-code
path: .output/testing-tools-*-sources.zip
retention-days: 7
if-no-files-found: error
# ── Phase 4: 独立中央签发发布(Atomic Release Publisher) ───────────────────
release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: build-extension
steps:
- name: Checkout
uses: actions/checkout@v4
# 💡 独立下载打包完好的绝对产物包
- name: Download Chrome Extension
uses: actions/download-artifact@v4
with:
name: chrome-extension
path: release-artifacts
- name: Download Firefox Extension
uses: actions/download-artifact@v4
with:
name: firefox-extension
path: release-artifacts
- name: Download Source Code
uses: actions/download-artifact@v4
with:
name: source-code
path: 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:
name: "v${{ steps.version.outputs.version }}"
tag_name: ${{ github.ref_name }}
draft: false
prerelease: ${{ contains(github.ref_name, '-') }}
generate_release_notes: true
# 百分之百精准指向被下载下来的、毫无路径污染风险的 Zip 包实体
files: |
release-artifacts/*.zip