Release 1.2.3 (796) #1851
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Expected secrets | |
# EMULATOR_WTF_API_KEY - Optional API key for emulator.wtf | |
# FIREBASE_TEST_LAB_SERVICE_ACCOUNT - Email address of Firebase Test Lab service account | |
# FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER - Workload identity provider to generate temporary service account key | |
# FIREBASE_DEBUG_JSON_BASE64 - Optional JSON to enable Firebase (e.g. Crashlytics) for debug builds | |
# FIREBASE_RELEASE_JSON_BASE64 - Optional JSON to enable Firebase (e.g. Crashlytics) for release builds | |
# Expected variables | |
# FIREBASE_TEST_LAB_PROJECT - Firebase Test Lab project name | |
# SUPPORT_EMAIL_ADDRESS - Contact email address for sending requests from the app | |
name: Pull Request | |
on: | |
pull_request: | |
paths-ignore: | |
- '.github/ISSUE_TEMPLATE/*' | |
- '.github/PULL_REQUEST_TEMPLATE.md' | |
- 'LICENSE' | |
- 'README.md' | |
- 'docs/**' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
validate_gradle_wrapper: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
# Gradle Wrapper validation can be flaky | |
# https://github.com/gradle/wrapper-validation-action/issues/40 | |
- name: Gradle Wrapper Validation | |
timeout-minutes: 1 | |
uses: gradle/wrapper-validation-action@f9c9c575b8b21b6485636a91ffecd10e558c62f6 | |
check_firebase_secrets: | |
runs-on: ubuntu-latest | |
outputs: | |
has-secrets: ${{ steps.check_firebase_secrets.outputs.defined }} | |
steps: | |
- id: check_firebase_secrets | |
env: | |
FIREBASE_TEST_LAB_PROJECT: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
FIREBASE_TEST_LAB_SERVICE_ACCOUNT: ${{ secrets.FIREBASE_TEST_LAB_SERVICE_ACCOUNT }} | |
FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER }} | |
if: "${{ env.FIREBASE_TEST_LAB_PROJECT != '' && env.FIREBASE_TEST_LAB_SERVICE_ACCOUNT != '' && env.FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER != '' }}" | |
run: echo "defined=true" >> $GITHUB_OUTPUT | |
check_emulator_wtf_secrets: | |
runs-on: ubuntu-latest | |
outputs: | |
has-secrets: ${{ steps.check_emulator_wtf_secrets.outputs.defined }} | |
steps: | |
- id: check_emulator_wtf_secrets | |
env: | |
EMULATOR_WTF_API_KEY: ${{ secrets.EMULATOR_WTF_API_KEY }} | |
if: "${{ env.EMULATOR_WTF_API_KEY != '' }}" | |
run: echo "defined=true" >> $GITHUB_OUTPUT | |
check_coinbase_secrets: | |
runs-on: ubuntu-latest | |
outputs: | |
has-secrets: ${{ steps.check_coinbase_secrets.outputs.defined }} | |
steps: | |
- id: check_coinbase_secrets | |
env: | |
COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
if: "${{ env.COINBASE_APP_ID != '' }}" | |
run: echo "defined=true" >> $GITHUB_OUTPUT | |
check_properties: | |
needs: validate_gradle_wrapper | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Check properties | |
timeout-minutes: 4 | |
run: | | |
./gradlew checkProperties | |
static_analysis_detekt: | |
needs: validate_gradle_wrapper | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Detekt | |
timeout-minutes: 10 | |
run: | | |
./gradlew detektAll | |
- name: Collect Artifacts | |
timeout-minutes: 1 | |
if: ${{ always() }} | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export REPORTS_ZIP_PATH=${ARTIFACTS_DIR_PATH}/static_analysis_detekt.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${REPORTS_ZIP_PATH} . -i build/reports/detekt/* | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Detekt static analysis results | |
path: ~/artifacts | |
static_analysis_ktlint: | |
needs: validate_gradle_wrapper | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Ktlint | |
timeout-minutes: 4 | |
run: | | |
./gradlew ktlint | |
- name: Collect Artifacts | |
timeout-minutes: 1 | |
if: ${{ always() }} | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export REPORTS_ZIP_PATH=${ARTIFACTS_DIR_PATH}/static_analysis_ktlint.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${REPORTS_ZIP_PATH} . -i build/reports/ktlint/\* | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Ktlint static analysis results | |
path: ~/artifacts | |
static_analysis_android_lint: | |
needs: validate_gradle_wrapper | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Android Lint | |
timeout-minutes: 15 | |
env: | |
# Disable minify, since it makes lint run faster | |
ORG_GRADLE_PROJECT_IS_MINIFY_ENABLED: false | |
run: | | |
./gradlew :app:lintZcashmainnetRelease | |
- name: Collect Artifacts | |
if: ${{ always() }} | |
timeout-minutes: 1 | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export LINT_ZIP_PATH=${ARTIFACTS_DIR_PATH}/android_lint.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${LINT_ZIP_PATH} . -i \*build/reports/\* | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Android Lint static analysis results | |
path: ~/artifacts | |
test_kotlin_modules: | |
needs: validate_gradle_wrapper | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Test | |
timeout-minutes: 10 | |
run: | | |
# Note that we explicitly check just the Kotlin modules, to avoid compiling the Android modules here | |
./gradlew :configuration-api-lib:check :crash-lib:check :preference-api-lib:check :spackle-lib:check | |
- name: Collect Artifacts | |
if: ${{ always() }} | |
timeout-minutes: 1 | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export RESULTS_ZIP_PATH=${ARTIFACTS_DIR_PATH}/test_kotlin.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${RESULTS_ZIP_PATH} . -i \*build/reports/\* \*/build/kover/html/\* \*/build/kover/xml/report.xml | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Test Kotlin modules results | |
path: ~/artifacts | |
# Emulator.wtf is preferred if it has an API key. | |
test_android_modules_ftl: | |
if: needs.check_firebase_secrets.outputs.has-secrets == 'true' && needs.check_emulator_wtf_secrets.outputs.has-secrets == 'false' && needs.check_coinbase_secrets.outputs.has-secrets == 'true' | |
needs: [validate_gradle_wrapper, check_firebase_secrets, check_emulator_wtf_secrets, check_coinbase_secrets] | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
id-token: write | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Build | |
timeout-minutes: 20 | |
run: | | |
./gradlew assembleDebug assembleAndroidTest assembleZcashmainnetDebug assembleZcashtestnetDebug | |
- name: Authenticate to Google Cloud for Firebase Test Lab | |
id: auth_test_lab | |
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f | |
with: | |
create_credentials_file: true | |
project_id: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
service_account: ${{ secrets.FIREBASE_TEST_LAB_SERVICE_ACCOUNT }} | |
workload_identity_provider: ${{ secrets.FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER }} | |
access_token_lifetime: '1200s' | |
- name: Test | |
timeout-minutes: 30 | |
env: | |
ORG_GRADLE_PROJECT_ZCASH_SUPPORT_EMAIL_ADDRESS: ${{ vars.SUPPORT_EMAIL_ADDRESS }} | |
# Force blank suffix for screenshot tests | |
ORG_GRADLE_PROJECT_ZCASH_DEBUG_APP_NAME_SUFFIX: "" | |
# Used by Flank, since the temporary token is missing the project name | |
GOOGLE_CLOUD_PROJECT: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
ORG_GRADLE_PROJECT_ZCASH_FIREBASE_TEST_LAB_API_KEY_PATH: ${{ steps.auth_test_lab.outputs.credentials_file_path }} | |
# Because Fulladle doesn't allow Test Orchestrator to be enabled/disabled for a specific submodule, it must be enabled for all modules | |
ORG_GRADLE_PROJECT_IS_USE_TEST_ORCHESTRATOR: true | |
ORG_GRADLE_PROJECT_ZCASH_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
ORG_GRADLE_PROJECT_ZCASH_FLEXA_KEY: ${{ secrets.FLEXA_PUBLISHABLE_KEY }} | |
run: | | |
./gradlew runFlank | |
- name: Collect Artifacts | |
if: ${{ always() }} | |
timeout-minutes: 1 | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export TEST_RESULTS_ZIP_PATH=${ARTIFACTS_DIR_PATH}/test_results.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${TEST_RESULTS_ZIP_PATH} . -i build/fladle/\* \*/build/outputs/androidTest-results/\* | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Test Android modules with FTL results | |
path: ~/artifacts | |
test_android_modules_wtf_coverage: | |
if: needs.check_emulator_wtf_secrets.outputs.has-secrets == 'true' && needs.check_coinbase_secrets.outputs.has-secrets == 'true' | |
needs: [ validate_gradle_wrapper, check_emulator_wtf_secrets, check_coinbase_secrets ] | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Build and test | |
timeout-minutes: 30 | |
env: | |
ORG_GRADLE_PROJECT_ZCASH_SUPPORT_EMAIL_ADDRESS: ${{ vars.SUPPORT_EMAIL_ADDRESS }} | |
# Force blank suffix for screenshot tests | |
ORG_GRADLE_PROJECT_ZCASH_DEBUG_APP_NAME_SUFFIX: "" | |
ORG_GRADLE_PROJECT_ZCASH_EMULATOR_WTF_API_KEY: ${{ secrets.EMULATOR_WTF_API_KEY }} | |
ORG_GRADLE_PROJECT_IS_ANDROID_INSTRUMENTATION_TEST_COVERAGE_ENABLED: true | |
ORG_GRADLE_PROJECT_ZCASH_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
ORG_GRADLE_PROJECT_ZCASH_FLEXA_KEY: ${{ secrets.FLEXA_PUBLISHABLE_KEY }} | |
run: | | |
./gradlew testDebugWithEmulatorWtf :ui-integration-test:testZcashmainnetDebugWithEmulatorWtf | |
- name: Collect Artifacts | |
if: ${{ always() }} | |
timeout-minutes: 1 | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export TEST_RESULTS_ZIP_PATH=${ARTIFACTS_DIR_PATH}/test_results.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${TEST_RESULTS_ZIP_PATH} . -i \*/build/test-results/\* | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Test Android libs with WTF results | |
path: ~/artifacts | |
test_android_modules_wtf_no_coverage: | |
if: needs.check_emulator_wtf_secrets.outputs.has-secrets == 'true' && needs.check_coinbase_secrets.outputs.has-secrets == 'true' | |
needs: [ validate_gradle_wrapper, check_emulator_wtf_secrets, check_coinbase_secrets ] | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Build and test | |
timeout-minutes: 30 | |
env: | |
ORG_GRADLE_PROJECT_ZCASH_SUPPORT_EMAIL_ADDRESS: ${{ vars.SUPPORT_EMAIL_ADDRESS }} | |
# Force blank suffix for screenshot tests | |
ORG_GRADLE_PROJECT_ZCASH_DEBUG_APP_NAME_SUFFIX: "" | |
ORG_GRADLE_PROJECT_ZCASH_EMULATOR_WTF_API_KEY: ${{ secrets.EMULATOR_WTF_API_KEY }} | |
ORG_GRADLE_PROJECT_IS_ANDROID_INSTRUMENTATION_TEST_COVERAGE_ENABLED: false | |
ORG_GRADLE_PROJECT_ZCASH_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
ORG_GRADLE_PROJECT_ZCASH_FLEXA_KEY: ${{ secrets.FLEXA_PUBLISHABLE_KEY }} | |
run: | | |
./gradlew :app:testZcashmainnetDebugWithEmulatorWtf :ui-screenshot-test:testZcashmainnetDebugWithEmulatorWtf | |
- name: Collect Artifacts | |
if: ${{ always() }} | |
timeout-minutes: 1 | |
run: | | |
export ARTIFACTS_DIR_PATH=~/artifacts | |
export TEST_RESULTS_ZIP_PATH=${ARTIFACTS_DIR_PATH}/test_results.zip | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${TEST_RESULTS_ZIP_PATH} . -i \*/build/test-results/\* | |
- name: Upload Artifacts | |
if: ${{ always() }} | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 1 | |
with: | |
name: Test Android app with WTF results | |
path: ~/artifacts | |
# Performs a button mash test on the debug build of the app with strict mode enabled | |
test_robo_debug: | |
if: needs.check_firebase_secrets.outputs.has-secrets == 'true' && needs.check_coinbase_secrets.outputs.has-secrets == 'true' | |
needs: [check_firebase_secrets, check_coinbase_secrets] | |
runs-on: ubuntu-latest | |
permissions: | |
packages: read | |
contents: read | |
id-token: write | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Export Google Services JSON | |
env: | |
FIREBASE_DEBUG_JSON_BASE64: ${{ secrets.FIREBASE_DEBUG_JSON_BASE64 }} | |
FIREBASE_RELEASE_JSON_BASE64: ${{ secrets.FIREBASE_RELEASE_JSON_BASE64 }} | |
if: "${{ env.FIREBASE_DEBUG_JSON_BASE64 != '' && env.FIREBASE_RELEASE_JSON_BASE64 != '' }}" | |
shell: bash | |
run: | | |
mkdir -p app/src/debug/ | |
mkdir -p app/src/release/ | |
echo ${FIREBASE_DEBUG_JSON_BASE64} | base64 --decode > app/src/debug/google-services.json | |
echo ${FIREBASE_RELEASE_JSON_BASE64} | base64 --decode > app/src/release/google-services.json | |
- name: Build | |
timeout-minutes: 20 | |
env: | |
ORG_GRADLE_PROJECT_ZCASH_SUPPORT_EMAIL_ADDRESS: ${{ vars.SUPPORT_EMAIL_ADDRESS }} | |
ORG_GRADLE_PROJECT_IS_CRASH_ON_STRICT_MODE_VIOLATION: true | |
ORG_GRADLE_PROJECT_ZCASH_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
ORG_GRADLE_PROJECT_ZCASH_FLEXA_KEY: ${{ secrets.FLEXA_PUBLISHABLE_KEY }} | |
run: | | |
./gradlew :app:assembleDebug | |
- name: Authenticate to Google Cloud for Firebase Test Lab | |
id: auth_test_lab | |
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f | |
with: | |
create_credentials_file: true | |
project_id: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
service_account: ${{ secrets.FIREBASE_TEST_LAB_SERVICE_ACCOUNT }} | |
workload_identity_provider: ${{ secrets.FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER }} | |
access_token_lifetime: '900s' | |
- name: Robo test | |
timeout-minutes: 20 | |
env: | |
# This first environment variable is used by Flank, since the temporary token is missing the project name | |
GOOGLE_CLOUD_PROJECT: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
ORG_GRADLE_PROJECT_ZCASH_FIREBASE_TEST_LAB_API_KEY_PATH: ${{ steps.auth_test_lab.outputs.credentials_file_path }} | |
ORG_GRADLE_PROJECT_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
run: | | |
./gradlew :app:runFlankSanityConfigDebug | |
build: | |
if: needs.check_coinbase_secrets.outputs.has-secrets == 'true' | |
needs: [validate_gradle_wrapper, check_coinbase_secrets] | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Export Google Services JSON | |
env: | |
FIREBASE_DEBUG_JSON_BASE64: ${{ secrets.FIREBASE_DEBUG_JSON_BASE64 }} | |
FIREBASE_RELEASE_JSON_BASE64: ${{ secrets.FIREBASE_RELEASE_JSON_BASE64 }} | |
if: "${{ env.FIREBASE_DEBUG_JSON_BASE64 != '' && env.FIREBASE_RELEASE_JSON_BASE64 != '' }}" | |
shell: bash | |
run: | | |
mkdir -p app/src/debug/ | |
mkdir -p app/src/release/ | |
echo ${FIREBASE_DEBUG_JSON_BASE64} | base64 --decode > app/src/debug/google-services.json | |
echo ${FIREBASE_RELEASE_JSON_BASE64} | base64 --decode > app/src/release/google-services.json | |
- name: Set Env | |
shell: bash | |
run: | | |
echo "home=${HOME}" >> "$GITHUB_ENV" | |
# A fake signing key to satisfy creating a "release" build | |
- name: Export Signing Key | |
env: | |
SIGNING_KEY_PATH: ${{ format('{0}/release.jks', env.home) }} | |
shell: bash | |
run: | | |
keytool -genkey -v -keystore $SIGNING_KEY_PATH -keypass android -storepass android -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 100000 -dname "CN=, OU=, O=Test, L=, S=, C=" -noprompt | |
- name: Build | |
timeout-minutes: 25 | |
env: | |
ORG_GRADLE_PROJECT_ZCASH_SUPPORT_EMAIL_ADDRESS: ${{ vars.SUPPORT_EMAIL_ADDRESS }} | |
ORG_GRADLE_PROJECT_ZCASH_RELEASE_KEYSTORE_PATH: ${{ format('{0}/release.jks', env.home) }} | |
ORG_GRADLE_PROJECT_ZCASH_RELEASE_KEYSTORE_PASSWORD: android | |
ORG_GRADLE_PROJECT_ZCASH_RELEASE_KEY_ALIAS: androiddebugkey | |
ORG_GRADLE_PROJECT_ZCASH_RELEASE_KEY_ALIAS_PASSWORD: android | |
ORG_GRADLE_PROJECT_ZCASH_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
ORG_GRADLE_PROJECT_ZCASH_FLEXA_KEY: ${{ secrets.FLEXA_PUBLISHABLE_KEY }} | |
run: | | |
./gradlew :app:assembleDebug :app:bundleRelease :app:packageZcashmainnetReleaseUniversalApk | |
- name: Collect Artifacts | |
timeout-minutes: 1 | |
env: | |
ARTIFACTS_DIR_PATH: ${{ format('{0}/artifacts', env.home) }} | |
BINARIES_ZIP_PATH: ${{ format('{0}/artifacts/binaries.zip', env.home) }} | |
MAPPINGS_ZIP_PATH: ${{ format('{0}/artifacts/mappings.zip', env.home) }} | |
COMPOSE_METRICS_ZIP_PATH: ${{ format('{0}/artifacts/compose_metrics.zip', env.home) }} | |
run: | | |
mkdir ${ARTIFACTS_DIR_PATH} | |
zip -r ${BINARIES_ZIP_PATH} . -i app/build/outputs/apk/\*/\*.apk app/build/outputs/apk_from_bundle/\*/\*.apk app/build/outputs/bundle/\*/\*.aab | |
zip -r ${MAPPINGS_ZIP_PATH} . -i *app/build/outputs/mapping/*/mapping.txt | |
zip -r ${COMPOSE_METRICS_ZIP_PATH} . -i \*/build/compose-metrics/\* \*/build/compose-reports/\* | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 | |
timeout-minutes: 2 | |
with: | |
name: Binaries | |
path: ~/artifacts | |
# Performs a button mash test on the release build of the app | |
test_robo_release: | |
if: needs.check_firebase_secrets.outputs.has-secrets == 'true' && needs.check_coinbase_secrets.outputs.has-secrets == 'true' | |
needs: [build, check_firebase_secrets, check_coinbase_secrets] | |
runs-on: ubuntu-latest | |
permissions: | |
packages: read | |
contents: read | |
id-token: write | |
steps: | |
- name: Checkout | |
timeout-minutes: 1 | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- name: Set up Java | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b | |
timeout-minutes: 1 | |
with: | |
distribution: 'temurin' | |
java-version: 17 | |
- name: Set up Gradle | |
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 | |
timeout-minutes: 5 | |
- name: Authenticate to Google Cloud for Firebase Test Lab | |
id: auth_test_lab | |
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f | |
with: | |
create_credentials_file: true | |
project_id: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
service_account: ${{ secrets.FIREBASE_TEST_LAB_SERVICE_ACCOUNT }} | |
workload_identity_provider: ${{ secrets.FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER }} | |
access_token_lifetime: '900s' | |
- name: Download a single artifact | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 | |
with: | |
name: Binaries | |
- name: Robo test | |
timeout-minutes: 25 | |
env: | |
# Path depends on `release_build` job, plus path of `Download a single artifact` step | |
BINARIES_ZIP_PATH: binaries.zip | |
# This first environment variable is used by Flank, since the temporary token is missing the project name | |
GOOGLE_CLOUD_PROJECT: ${{ vars.FIREBASE_TEST_LAB_PROJECT }} | |
ORG_GRADLE_PROJECT_ZCASH_FIREBASE_TEST_LAB_API_KEY_PATH: ${{ steps.auth_test_lab.outputs.credentials_file_path }} | |
ORG_GRADLE_PROJECT_ZCASH_COINBASE_APP_ID: ${{ secrets.COINBASE_APP_ID }} | |
ORG_GRADLE_PROJECT_ZCASH_FLEXA_KEY: ${{ secrets.FLEXA_PUBLISHABLE_KEY }} | |
run: | | |
unzip ${BINARIES_ZIP_PATH} | |
./gradlew :app:runFlankSanityConfigRelease |