Skip to content

Merge pull request #2 from flarialmc/fix/pr1-download-reliability #22

Merge pull request #2 from flarialmc/fix/pr1-download-reliability

Merge pull request #2 from flarialmc/fix/pr1-download-reliability #22

Workflow file for this run

name: Android
on:
push:
pull_request:
workflow_dispatch:
inputs:
run_instrumented:
description: Run the Android emulator test matrix
required: false
default: false
type: boolean
permissions:
contents: read
jobs:
verify:
if: github.event_name != 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: gradle/actions/setup-gradle@v4
- name: Unit tests, lint, and debug build
run: ./gradlew testDebugUnitTest lintDebug assembleDebug
- name: Upload verification reports
if: always()
uses: actions/upload-artifact@v4
with:
name: verification-reports
path: |
app/build/reports/
app/build/test-results/
release-apk:
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
runs-on: blacksmith-8vcpu-ubuntu-2404
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: gradle/actions/setup-gradle@v4
- name: Require signing secrets
env:
KEYSTORE_BASE64: ${{ secrets.LAUNCHLY_KEYSTORE_BASE64 }}
STORE_PASSWORD: ${{ secrets.LAUNCHLY_STORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.LAUNCHLY_KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.LAUNCHLY_KEY_PASSWORD }}
run: |
test -n "$KEYSTORE_BASE64"
test -n "$STORE_PASSWORD"
test -n "$KEY_ALIAS"
test -n "$KEY_PASSWORD"
- name: Decode production keystore
env:
KEYSTORE_BASE64: ${{ secrets.LAUNCHLY_KEYSTORE_BASE64 }}
run: printf '%s' "$KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/launchly-release.jks"
- name: Build and verify signed release
env:
LAUNCHLY_STORE_FILE: ${{ runner.temp }}/launchly-release.jks
LAUNCHLY_STORE_PASSWORD: ${{ secrets.LAUNCHLY_STORE_PASSWORD }}
LAUNCHLY_KEY_ALIAS: ${{ secrets.LAUNCHLY_KEY_ALIAS }}
LAUNCHLY_KEY_PASSWORD: ${{ secrets.LAUNCHLY_KEY_PASSWORD }}
REQUIRE_RELEASE_SIGNING: 'true'
run: ./gradlew :app:verifyReleaseArtifact
- name: Upload signed release APK
uses: actions/upload-artifact@v4
with:
name: launchly-release-${{ github.sha }}
if-no-files-found: error
path: |
app/build/outputs/apk/release/app-release.apk
app/build/outputs/mapping/release/mapping.txt
dependency-review:
if: github.event_name == 'pull_request'
runs-on: blacksmith-2vcpu-ubuntu-2404
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/dependency-review-action@v4
instrumented:
if: github.event_name == 'workflow_dispatch' && inputs.run_instrumented
runs-on: blacksmith-4vcpu-ubuntu-2404
strategy:
fail-fast: false
matrix:
include:
- api: 28
profile: pixel_2
rotation: 0
- api: 31
profile: pixel_4
rotation: 1
- api: 33
profile: pixel_6
rotation: 0
- api: 35
profile: pixel_c
rotation: 1
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: gradle/actions/setup-gradle@v4
- name: Run API ${{ matrix.api }} instrumentation tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api }}
arch: x86_64
target: google_apis
profile: ${{ matrix.profile }}
script: |
adb shell settings put system accelerometer_rotation 0
adb shell settings put system user_rotation ${{ matrix.rotation }}
./gradlew connectedDebugAndroidTest
publish:
if: startsWith(github.ref, 'refs/tags/v')
needs: [verify, release-apk]
runs-on: blacksmith-2vcpu-ubuntu-2404
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: gradle/actions/setup-gradle@v4
- name: Require signing secrets
env:
KEYSTORE_BASE64: ${{ secrets.LAUNCHLY_KEYSTORE_BASE64 }}
STORE_PASSWORD: ${{ secrets.LAUNCHLY_STORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.LAUNCHLY_KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.LAUNCHLY_KEY_PASSWORD }}
run: |
test -n "$KEYSTORE_BASE64"
test -n "$STORE_PASSWORD"
test -n "$KEY_ALIAS"
test -n "$KEY_PASSWORD"
- name: Decode production keystore
env:
KEYSTORE_BASE64: ${{ secrets.LAUNCHLY_KEYSTORE_BASE64 }}
run: printf '%s' "$KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/launchly-release.jks"
- name: Build and verify signed release
env:
LAUNCHLY_STORE_FILE: ${{ runner.temp }}/launchly-release.jks
LAUNCHLY_STORE_PASSWORD: ${{ secrets.LAUNCHLY_STORE_PASSWORD }}
LAUNCHLY_KEY_ALIAS: ${{ secrets.LAUNCHLY_KEY_ALIAS }}
LAUNCHLY_KEY_PASSWORD: ${{ secrets.LAUNCHLY_KEY_PASSWORD }}
REQUIRE_RELEASE_SIGNING: 'true'
run: ./gradlew clean :app:verifyReleaseArtifact
- name: Prepare release assets
run: |
mkdir -p release-assets
cp app/build/outputs/apk/release/app-release.apk release-assets/launchly-${GITHUB_REF_NAME}.apk
cp app/build/outputs/mapping/release/mapping.txt release-assets/launchly-${GITHUB_REF_NAME}-mapping.txt
cd release-assets
sha256sum * > SHA256SUMS.txt
- name: Publish prerelease
env:
GH_TOKEN: ${{ github.token }}
run: gh release create "$GITHUB_REF_NAME" release-assets/* --prerelease --generate-notes --verify-tag