diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml new file mode 100644 index 0000000..76c7a2f --- /dev/null +++ b/.github/workflows/android-release.yml @@ -0,0 +1,84 @@ +name: Android Release APK + +'on': + push: + branches: + - main + tags: + - 'v*' + pull_request: + branches: + - main + workflow_dispatch: + inputs: + release_tag: + description: Optional tag to publish (example v1.0.0). Leave empty for build only. + required: false + +permissions: + contents: write + +jobs: + build_apk: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Build release APK + working-directory: android + run: ./gradlew --no-daemon assembleRelease + + - name: Upload APK artifact + uses: actions/upload-artifact@v4 + with: + name: app-release-apk + path: android/app/build/outputs/apk/release/app-release.apk + + publish_release: + needs: build_apk + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') || (github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag != '') + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Resolve release tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "RELEASE_TAG=${{ github.event.inputs.release_tag }}" >> "$GITHUB_ENV" + else + echo "RELEASE_TAG=${GITHUB_REF_NAME}" >> "$GITHUB_ENV" + fi + + - name: Ensure tag exists for manual run + if: github.event_name == 'workflow_dispatch' + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git tag "$RELEASE_TAG" "${{ github.sha }}" || true + git push origin "$RELEASE_TAG" + + - name: Download APK artifact + uses: actions/download-artifact@v4 + with: + name: app-release-apk + path: dist + + - name: Attach APK to GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ env.RELEASE_TAG }} + generate_release_notes: true + files: dist/app-release.apk