From f46dd2e39e897257ce41e734f6397d5324282101 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 5 Jul 2026 03:01:14 +0000 Subject: [PATCH] Add Gitea Actions workflow --- .gitea/workflows/android.yml | 160 +++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 .gitea/workflows/android.yml diff --git a/.gitea/workflows/android.yml b/.gitea/workflows/android.yml new file mode 100644 index 0000000..e6306c5 --- /dev/null +++ b/.gitea/workflows/android.yml @@ -0,0 +1,160 @@ +name: Android APK + +on: + push: + branches: + - main + tags: + - "v*" + pull_request: + workflow_dispatch: + inputs: + publish_release: + description: "Create or update a GitHub Release" + required: true + default: "false" + type: choice + options: + - "false" + - "true" + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + env: + PUBLISH_RELEASE: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') || inputs.publish_release == 'true' }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set version + shell: bash + run: | + if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then + VERSION_NAME="${GITHUB_REF_NAME#v}" + else + VERSION_NAME="0.1.${GITHUB_RUN_NUMBER}" + fi + VERSION_CODE=$((1000 + GITHUB_RUN_NUMBER)) + echo "VERSION_NAME=${VERSION_NAME}" >> "${GITHUB_ENV}" + echo "VERSION_CODE=${VERSION_CODE}" >> "${GITHUB_ENV}" + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Set up Android SDK + uses: android-actions/setup-android@v3 + + - name: Install Android packages + shell: bash + run: sdkmanager "platforms;android-35" "build-tools;35.0.0" "platform-tools" + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 + with: + gradle-version: "8.10.2" + + - name: Configure signing + id: signing + shell: bash + env: + ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} + ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} + ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} + ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} + run: | + if [[ -z "${ANDROID_KEYSTORE_BASE64}" ]]; then + echo "signed=false" >> "${GITHUB_OUTPUT}" + exit 0 + fi + echo "${ANDROID_KEYSTORE_BASE64}" | base64 -d > release.jks + { + echo "storeFile=release.jks" + echo "storePassword=${ANDROID_KEYSTORE_PASSWORD}" + echo "keyAlias=${ANDROID_KEY_ALIAS}" + echo "keyPassword=${ANDROID_KEY_PASSWORD}" + } > signing.properties + echo "signed=true" >> "${GITHUB_OUTPUT}" + + - name: Build APK + shell: bash + run: | + if [[ "${{ steps.signing.outputs.signed }}" == "true" ]]; then + BUILD_TASK=":app:assembleRelease" + else + BUILD_TASK=":app:assembleDebug" + fi + gradle "${BUILD_TASK}" \ + -PversionCode="${VERSION_CODE}" \ + -PversionName="${VERSION_NAME}" \ + -PrepoSlug="${GITHUB_REPOSITORY}" + + - name: Prepare artifacts + shell: bash + run: | + mkdir -p release + APK_PATH="$(find app/build/outputs/apk -name '*.apk' | sort | tail -n 1)" + cp "${APK_PATH}" "release/tmux-android.apk" + cp "${APK_PATH}" "release/tmux-android-${VERSION_NAME}.apk" + SHA256="$(sha256sum release/tmux-android.apk | awk '{print $1}')" + APK_URL="https://github.com/${GITHUB_REPOSITORY}/releases/latest/download/tmux-android.apk" + RELEASE_PAGE_URL="https://github.com/${GITHUB_REPOSITORY}/releases/latest" + cat > release/latest.json << JSON + { + "versionCode": ${VERSION_CODE}, + "versionName": "${VERSION_NAME}", + "apkUrl": "${APK_URL}", + "sha256": "${SHA256}", + "releasePageUrl": "${RELEASE_PAGE_URL}", + "minSdk": 26 + } + JSON + + - name: Upload workflow artifact + uses: actions/upload-artifact@v4 + with: + name: tmux-android-${{ env.VERSION_NAME }} + path: | + release/tmux-android.apk + release/tmux-android-${{ env.VERSION_NAME }}.apk + release/latest.json + + - name: Require signing for release publishing + if: env.PUBLISH_RELEASE == 'true' && steps.signing.outputs.signed != 'true' + shell: bash + run: | + echo "Release publishing requires ANDROID_KEYSTORE_BASE64 and signing secrets." >&2 + exit 1 + + - name: Publish GitHub Release + if: env.PUBLISH_RELEASE == 'true' + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then + TAG="${GITHUB_REF_NAME}" + else + TAG="v${VERSION_NAME}" + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git tag -f "${TAG}" + git push -f origin "${TAG}" + fi + + if gh release view "${TAG}" >/dev/null 2>&1; then + gh release upload "${TAG}" release/tmux-android.apk release/latest.json --clobber + else + gh release create "${TAG}" release/tmux-android.apk release/latest.json \ + --latest \ + --title "tmux Android ${VERSION_NAME}" \ + --notes "Android APK for tmux-ui remote testing." + fi +