Skip to content

Dev Build (预发布) #40

Dev Build (预发布)

Dev Build (预发布) #40

Workflow file for this run

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