263 lines
8.1 KiB
YAML
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@v6
|
|
|
|
- name: 设置 Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.11"
|
|
|
|
- name: 设置 Node.js
|
|
uses: actions/setup-node@v6
|
|
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 "准备发布"
|