Skip to content

0.1.1

0.1.1 #2

Workflow file for this run

name: Android release
on:
release:
types: [published]
permissions:
contents: write
concurrency:
group: android-release-${{ github.event.release.id }}
cancel-in-progress: false
jobs:
build-apk:
name: Build signed APK
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
PULSE_VERSION_NAME: ${{ github.event.release.tag_name }}
PULSE_VERSION_CODE: ${{ github.run_number }}
steps:
- name: Check out release
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
ref: ${{ github.event.release.tag_name }}
- name: Validate release tag
shell: bash
run: |
if [[ ! "$PULSE_VERSION_NAME" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+([+-][0-9A-Za-z.-]+)*$ ]]; then
echo "Release tags must use a version such as v1.2.3."
exit 1
fi
- name: Set up Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: 1.3.13
- name: Set up Node
uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
with:
node-version: 22
package-manager-cache: false
- name: Set up Java
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: 21
- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
with:
cache-provider: basic
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Verify web app
run: bun run verify
- name: Sync Android app
run: bun run mobile:sync
- name: Build release APK
working-directory: android
run: ./gradlew assembleRelease --no-daemon
- name: Sign and verify APK
id: sign
env:
PULSE_ANDROID_KEYSTORE_BASE64: ${{ secrets.PULSE_ANDROID_KEYSTORE_BASE64 }}
PULSE_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.PULSE_ANDROID_KEYSTORE_PASSWORD }}
run: |
test -n "$PULSE_ANDROID_KEYSTORE_BASE64"
test -n "$PULSE_ANDROID_KEYSTORE_PASSWORD"
keystore="$RUNNER_TEMP/pulse-release.p12"
printf '%s' "$PULSE_ANDROID_KEYSTORE_BASE64" | base64 --decode > "$keystore"
safe_tag="${GITHUB_REF_NAME//\//-}"
apk="$RUNNER_TEMP/Pulse-$safe_tag.apk"
unsigned_apk="android/app/build/outputs/apk/release/app-release-unsigned.apk"
build_tools="$ANDROID_HOME/build-tools/36.0.0"
"$build_tools/zipalign" -f -p 4 "$unsigned_apk" "$apk"
"$build_tools/apksigner" sign \
--ks "$keystore" \
--ks-type PKCS12 \
--ks-key-alias pulse \
--ks-pass env:PULSE_ANDROID_KEYSTORE_PASSWORD \
--key-pass env:PULSE_ANDROID_KEYSTORE_PASSWORD \
"$apk"
"$build_tools/apksigner" verify --verbose --print-certs "$apk"
echo "apk=$apk" >> "$GITHUB_OUTPUT"
- name: Attach APK to release
env:
GH_TOKEN: ${{ github.token }}
APK_PATH: ${{ steps.sign.outputs.apk }}
run: gh release upload "$GITHUB_REF_NAME" "$APK_PATH" --clobber