Repository navigation
Dev Build (预发布) #40
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: Dev Build (预发布) | |
| # dev 分支的"发布级验证包":把 release 打包挪到云端,减轻本地设备压力。 | |
| # 触发方式: | |
| # 1. Actions 页手动触发(workflow_dispatch) | |
| # 2. 推送到 dev 且**最新一条 commit message 含 [build]** 时自动触发 | |
| # 产物发布到固定 tag dev-build 的 pre-release,每次构建覆盖更新—— | |
| # Releases 页始终只有一个预发布条目,不会刷成流水账。 | |
| # 正式发版仍走 release-apk.yml(v* 标签),互不干扰。 | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: [dev] | |
| # 同一时刻只保留一条 dev 构建在跑,新提交顶掉旧构建 | |
| concurrency: | |
| group: dev-build | |
| cancel-in-progress: true | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| name: Build & publish dev-build prerelease | |
| runs-on: ubuntu-latest | |
| # 非 [build] 提交不构建:手动触发不受此限制。 | |
| # 不用 exit 78:GitHub Actions 里任何非零退出码都记 failure(neutral 是 Azure DevOps 语义), | |
| # job 级 if 才能真正显示 skipped 且 run 保持绿色(2026-10-05 实证)。 | |
| if: github.event_name != 'push' || contains(github.event.head_commit.message, '[build]') | |
| env: | |
| HAS_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE_BASE64 != '' }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: subosito/flutter-action@v2 | |
| with: | |
| channel: stable | |
| cache: true | |
| - name: Resolve dependencies | |
| run: flutter pub get | |
| # 与 release-apk.yml 完全一致的签名还原:保证 dev 包与正式包同一签名, | |
| # 可以互相覆盖安装(debug 签名与 release 签名互不兼容)。 | |
| - name: Restore release keystore (skipped when secrets are absent) | |
| if: env.HAS_KEYSTORE == 'true' | |
| working-directory: android | |
| env: | |
| KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | |
| KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} | |
| KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} | |
| KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} | |
| run: | | |
| echo "$KEYSTORE_BASE64" | base64 -d > "$RUNNER_TEMP/release.jks" | |
| { | |
| echo "storePassword=$KEYSTORE_PASSWORD" | |
| echo "keyPassword=$KEY_PASSWORD" | |
| echo "keyAlias=$KEY_ALIAS" | |
| echo "storeFile=$RUNNER_TEMP/release.jks" | |
| } > key.properties | |
| - name: Build release APKs | |
| run: flutter build apk --release --split-per-abi | |
| - name: Publish prerelease dev-build | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| # 固定 tag dev-build:先删旧 Release(连 tag),再在当前提交上重建 | |
| gh release delete dev-build --yes --cleanup-tag || true | |
| { | |
| echo "自动构建于 GitHub Actions(dev 分支预发布,随时可能被覆盖更新)," | |
| echo "可用下方 APK 安装:arm64-v8a(主流手机)/ armeabi-v7a(32位老机)/ x86_64(模拟器)。" | |
| echo "" | |
| echo "- 提交:${GITHUB_SHA::7} $(git log -1 --format=%s)" | |
| echo "- 构建时间:$(date -u '+%Y-%m-%d %H:%M UTC')" | |
| echo "- 稳定版请用 [正式 Release](https://github.com/${GITHUB_REPOSITORY}/releases/latest)" | |
| } > "$RUNNER_TEMP/notes.md" | |
| gh release create dev-build \ | |
| --target "$GITHUB_SHA" \ | |
| --prerelease \ | |
| --title "dev 预构建 · ${GITHUB_SHA::7}" \ | |
| --notes-file "$RUNNER_TEMP/notes.md" \ | |
| build/app/outputs/flutter-apk/app-arm64-v8a-release.apk \ | |
| build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk \ | |
| build/app/outputs/flutter-apk/app-x86_64-release.apk |