1b3fcca0d5
Android Release / build-apk (push) Failing after 1m30s
Fires on any v* tag push. Steps: - Installs Android SDK + NDK 30.0.14904198 (cached by SDK version key) - Builds release APK for arm64-v8a via scripts/build_android_apk.sh - Signs with the release keystore stored in RELEASE_KEYSTORE_B64 secret - Creates (or reuses) the Gitea release for the tag - Uploads solitaire-quest.apk as a release asset Obtainium users can track releases by adding: https://git.aleshym.co/funman300/Rusty_Solitare Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
123 lines
4.3 KiB
YAML
123 lines
4.3 KiB
YAML
name: Android Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
env:
|
|
ANDROID_HOME: /opt/android-sdk
|
|
NDK_VERSION: 30.0.14904198
|
|
BUILD_TOOLS_VERSION: "36.1.0"
|
|
PLATFORM: android-34
|
|
APK_OUT: target/release/apk/solitaire-quest.apk
|
|
GITEA_URL: https://git.aleshym.co
|
|
REPO: funman300/Rusty_Solitare
|
|
|
|
jobs:
|
|
build-apk:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Java 17
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: temurin
|
|
java-version: '17'
|
|
|
|
- name: Cache Android SDK
|
|
uses: actions/cache@v4
|
|
id: android-cache
|
|
with:
|
|
path: /opt/android-sdk
|
|
key: android-sdk-${{ env.NDK_VERSION }}-${{ env.BUILD_TOOLS_VERSION }}
|
|
|
|
- name: Install Android SDK + NDK
|
|
if: steps.android-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
mkdir -p $ANDROID_HOME/cmdline-tools
|
|
wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip \
|
|
-O /tmp/cmdtools.zip
|
|
unzip -q /tmp/cmdtools.zip -d $ANDROID_HOME/cmdline-tools
|
|
mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest
|
|
yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses >/dev/null
|
|
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \
|
|
"ndk;$NDK_VERSION" \
|
|
"build-tools;$BUILD_TOOLS_VERSION" \
|
|
"platforms;$PLATFORM"
|
|
|
|
- name: Set up Rust (stable + aarch64-android)
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: aarch64-linux-android
|
|
|
|
- name: Cache Cargo
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.cargo/registry/index
|
|
~/.cargo/registry/cache
|
|
~/.cargo/git/db
|
|
~/.cargo/bin/cargo-ndk
|
|
target/aarch64-linux-android
|
|
key: cargo-android-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: cargo-android-
|
|
|
|
- name: Install cargo-ndk
|
|
run: cargo-ndk --version 2>/dev/null || cargo install cargo-ndk --version 4.1.2 --locked
|
|
|
|
- name: Decode release keystore
|
|
run: echo "${{ secrets.RELEASE_KEYSTORE_B64 }}" | base64 -d > release.jks
|
|
|
|
- name: Build release APK
|
|
env:
|
|
ANDROID_NDK_HOME: /opt/android-sdk/ndk/${{ env.NDK_VERSION }}
|
|
PROFILE: release
|
|
ABIS: arm64-v8a
|
|
KEYSTORE: ./release.jks
|
|
KEYSTORE_PASS: ${{ secrets.RELEASE_KEYSTORE_PASS }}
|
|
KEY_ALIAS: release
|
|
KEY_PASS: ${{ secrets.RELEASE_KEYSTORE_PASS }}
|
|
run: bash scripts/build_android_apk.sh
|
|
|
|
- name: Get tag name
|
|
id: tag
|
|
run: echo "name=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
|
|
|
|
- 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 }}"
|
|
|
|
# Re-use an existing release for this tag (e.g. created manually).
|
|
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/Rusty_Solitare\n\`\`\`\n\nOr download \`solitaire-quest.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"
|