generated from dellevin/template
118 lines
3.9 KiB
YAML
118 lines
3.9 KiB
YAML
name: Eta Build
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- main
|
||
workflow_dispatch:
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
concurrency:
|
||
group: android-build-${{ github.ref }}
|
||
cancel-in-progress: true
|
||
|
||
jobs:
|
||
build-apks:
|
||
name: 构建 Debug 与 Release APK
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 40
|
||
|
||
steps:
|
||
- name: 检出代码
|
||
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
||
|
||
- name: 配置 JDK 25
|
||
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5
|
||
with:
|
||
distribution: temurin
|
||
java-version: "25"
|
||
|
||
- name: 配置 Gradle
|
||
uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6
|
||
with:
|
||
cache-provider: basic
|
||
|
||
- name: 配置 Android SDK 工具
|
||
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4
|
||
with:
|
||
packages: ""
|
||
log-accepted-android-sdk-licenses: false
|
||
|
||
- name: 安装 Android SDK 37
|
||
run: sdkmanager --channel=3 "platforms;android-37.0"
|
||
|
||
- name: 还原发布证书
|
||
env:
|
||
ETA_RELEASE_KEYSTORE_BASE64: ${{ secrets.ETA_RELEASE_KEYSTORE_BASE64 }}
|
||
ETA_RELEASE_STORE_PASSWORD: ${{ secrets.ETA_RELEASE_STORE_PASSWORD }}
|
||
ETA_RELEASE_KEY_ALIAS: ${{ secrets.ETA_RELEASE_KEY_ALIAS }}
|
||
ETA_RELEASE_KEY_PASSWORD: ${{ secrets.ETA_RELEASE_KEY_PASSWORD }}
|
||
run: |
|
||
if [[ -z "$ETA_RELEASE_KEYSTORE_BASE64" ||
|
||
-z "$ETA_RELEASE_STORE_PASSWORD" ||
|
||
-z "$ETA_RELEASE_KEY_ALIAS" ||
|
||
-z "$ETA_RELEASE_KEY_PASSWORD" ]]; then
|
||
echo "::error::缺少 Release 签名 Secrets,请检查仓库的 Actions Secrets。"
|
||
exit 1
|
||
fi
|
||
printf '%s' "$ETA_RELEASE_KEYSTORE_BASE64" \
|
||
| base64 --decode \
|
||
> "$RUNNER_TEMP/eta-release.jks"
|
||
|
||
- name: 构建 Debug 与 Release APK
|
||
env:
|
||
ETA_RELEASE_STORE_FILE: ${{ runner.temp }}/eta-release.jks
|
||
ETA_RELEASE_STORE_PASSWORD: ${{ secrets.ETA_RELEASE_STORE_PASSWORD }}
|
||
ETA_RELEASE_KEY_ALIAS: ${{ secrets.ETA_RELEASE_KEY_ALIAS }}
|
||
ETA_RELEASE_KEY_PASSWORD: ${{ secrets.ETA_RELEASE_KEY_PASSWORD }}
|
||
run: >-
|
||
./gradlew --no-daemon --no-configuration-cache
|
||
:app:assembleDebug :app:assembleRelease
|
||
|
||
- name: 验证并整理 APK
|
||
id: apk
|
||
run: |
|
||
debug_apk="app/build/outputs/apk/debug/app-debug.apk"
|
||
release_apk="app/build/outputs/apk/release/app-release.apk"
|
||
output_dir="$RUNNER_TEMP/apks"
|
||
apksigner_path="$(find "$ANDROID_HOME/build-tools" \
|
||
-type f -name apksigner | sort -V | tail -n 1)"
|
||
|
||
if [[ ! -f "$debug_apk" ]]; then
|
||
echo "::error::未找到 Debug APK。"
|
||
exit 1
|
||
fi
|
||
if [[ ! -f "$release_apk" ]]; then
|
||
echo "::error::未找到 Release APK。"
|
||
exit 1
|
||
fi
|
||
if [[ -z "$apksigner_path" ]]; then
|
||
echo "::error::未找到 apksigner。"
|
||
exit 1
|
||
fi
|
||
|
||
"$apksigner_path" verify "$release_apk"
|
||
mkdir -p "$output_dir"
|
||
cp "$debug_apk" "$output_dir/app-debug.apk"
|
||
cp "$release_apk" "$output_dir/app-release.apk"
|
||
echo "debug_path=$output_dir/app-debug.apk" >> "$GITHUB_OUTPUT"
|
||
echo "release_path=$output_dir/app-release.apk" >> "$GITHUB_OUTPUT"
|
||
|
||
- name: 上传 Debug APK
|
||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||
with:
|
||
path: ${{ steps.apk.outputs.debug_path }}
|
||
archive: false
|
||
if-no-files-found: error
|
||
retention-days: 14
|
||
|
||
- name: 上传 Release APK
|
||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||
with:
|
||
path: ${{ steps.apk.outputs.release_path }}
|
||
archive: false
|
||
if-no-files-found: error
|
||
retention-days: 14
|