Merge pull request #40 from Rely-xcy/feat/custom-prompts #23
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: Beta Build | |
| # push 到 main 时自动构建一个测试包:universal flavor、正式签名、与 release 同配置(R8/资源压缩), | |
| # 仅 applicationId 后缀 .beta(com.aicode.beta,可与正式版同机共存)。 | |
| # 产物上传到 Actions Artifacts(默认保留 90 天),不进 GitHub Release。 | |
| # 打 v* tag 的正式发版走 android-release.yml;合入前门禁走 ci.yml。 | |
| on: | |
| push: | |
| branches: [ main ] | |
| # 纯文档/资源改动不影响 APK,跳过省时间(与 ci.yml 保持一致)。 | |
| paths-ignore: | |
| - '**.md' | |
| - 'docs/**' | |
| - 'docs-site/**' | |
| - 'LICENSE' | |
| - '.gitignore' | |
| # 允许在 Actions 页面手动触发,便于验证链路。 | |
| workflow_dispatch: | |
| # 同分支新提交到来时取消正在跑的旧 beta 构建,省额度。 | |
| concurrency: | |
| group: beta-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| name: Build Beta APK | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| # versionCode 由 build.gradle.kts 的 gitCommitCount() 取 git rev-list --count HEAD, | |
| # 浅克隆(默认 depth=1)会得到 1,必须拉完整历史,否则版本号错乱。 | |
| fetch-depth: 0 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: '17' | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v4 | |
| with: | |
| cache-read-only: ${{ github.ref != 'refs/heads/main' }} | |
| # beta 用正式签名:从 Secret 还原 keystore 到 app/aicode.jks,并生成 keystore.properties, | |
| # 与 android-release.yml 完全一致;缺任一步 beta 包会变成 unsigned。 | |
| - name: Restore release keystore | |
| env: | |
| KEYSTORE_BASE64: ${{ secrets.AICODE_KEYSTORE_BASE64 }} | |
| run: | | |
| echo "$KEYSTORE_BASE64" | base64 -d > app/aicode.jks | |
| echo "keystore restored ($(stat -c%s app/aicode.jks) bytes)" | |
| - name: Generate keystore.properties | |
| env: | |
| KEYSTORE_PASSWORD: ${{ secrets.AICODE_KEYSTORE_PASSWORD }} | |
| KEY_ALIAS: ${{ secrets.AICODE_KEY_ALIAS }} | |
| KEY_PASSWORD: ${{ secrets.AICODE_KEY_PASSWORD }} | |
| run: | | |
| cat > app/keystore.properties <<EOF | |
| storeFile=aicode.jks | |
| storePassword=$KEYSTORE_PASSWORD | |
| keyAlias=$KEY_ALIAS | |
| keyPassword=$KEY_PASSWORD | |
| EOF | |
| echo "app/keystore.properties generated" | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x ./gradlew | |
| # 构建 universal beta(arm64-v8a + x86_64,含两套容器镜像的通用包)。 | |
| # --stacktrace:失败时输出完整调用栈,便于定位 OOM/内存类根因。 | |
| - name: Build universal beta APK | |
| run: ./gradlew :app:assembleUniversalBeta --stacktrace | |
| # 产物重命名为 aicode-universal-beta-<sha7>.apk,短 sha 便于区分每次构建。 | |
| # 同时带上 R8 混淆映射(mapping.txt),供 beta 崩溃报告反混淆。 | |
| - name: Rename APK & collect mapping | |
| run: | | |
| set -e | |
| mkdir -p dist | |
| sha7="${GITHUB_SHA::7}" | |
| cp "app/build/outputs/apk/universal/beta/app-universal-beta.apk" \ | |
| "dist/aicode-universal-beta-${sha7}.apk" | |
| # AGP 8.x 的 mapping 输出目录是 variant 驼峰名(flavor + BuildType), | |
| # 即 outputs/mapping/universalBeta/,不是 outputs/mapping/universal/beta/。 | |
| if [[ -f "app/build/outputs/mapping/universalBeta/mapping.txt" ]]; then | |
| cp "app/build/outputs/mapping/universalBeta/mapping.txt" \ | |
| "dist/aicode-universal-beta-${sha7}-mapping.txt" | |
| fi | |
| ls -lh dist/ | |
| - name: Upload APK artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: aicode-beta-${{ github.sha }} | |
| # Artifacts 默认保留 90 天,无需显式配置。 | |
| path: | | |
| dist/aicode-universal-beta-*.apk | |
| dist/aicode-universal-beta-*-mapping.txt | |
| if-no-files-found: error |