Repository navigation
chore: 删除无效残留 commonMain/TextSelectionColors.kt #1
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: Android Release | |
| # 打 Tag(如 v1.0.0)时触发:构建三个签名 Release APK | |
| # - universal : arm64-v8a + x86_64,含 arm + x86 两套容器镜像(通用,体积最大) | |
| # - armsolo : 仅 arm64-v8a,仅含 arm 镜像(真机首选,体积约为 universal 的一半) | |
| # - x86solo : 仅 x86_64,仅含 x86 镜像(x86 模拟器/Chromebook,体积约为 universal 的一半) | |
| # 创建 GitHub Release 并把三个 APK 作为资产发布。 | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| # 允许在 Actions 页面手动触发,便于验证构建链路。 | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| name: Build & Release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write # 创建 Release 与上传资产需要写权限 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - 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: | |
| # 复用 Gradle 构建缓存,加速后续构建。 | |
| cache-read-only: ${{ github.ref != 'refs/heads/main' }} | |
| - name: Restore release keystore | |
| env: | |
| # keystore 文件以 base64 存入 Secret,避免二进制文件被破坏。 | |
| # 还原到 app/aicode.jks,与 build.gradle.kts 期望的位置一致。 | |
| 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 | |
| # 一次性构建全部 flavor 的 release APK(universal/armsolo/x86solo) | |
| - name: Build all flavor Release APKs | |
| run: ./gradlew assembleRelease | |
| # 给三个 APK 加上更可读的文件名,便于用户在 Release 页区分架构。 | |
| - name: Rename APKs by flavor | |
| run: | | |
| mkdir -p dist | |
| for f in universal armsolo x86solo; do | |
| src="app/build/outputs/apk/$f/release/app-$f-release.apk" | |
| if [[ -f "$src" ]]; then | |
| cp "$src" "dist/aicode-${GITHUB_REF_NAME:-manual}-${f}.apk" | |
| echo "packaged dist/aicode-${GITHUB_REF_NAME:-manual}-${f}.apk" | |
| else | |
| echo "::warning::missing $src" | |
| fi | |
| done | |
| ls -lh dist/ | |
| - name: Verify signed APKs | |
| # 用 build-tools 自带 apksigner 逐个校验签名;任一未签名仅告警不阻断。 | |
| uses: r0adillll/check-signed-apk-action@v1 | |
| with: | |
| apkPath: app/build/outputs/apk/universal/release/app-universal-release.apk | |
| continue-on-error: true | |
| - name: Determine release name | |
| id: release | |
| run: | | |
| # 手动触发(无 tag)时用 run id 作为临时名,避免破坏 tag 发布。 | |
| if [[ "${{ github.ref }}" == refs/tags/* ]]; then | |
| echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "tag=manual-${GITHUB_RUN_NUMBER}" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Create GitHub Release & Upload assets | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ steps.release.outputs.tag }} | |
| name: Release ${{ steps.release.outputs.tag }} | |
| generate_release_notes: true | |
| files: | | |
| dist/aicode-*-universal.apk | |
| dist/aicode-*-armsolo.apk | |
| dist/aicode-*-x86solo.apk | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |