Files
xget-now/.github/workflows/test-build.yml
T
dependabot[bot] d92ad2c485 actions(deps): bump the github-actions group with 2 updates
Bumps the github-actions group with 2 updates: [actions/setup-python](https://github.com/actions/setup-python) and [actions/setup-node](https://github.com/actions/setup-node).


Updates `actions/setup-python` from 6 to 7
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6...v7)

Updates `actions/setup-node` from 6 to 7
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-20 09:07:05 +00:00

263 lines
8.1 KiB
YAML

name: 测试构建
permissions:
contents: read
on:
push:
branches: [main, develop]
paths-ignore:
- "**.md"
- "docs/**"
- "LICENSE"
- ".gitignore"
- ".editorconfig"
- "images/**"
- "screenshots/**"
- ".vscode/**"
pull_request:
branches: [main]
paths-ignore:
- "**.md"
- "docs/**"
- "LICENSE"
- ".gitignore"
- ".editorconfig"
- "images/**"
- "screenshots/**"
- ".vscode/**"
workflow_dispatch:
jobs:
test-build:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v7
- name: 设置 Python
uses: actions/setup-python@v7
with:
python-version: "3.11"
- name: 设置 Node.js
uses: actions/setup-node@v7
with:
node-version: "18"
- name: 安装 Node.js 依赖
run: npm ci
- name: 验证 manifest 文件
run: |
echo "验证 Chrome manifest..."
node -e "
const manifest = JSON.parse(require('fs').readFileSync('manifest.json', 'utf8'));
console.log('Chrome manifest 版本:', manifest.version);
console.log('Manifest 版本:', manifest.manifest_version);
if (manifest.manifest_version !== 3) {
throw new Error('Chrome manifest 应该使用 Manifest V3');
}
"
echo "验证 Firefox manifest..."
node -e "
const manifest = JSON.parse(require('fs').readFileSync('manifest-firefox.json', 'utf8'));
console.log('Firefox manifest 版本:', manifest.version);
console.log('Manifest 版本:', manifest.manifest_version);
if (manifest.manifest_version !== 2) {
throw new Error('Firefox manifest 应该使用 Manifest V2');
}
"
- name: 检查必需文件
run: |
echo "检查必需文件是否存在..."
required_files=(
"manifest.json"
"manifest-firefox.json"
"src/background/index.js"
"src/content/index.js"
"src/popup/popup.js"
"src/popup/index.html"
"src/shared/download-core.js"
"src/userscript/index.js"
"src/shared/compat/webext-compat.js"
"src/shared/compat/firefox-compat.js"
"src/shared/platform-detector.js"
"src/shared/platforms.js"
"build.py"
"dev.py"
)
for file in "${required_files[@]}"; do
if [ -f "$file" ]; then
echo "[OK] $file"
else
echo "[FAIL] $file 缺失"
exit 1
fi
done
- name: 运行基础测试
run: |
echo "运行基础测试..."
python dev.py test
npm run test:unit
- name: 运行代码检查
run: |
echo "运行代码检查..."
python dev.py lint
- name: 测试 Chrome 构建
run: |
echo "测试 Chrome 构建..."
python build.py --platform chrome
# 验证构建结果
if [ -d "build/chrome" ]; then
echo "[OK] Chrome 构建目录已创建"
ls -la build/chrome/
else
echo "[FAIL] Chrome 构建失败"
exit 1
fi
- name: 测试 Firefox 构建
run: |
echo "测试 Firefox 构建..."
python build.py --platform firefox
# 验证构建结果
if [ -d "build/firefox" ]; then
echo "[OK] Firefox 构建目录已创建"
ls -la build/firefox/
else
echo "[FAIL] Firefox 构建失败"
exit 1
fi
- name: 测试 userscript 构建
run: |
echo "测试 userscript 构建..."
python build.py --platform userscript
if [ -f "build/userscript/xget-now.user.js" ]; then
echo "[OK] userscript 构建文件已生成"
ls -la build/userscript/
else
echo "[FAIL] userscript 构建失败"
exit 1
fi
- name: 测试扩展包生成
run: |
echo "测试扩展包生成..."
python build.py --platform all --package
VERSION=$(node -p 'require("./package.json").version')
# 验证扩展包
if [ -d "packages" ]; then
echo "[OK] 扩展包目录已创建"
ls -la packages/
# 检查是否有 Chrome、Firefox 和 userscript 包
if [ -f "packages/Xget-Now_${VERSION}.chromium.zip" ]; then
echo "[OK] Chrome 扩展包已生成"
else
echo "[FAIL] Chrome 扩展包生成失败"
exit 1
fi
if [ -f "packages/Xget-Now_${VERSION}.firefox.xpi" ]; then
echo "[OK] Firefox 扩展包已生成"
else
echo "[FAIL] Firefox 扩展包生成失败"
exit 1
fi
if [ -f "packages/Xget-Now_${VERSION}.userscript.user.js" ]; then
echo "[OK] userscript 包已生成"
else
echo "[FAIL] userscript 包生成失败"
exit 1
fi
else
echo "[FAIL] 扩展包生成失败"
exit 1
fi
- name: 验证构建的 manifest 文件
run: |
echo "验证构建的 manifest 文件..."
# 检查 Chrome 构建的 manifest
echo "检查 Chrome manifest..."
node -e "
const manifest = JSON.parse(require('fs').readFileSync('build/chrome/manifest.json', 'utf8'));
console.log('Chrome 构建版本:', manifest.version);
if (manifest.manifest_version !== 3) {
throw new Error('Chrome 构建应该使用 Manifest V3');
}
if (!manifest.action) {
throw new Error('Chrome 构建应该有 action 字段');
}
"
# 检查 Firefox 构建的 manifest
echo "检查 Firefox manifest..."
node -e "
const manifest = JSON.parse(require('fs').readFileSync('build/firefox/manifest.json', 'utf8'));
console.log('Firefox 构建版本:', manifest.version);
if (manifest.manifest_version !== 2) {
throw new Error('Firefox 构建应该使用 Manifest V2');
}
if (!manifest.browser_action) {
throw new Error('Firefox 构建应该有 browser_action 字段');
}
if (!manifest.applications && !manifest.browser_specific_settings) {
throw new Error('Firefox 构建应该有 applications 或 browser_specific_settings 字段');
}
"
echo "检查 userscript 构建..."
node -e "
const fs = require('fs');
const userscript = fs.readFileSync('build/userscript/xget-now.user.js', 'utf8');
if (!userscript.includes('@grant GM_xmlhttpRequest')) {
throw new Error('userscript 构建缺少 GM_xmlhttpRequest grant');
}
if (!userscript.includes('@run-at document-start')) {
throw new Error('userscript 构建缺少 document-start 配置');
}
console.log('Userscript 元数据验证通过');
"
- name: 上传构建结果
uses: actions/upload-artifact@v7
with:
name: extension-builds-${{ github.sha }}
path: |
build/
packages/
retention-days: 7
- name: 测试总结
run: |
echo ""
echo "所有测试通过"
echo "================================"
echo "[OK] Manifest 文件验证"
echo "[OK] 必需文件检查"
echo "[OK] 基础测试"
echo "[OK] 代码检查"
echo "[OK] Chrome 构建"
echo "[OK] Firefox 构建"
echo "[OK] userscript 构建"
echo "[OK] 扩展包生成"
echo "[OK] 构建结果验证"
echo "================================"
echo "准备发布"