Skip to content

Nightly build and test #729

Nightly build and test

Nightly build and test #729

Workflow file for this run

name: Nightly build and test
env:
# The name of the main module repository
main_project_module: app
# The name in the Play Store
playstore_name: Soundscape
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Schedule the build for 05.30 UTC
schedule:
- cron: '30 5 * * *'
jobs:
build:
name: Build package (${{ matrix.ref }})
runs-on: ubuntu-latest
environment: development
permissions:
contents: write
strategy:
fail-fast: false
matrix:
ref: [main, v1.0, multiplatform]
steps:
- uses: actions/checkout@v6
with:
ref: ${{ matrix.ref }}
fetch-depth: 0
- name: Setup offline maps for tests
run: |
pwd
wget --no-verbose --show-progress --progress=dot:giga https://pub-0a3501283b024ab3bbfbb6d1e217f5d0.r2.dev/street-metadata/bristol-gb.pmtiles -O ${{ env.main_project_module }}/src/test/res/org/scottishtecharmy/soundscape/bristol-gb.pmtiles
wget --no-verbose --show-progress --progress=dot:giga https://pub-0a3501283b024ab3bbfbb6d1e217f5d0.r2.dev/street-metadata/glasgow-gb.pmtiles -O ${{ env.main_project_module }}/src/test/res/org/scottishtecharmy/soundscape/glasgow-gb.pmtiles
wget --no-verbose --show-progress --progress=dot:giga https://pub-0a3501283b024ab3bbfbb6d1e217f5d0.r2.dev/street-metadata/liverpool-gb.pmtiles -O ${{ env.main_project_module }}/src/test/res/org/scottishtecharmy/soundscape/liverpool-gb.pmtiles
wget --no-verbose --show-progress --progress=dot:giga https://pub-0a3501283b024ab3bbfbb6d1e217f5d0.r2.dev/manifest.geojson.gz -O ${{ env.main_project_module }}/src/test/res/org/scottishtecharmy/soundscape/manifest.geojson.gz
- name: Setup tile and search providers
env:
TILE_PROVIDER_API_KEY: ${{ secrets.TILE_PROVIDER_API_KEY }}
TILE_PROVIDER_URL: ${{ secrets.TILE_PROVIDER_URL }}
SEARCH_PROVIDER_API_KEY: ${{ secrets.SEARCH_PROVIDER_API_KEY }}
SEARCH_PROVIDER_URL: ${{ secrets.SEARCH_PROVIDER_URL }}
EXTRACT_PROVIDER_URL: ${{ secrets.EXTRACT_PROVIDER_URL }}
run: |
echo tileProviderUrl="$TILE_PROVIDER_URL" > local.properties
echo tileProviderApiKey="$TILE_PROVIDER_API_KEY" >> local.properties
echo searchProviderUrl="$SEARCH_PROVIDER_URL" >> local.properties
echo searchProviderApiKey="$SEARCH_PROVIDER_API_KEY" >> local.properties
echo extractProviderUrl="$EXTRACT_PROVIDER_URL" >> local.properties
- name: Decode Google services
env:
ENCODED_STRING: ${{ secrets.GOOGLE_SERVICES }}
GOOGLE_SERVICES_PATH: ${{ secrets.GOOGLE_SERVICES_PATH }}
run: |
echo $ENCODED_STRING > google-services-b64.txt
base64 -d google-services-b64.txt > ${{ env.main_project_module }}/$GOOGLE_SERVICES_PATH
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Set Up JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu' # See 'Supported distributions' for available options
java-version: '19'
- name: Run lint over the repo
run: ./gradlew lint
# Run Tests Build
- name: Run gradle tests
run: ./gradlew test
# Setup release build keys
- name: Decode Keystore
env:
ENCODED_STRING: ${{ secrets.SIGNING_KEY_STORE_BASE64 }}
SIGNING_KEY_STORE_PATH: ${{ secrets.SIGNING_KEY_STORE_PATH }}
run: |
echo $ENCODED_STRING > keystore-b64.txt
base64 -d keystore-b64.txt > ${{ env.main_project_module }}/$SIGNING_KEY_STORE_PATH
# Create APK Release
- name: Build apk project (APK)
env:
SIGNING_KEY_STORE_PATH: ${{ secrets.SIGNING_KEY_STORE_PATH }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
run: |
./gradlew assemble
# Upload Artifact Build
# Noted For Output [main_project_module]/build/outputs/apk/release/
- name: Upload APK Release
uses: actions/upload-artifact@v6
with:
name: release-apk-${{ matrix.ref }}
path: ${{ env.main_project_module }}/build/outputs/apk/releaseTest/
# Generate android instrumentation tests APK
# - name: Assemble Android Instrumentation Tests
# env:
# SIGNING_KEY_STORE_PATH: ${{ secrets.SIGNING_KEY_STORE_PATH }}
# SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
# SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
# SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
# run: ./gradlew assembleAndroidTest -DtestBuildType=debug
# - name: Upload Android Test APK
# uses: actions/upload-artifact@v6
# with:
# name: release-androidTest
# path: ${{ env.main_project_module }}/build/outputs/apk/androidTest/debug/app-release-androidTest.apk
# instrumentation-tests:
# name: Run matrix of instrumentation tests
# needs: build
# environment: development
# runs-on: ubuntu-latest
# strategy:
# matrix:
# api-level: [30, 31, 34]
# fail-fast: false
# steps:
# - uses: actions/checkout@v6
# with:
# fetch-depth: 0
#
# - name: Setup tile provider
# env:
# TILE_PROVIDER_API_KEY: ${{ secrets.TILE_PROVIDER_API_KEY }}
# TILE_PROVIDER_URL: ${{ secrets.TILE_PROVIDER_URL }}
# run: |
# echo tileProviderUrl=$TILE_PROVIDER_URL > local.properties
# echo tileProviderApiKey=$TILE_PROVIDER_API_KEY >> local.properties
#
# - name: Decode Google services
# env:
# ENCODED_STRING: ${{ secrets.GOOGLE_SERVICES }}
# GOOGLE_SERVICES_PATH: ${{ secrets.GOOGLE_SERVICES_PATH }}
#
# run: |
# echo $ENCODED_STRING > google-services-b64.txt
# base64 -d google-services-b64.txt > ${{ env.main_project_module }}/$GOOGLE_SERVICES_PATH
#
# - name: Setup Gradle
# uses: gradle/actions/setup-gradle@v5
#
# - name: Set Up JDK
# uses: actions/setup-java@v5
# with:
# distribution: 'zulu' # See 'Supported distributions' for available options
# java-version: '19'
#
# - name: Enable KVM
# run: |
# echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
# sudo udevadm control --reload-rules
# sudo udevadm trigger --name-match=kvm
#
# - name: Instrumentation Tests
# id: instrumentation-tests
# uses: reactivecircus/android-emulator-runner@v2
# with:
# api-level: ${{ matrix.api-level }}
# target: default
# arch: x86_64
# script: |
# adb logcat -c # clear logs
# touch app/emulator.log # create log file
# chmod 777 app/emulator.log # allow writing to log file
# adb logcat >> app/emulator.log & # pipe all logcat messages into log file as a background process
# ./gradlew connectedCheck
firebase:
name: Run UI tests with Firebase Test Lab (${{ matrix.ref }})
needs: build
environment: development
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ref: [main, v1.0, multiplatform]
steps:
- name: Download app APK
uses: actions/download-artifact@v8
with:
name: release-apk-${{ matrix.ref }}
# - name: Download Android test APK
# uses: actions/download-artifact@v8
# with:
# name: release-androidTest
- name: Auth
uses: google-github-actions/auth@v3
with:
credentials_json: ${{ secrets.GCLOUD_CREDENTIALS_JSON }}
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v3
- name: Set current project
run: gcloud config set project ${{ secrets.FIREBASE_PROJECT_ID }}
# These tests now need the pmtiles file, skip for now as we already test locally
# - name: Run Instrumentation Tests in Firebase Test Lab
# run: gcloud firebase test android run --type instrumentation --use-orchestrator --app app-release.apk --test app-release-androidTest.apk --device model=shiba,version=34,locale=en,orientation=portrait
- name: Run Robo test in Firebase Test Lab
run: gcloud firebase test android run --type robo --app=app-releaseTest.apk --timeout=1800s --device model=shiba,version=34,locale=en,orientation=portrait