name: Release on: push: tags: - "v*" workflow_dispatch: inputs: tag: description: "Release tag (e.g. v1.0.0)" required: true concurrency: group: release-${{ github.ref }} cancel-in-progress: false permissions: contents: write packages: write jobs: # ── Build release APK ───────────────────────────────────────────────── build-release: name: Build Release APK runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v7 - name: Set up JDK 21 uses: actions/setup-java@v6 with: distribution: temurin java-version: '21' - name: Setup Gradle uses: gradle/actions/setup-gradle@v6 with: validate-wrappers: true cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTED_KEY }} - name: Grant Execute Permission for Gradlew run: chmod +x gradlew - name: Determine version id: version run: | if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then TAG="${{ github.event.inputs.tag }}" else TAG="${GITHUB_REF#refs/tags/}" fi echo "tag=$TAG" >> "$GITHUB_OUTPUT" # Strip leading 'v' for versionName VERSION="${TAG#v}" echo "version=$VERSION" >> "$GITHUB_OUTPUT" # versionCode: strip pre-release suffixes (e.g. 1.25.0-rc1 -> 1.25.0) and dots BASE_VERSION="${VERSION%%-*}" CODE=$(echo "$BASE_VERSION" | tr -d '.' | sed 's/^0*//') [ -z "$CODE" ] && CODE=0 echo "code=$CODE" >> "$GITHUB_OUTPUT" if [[ "$VERSION" == *"-"* ]]; then PRERELEASE="true" else PRERELEASE="false" fi echo "prerelease=$PRERELEASE" >> "$GITHUB_OUTPUT" echo "Release: tag=$TAG version=$VERSION code=$CODE prerelease=$PRERELEASE" - name: Decode release keystore env: KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} run: | echo "$KEYSTORE_BASE64" | base64 -d > hermes-mobile-release.keystore.jks ls -lh hermes-mobile-release.keystore.jks - name: Build Release APK env: VERSION_NAME: ${{ steps.version.outputs.version }} VERSION_CODE: ${{ steps.version.outputs.code }} KEYSTORE_PATH: ${{ github.workspace }}/hermes-mobile-release.keystore.jks KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} run: | ./gradlew assembleRelease \ -PversionName="$VERSION_NAME" \ -PversionCode="$VERSION_CODE" - name: Rename APK and generate version file run: | mkdir -p release cp app/build/outputs/apk/release/app-release.apk \ release/hermes-mobile-${{ steps.version.outputs.tag }}.apk # Write version.txt for F-Droid to extract version info cat > release/version.txt <