refactor: 优化下布局 #10
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| jobs: | |
| package: | |
| permissions: | |
| contents: read | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true # 拉取 MaaCommonAssets(OCR 模型来源) | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.13' | |
| - uses: astral-sh/setup-uv@v8.1.0 | |
| - uses: pnpm/action-setup@v6 | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: 24 | |
| cache: pnpm | |
| - run: pnpm install --frozen-lockfile | |
| - run: pnpm check | |
| - run: pnpm check:py | |
| - name: Disable Windows Defender realtime monitoring | |
| shell: powershell | |
| run: | | |
| # PyInstaller 写入 exe 时 Defender 实时扫描会改动 PKG archive, | |
| # 导致产出的 exe "Could not load embedded PKG archive"。打包前关掉。 | |
| Set-MpPreference -DisableRealtimeMonitoring $true -ErrorAction SilentlyContinue | |
| Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE" -ErrorAction SilentlyContinue | |
| Write-Host "Defender realtime monitoring disabled for build" | |
| - name: Configure OCR model | |
| run: uv run python tools/configure.py | |
| - name: Convert logo.png to ico | |
| shell: bash | |
| run: uv run python -c "from PIL import Image; Image.open('logo.png').save('logo.ico', format='ICO', sizes=[(256,256),(128,128),(64,64),(48,48),(32,32),(16,16)])" | |
| - name: Build (PyInstaller) | |
| run: uv run pyinstaller aao.spec --noconfirm | |
| - name: Smoke test packaged exe | |
| shell: bash | |
| run: | | |
| # 打包后立即 offscreen 跑,验证 PKG archive 能加载(CI 自检,避免产出损坏的 exe 还发版) | |
| export QT_QPA_PLATFORM=offscreen | |
| timeout 20 ./dist/aao.app/aao.app.exe --no-api > smoke.log 2>&1 || true | |
| if grep -q "Could not load PyInstaller" smoke.log; then | |
| echo "[ERR] packaged exe failed to load PKG archive" | |
| cat smoke.log | |
| exit 1 | |
| fi | |
| echo "[OK] packaged exe loads PKG archive" | |
| head -5 smoke.log | |
| - name: Download AFA (ArknightsFrameAssistant) | |
| shell: bash | |
| run: | | |
| mkdir -p dist/aao.app/afa | |
| # AFA 是 GPL-3.0(CloudTracey/arknights-frame-assistant),凹图热键依赖。 | |
| # 查最新 release tag,下对应 AFA.exe + LICENSE(满足 GPL 分发要求)。 | |
| repo="CloudTracey/arknights-frame-assistant" | |
| tag="$(curl -fsSL "https://api.github.com/repos/$repo/releases/latest" | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p')" | |
| echo "AFA latest tag: $tag" | |
| curl -fsSL "https://github.com/$repo/releases/download/$tag/AFA.exe" -o dist/aao.app/afa/AFA.exe | |
| curl -fsSL "https://raw.githubusercontent.com/$repo/$tag/LICENSE" -o dist/aao.app/afa/LICENSE || echo "[WARN] AFA LICENSE 未取到" | |
| ls -la dist/aao.app/afa/ | |
| - name: Sync game data | |
| run: uv run python -m aao.resources.syncer --remote | |
| - name: Stage external resources | |
| shell: bash | |
| run: | | |
| cp -r resource data examples dist/aao.app/ | |
| cp logo.png dist/aao.app/ | |
| # 清理冒烟测试生成的运行时目录(不该进发版包) | |
| rm -rf dist/aao.app/config dist/aao.app/debug | |
| - name: Package | |
| shell: bash | |
| run: | | |
| mkdir -p dist | |
| archive="ArknightsAutoOperator-win-x64-${GITHUB_REF_NAME}.zip" | |
| ( cd dist/aao.app && 7z a "../$archive" . ) | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: win-x64 | |
| path: dist/*.zip | |
| - name: Upload raw dist (诊断 PKG 损坏用) | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: win-x64-raw | |
| path: dist/aao.app | |
| git_cliff: | |
| name: Generate release notes | |
| if: startsWith(github.ref, 'refs/tags/') | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Generate release notes | |
| shell: bash | |
| env: | |
| GITHUB_REPO: ${{ github.repository }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| version="2.13.1" | |
| archive="git-cliff-${version}-x86_64-unknown-linux-gnu.tar.gz" | |
| mkdir -p "$RUNNER_TEMP/git-cliff" | |
| curl -fsSL "https://github.com/orhun/git-cliff/releases/download/v${version}/$archive" -o "$RUNNER_TEMP/$archive" | |
| tar -xzf "$RUNNER_TEMP/$archive" -C "$RUNNER_TEMP/git-cliff" | |
| git_cliff="$(find "$RUNNER_TEMP/git-cliff" -type f -name git-cliff -perm -111 | head -n 1)" | |
| if [[ -z "$git_cliff" ]]; then | |
| echo "[ERR] git-cliff binary was not found after extraction" | |
| exit 1 | |
| fi | |
| "$git_cliff" --config .github/cliff.toml --latest --strip header --output CHANGES.md | |
| - name: Upload release notes | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: release-notes | |
| path: CHANGES.md | |
| release: | |
| if: startsWith(github.ref, 'refs/tags/') | |
| needs: [package, git_cliff] | |
| permissions: | |
| contents: write | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| path: release-assets | |
| merge-multiple: true | |
| - uses: softprops/action-gh-release@v3 | |
| with: | |
| body_path: release-assets/CHANGES.md | |
| files: | | |
| release-assets/*.zip |