e48f652454
Build Android Builder Image / build (push) Failing after 3m54s
Replaces the 5 per-run tool-install steps (~2m 30s) with a pre-built container image (git.aleshym.co/funman300/android-builder) that ships Ubuntu 22.04 + Java 17 + Android SDK/NDK + Rust stable + aarch64 target + cargo-ndk + sccache. android-release.yml now runs inside the container and adds two cache steps instead: Cargo registry and sccache directory. sccache (RUSTC_WRAPPER) caches at the translation-unit level so partial hits survive Cargo.lock changes — far more resilient than caching the full target/ directory. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
99 lines
3.3 KiB
YAML
99 lines
3.3 KiB
YAML
name: Android Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
env:
|
|
APK_OUT: target/release/apk/ferrous-solitaire.apk
|
|
GITEA_URL: https://git.aleshym.co
|
|
REPO: funman300/Ferrous-Solitaire
|
|
|
|
jobs:
|
|
build-apk:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: git.aleshym.co/funman300/android-builder:latest
|
|
credentials:
|
|
username: ${{ gitea.actor }}
|
|
password: ${{ secrets.CI_TOKEN }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Cache Cargo registry
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
/usr/local/cargo/registry/index
|
|
/usr/local/cargo/registry/cache
|
|
/usr/local/cargo/git/db
|
|
key: cargo-registry-android-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: cargo-registry-android-
|
|
|
|
- name: Cache sccache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: /root/.cache/sccache
|
|
key: sccache-android-aarch64-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: sccache-android-aarch64-
|
|
|
|
- name: Get tag name
|
|
id: tag
|
|
run: echo "name=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Decode release keystore
|
|
run: echo "${{ secrets.RELEASE_KEYSTORE_B64 }}" | base64 -d > release.jks
|
|
|
|
- name: Build release APK
|
|
env:
|
|
PROFILE: release
|
|
ABIS: arm64-v8a
|
|
KEYSTORE: ./release.jks
|
|
KEYSTORE_PASS: ${{ secrets.RELEASE_KEYSTORE_PASS }}
|
|
KEY_ALIAS: release
|
|
KEY_PASS: ${{ secrets.RELEASE_KEYSTORE_PASS }}
|
|
VERSION_NAME: ${{ steps.tag.outputs.name }}
|
|
RUSTC_WRAPPER: sccache
|
|
SCCACHE_DIR: /root/.cache/sccache
|
|
run: bash scripts/build_android_apk.sh
|
|
|
|
- name: sccache stats
|
|
if: always()
|
|
run: sccache --show-stats
|
|
|
|
- name: Create or get Gitea release
|
|
id: release
|
|
run: |
|
|
TAG="${{ steps.tag.outputs.name }}"
|
|
BASE="${{ env.GITEA_URL }}/api/v1/repos/${{ env.REPO }}"
|
|
AUTH="Authorization: token ${{ secrets.CI_TOKEN }}"
|
|
|
|
ID=$(curl -sf -H "$AUTH" "$BASE/releases/tags/$TAG" \
|
|
| python3 -c "import sys,json; print(json.load(sys.stdin).get('id',''))" \
|
|
2>/dev/null || true)
|
|
|
|
if [ -z "$ID" ]; then
|
|
ID=$(curl -sf -X POST \
|
|
-H "$AUTH" -H "Content-Type: application/json" \
|
|
"$BASE/releases" \
|
|
-d "{
|
|
\"tag_name\": \"$TAG\",
|
|
\"name\": \"$TAG\",
|
|
\"body\": \"## Android release $TAG\n\n**Install / update with Obtainium** — add this source URL:\n\`\`\`\nhttps://git.aleshym.co/funman300/Ferrous-Solitaire\n\`\`\`\n\nOr download \`ferrous-solitaire.apk\` below and sideload it directly.\",
|
|
\"draft\": false,
|
|
\"prerelease\": false
|
|
}" \
|
|
| python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
|
|
fi
|
|
echo "id=$ID" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Upload APK to release
|
|
run: |
|
|
curl -sf -X POST \
|
|
-H "Authorization: token ${{ secrets.CI_TOKEN }}" \
|
|
-F "attachment=@${{ env.APK_OUT }};type=application/vnd.android.package-archive" \
|
|
"${{ env.GITEA_URL }}/api/v1/repos/${{ env.REPO }}/releases/${{ steps.release.outputs.id }}/assets"
|