Skip to content

chore: 📄 prepare repo for OSS launch #16

chore: 📄 prepare repo for OSS launch

chore: 📄 prepare repo for OSS launch #16

Workflow file for this run

name: android-ci
on:
push:
paths:
- "app/**"
- "auth/**"
- "core/**"
- "data/**"
- "reader/**"
- "build.gradle.kts"
- "settings.gradle.kts"
- "gradle.properties"
- "gradle/**"
- "gradlew"
- ".github/workflows/android-ci.yaml"
pull_request:
paths:
- "app/**"
- "auth/**"
- "core/**"
- "data/**"
- "reader/**"
- "build.gradle.kts"
- "settings.gradle.kts"
- "gradle.properties"
- "gradle/**"
- "gradlew"
- ".github/workflows/android-ci.yaml"
# Cancel obsolete runs when new commits land on a PR / branch. Never
# cancel runs on main (we want every commit's tag) or on tag refs.
concurrency:
group: android-ci-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') }}
jobs:
build:
# Skip on tag pushes — the release job below handles them and the
# commit was already built when it landed on main.
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: temurin
java-version: "17"
- uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3
with:
packages: "platform-tools platforms;android-34 build-tools;34.0.0"
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4
- name: Pin build date
run: echo "BUILD_DATE=$(date -u +%Y-%m-%d)" >> "$GITHUB_ENV"
- name: Compute version
run: |
VERSION="${BUILD_DATE//-/.}.${GITHUB_RUN_NUMBER}"
echo "VERSION_NAME=$VERSION" >> "$GITHUB_ENV"
echo "Building version $VERSION"
- name: Assemble debug APK
run: ./gradlew assembleDebug --stacktrace
- name: Unit tests
run: ./gradlew test --stacktrace
- name: Lint
run: ./gradlew lint --stacktrace
- name: Upload debug APK
if: github.ref == 'refs/heads/main'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: app-debug-${{ env.VERSION_NAME }}
path: app/build/outputs/apk/debug/*.apk
if-no-files-found: error
- name: Tag release
if: github.ref == 'refs/heads/main'
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git tag "v${VERSION_NAME}"
git push origin "v${VERSION_NAME}"
# Tag-triggered: builds a signed release APK and attaches it to a
# GitHub Release. Tags come from the build job's "Tag release" step on
# main. We do not depend on `build` because that job is skipped on tag
# pushes (the same commit was already tested when it landed on main).
release:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: temurin
java-version: "17"
- uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3
with:
packages: "platform-tools platforms;android-34 build-tools;34.0.0"
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4
- name: Decode keystore
if: env.KEYSTORE_B64 != ''
run: echo "$KEYSTORE_B64" | base64 -d > "$RUNNER_TEMP/release.keystore"
env:
KEYSTORE_B64: ${{ secrets.QUIRE_RELEASE_KEYSTORE_B64 }}
- name: Assemble release APK
env:
QUIRE_RELEASE_KEYSTORE: ${{ secrets.QUIRE_RELEASE_KEYSTORE_B64 != '' && format('{0}/release.keystore', runner.temp) || '' }}
QUIRE_RELEASE_KEYSTORE_PASSWORD: ${{ secrets.QUIRE_RELEASE_KEYSTORE_PASSWORD }}
QUIRE_RELEASE_KEY_ALIAS: ${{ secrets.QUIRE_RELEASE_KEY_ALIAS }}
QUIRE_RELEASE_KEY_PASSWORD: ${{ secrets.QUIRE_RELEASE_KEY_PASSWORD }}
run: ./gradlew :app:assembleRelease --stacktrace
- name: Create GitHub Release
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
with:
files: app/build/outputs/apk/release/*.apk
generate_release_notes: true