Files
subtracks/.github/workflows/release.yml
T
austinried c76a79c3ed ci: run the GitHub builds in the nix devshell
Drop setup-java, setup-android and the Gradle wrapper in favour of the
flake's pinned JDK, Gradle and Android SDK, restoring the Nix store with
cache-nix-action, so the release and next builds share the dev toolchain.
2026-10-08 18:52:43 +00:00

66 lines
2.7 KiB
YAML

name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
env:
NIX_CONFIG: experimental-features = nix-command flakes
jobs:
release:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@13d8dd58da0234aa297dedd986986ccb8e7f3e24 # v31.11.1
- uses: nix-community/cache-nix-action@7df957e333c1e5da7721f60227dbba6d06080569 # v7
with:
primary-key: nix-v2-${{ hashFiles('flake.lock', '**/*.nix') }}
restore-prefixes-first-match: nix-v2-
- name: Decode signing material
id: signing
env:
KEYSTORE_BASE64: ${{ secrets.SUBTRACKS_KEYSTORE_BASE64 }}
KEYPROPERTIES_BASE64: ${{ secrets.SUBTRACKS_KEYPROPERTIES_BASE64 }}
run: |
echo "$KEYSTORE_BASE64" | base64 -d > "$RUNNER_TEMP/release.keystore"
alias=$(printf '%s' "$KEYPROPERTIES_BASE64" | base64 -d | sed -n 's/^keyAlias=//p' | tr -d '\r')
test -n "$alias" || { echo "no keyAlias found in SUBTRACKS_KEYPROPERTIES_BASE64" >&2; exit 1; }
echo "alias=$alias" >> "$GITHUB_OUTPUT"
- name: Build APK and bundle
env:
RELEASE_KEYSTORE: ${{ runner.temp }}/release.keystore
RELEASE_KEYSTORE_PASSWORD: ${{ secrets.SUBTRACKS_UPLOAD_STORE_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ steps.signing.outputs.alias }}
RELEASE_KEY_PASSWORD: ${{ secrets.SUBTRACKS_UPLOAD_KEY_PASSWORD }}
run: nix develop --command gradle :app:assembleRelease :app:bundleRelease --no-daemon
- name: Read version code
id: version
run: echo "code=$(grep -oP 'versionCode = \K\d+' app/build.gradle.kts)" >> "$GITHUB_OUTPUT"
- name: Stage Play release notes
run: |
mkdir -p whatsnew
cp "metadata/en-US/changelogs/${{ steps.version.outputs.code }}.txt" whatsnew/whatsnew-en-US
- name: Upload to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.subtracks
releaseFiles: app/build/outputs/bundle/release/app-release.aab
tracks: ${{ vars.PLAY_TRACK || 'internal' }}
status: completed
whatsNewDirectory: whatsnew
mappingFile: app/build/outputs/mapping/release/mapping.txt
- name: Collect release APK
run: cp app/build/outputs/apk/release/app-release.apk subtracks.apk
- name: Create GitHub release
uses: softprops/action-gh-release@v3
with:
body_path: metadata/en-US/changelogs/${{ steps.version.outputs.code }}.txt
files: subtracks.apk