Nightly build and test #726
This file contains hidden or 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
| 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 |