Files
transui/.gitea/workflows/android.yml
T
intelligence 7ed3adf208
Android / build-android (release) Successful in 3m39s
Build / build-amd64 (release) Successful in 43s
Build / build-arm64 (release) Successful in 1m32s
feat:building-with-version-number
2026-08-30 00:20:52 +02:00

104 lines
4.1 KiB
YAML

name: Android
on:
release:
types: [published]
workflow_dispatch:
jobs:
build-android:
runs-on: debian-latest
permissions:
contents: read
releases: write
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
- uses: android-actions/setup-android@v3
# Gitea's act resolver cannot peel the annotated v4 tag alias.
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- name: Set release version
if: gitea.event_name == 'release'
shell: bash
working-directory: android
env:
TRANSUI_RELEASE_TAG: ${{ gitea.event.release.tag_name }}
run: |
version="${TRANSUI_RELEASE_TAG#v}"
if [[ ! "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
echo "Release tag must use vMAJOR.MINOR.PATCH or MAJOR.MINOR.PATCH" >&2
exit 1
fi
major=$((10#${BASH_REMATCH[1]}))
minor=$((10#${BASH_REMATCH[2]}))
patch=$((10#${BASH_REMATCH[3]}))
if (( minor > 999 || patch > 999 )); then
echo "Minor and patch versions must be below 1000" >&2
exit 1
fi
version_code=$((major * 1000000 + minor * 1000 + patch))
if (( version_code < 1 || version_code > 2100000000 )); then
echo "Release version is outside Android's versionCode range" >&2
exit 1
fi
echo "TRANSUI_VERSION=$version" >> "$GITEA_ENV"
echo "TRANSUI_VERSION_CODE=$version_code" >> "$GITEA_ENV"
sed -i -E \
-e "s/^([[:space:]]*)versionCode .*/\1versionCode $version_code/" \
-e "s/^([[:space:]]*)versionName .*/\1versionName '$version'/" \
app/build.gradle
grep -Fq " versionCode $version_code" app/build.gradle
grep -Fq " versionName '$version'" app/build.gradle
- name: Install Android SDK packages
run: sdkmanager "platforms;android-35" "build-tools;35.0.0"
- name: Lint and test
working-directory: android
run: ./gradlew --no-daemon lintDebug testDebugUnitTest
- name: Build signed release APK
working-directory: android
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ORG_GRADLE_PROJECT_transuiStorePassword: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ORG_GRADLE_PROJECT_transuiKeyAlias: ${{ secrets.ANDROID_KEY_ALIAS }}
ORG_GRADLE_PROJECT_transuiKeyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
if [ -z "$ANDROID_KEYSTORE_BASE64" ]; then
echo "Release signing secrets are not configured; skipping release APK"
exit 0
fi
keystore="$RUNNER_TEMP/transui-release.jks"
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$keystore"
export ORG_GRADLE_PROJECT_transuiKeystore="$keystore"
./gradlew --no-daemon assembleRelease
- name: Prepare APK artifacts
working-directory: android
run: |
mkdir -p ../artifacts
if [ -f app/build/outputs/apk/release/app-release.apk ]; then
cp app/build/outputs/apk/release/app-release.apk ../artifacts/transui-android-release.apk
cd ../artifacts
sha256sum ./*.apk > SHA256SUMS-android
else
echo "No release APK to publish"
fi
- name: Attach APKs to the Gitea release
if: gitea.event_name == 'release'
env:
GITEA_SERVER_URL: ${{ gitea.server_url }}
GITEA_REPOSITORY: ${{ gitea.repository }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_RELEASE_TAG: ${{ gitea.event.release.tag_name }}
run: scripts/publish-release-assets.sh
- name: Upload APKs
if: always()
uses: christopherhx/gitea-upload-artifact@v4
with:
name: transui-android
path: artifacts/
if-no-files-found: warn