Task: Baseline CI - Add Github workflow to build Baseline profile #228
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
name: CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
workflow_dispatch: | |
# This allows a subsequently queued workflow run to interrupt previous runs | |
concurrency: | |
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' | |
cancel-in-progress: true | |
jobs: | |
checks: | |
name: Checking manifest and deps | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
## Actual task | |
- name: Check merged manifests | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: copyMergedManifests | |
- id: merged_manifests | |
run: echo "changed=$(git status --porcelain | wc -l)" >> $GITHUB_ENV | |
- name: Check if there are changes | |
if: steps.merged_manifests.outputs.changed != 0 | |
run: | | |
echo '::error::Uncommitted changes to the merged manifests!' | |
git diff | |
exit 1 | |
- name: Check compile dependencies report | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: generateRuntimeDependenciesReport | |
- id: compile_dependencies_report | |
run: echo "changed=$(git status --porcelain | wc -l)" >> $GITHUB_ENV | |
- name: Check if there are changes | |
if: steps.compile_dependencies_report.outputs.changed != 0 | |
run: | | |
echo '::error::Uncommitted changes to the compile dependencies report!' | |
exit 1 | |
build-debug: | |
name: Build debug | |
runs-on: ubuntu-latest | |
timeout-minutes: 40 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
## Actual tasks | |
- name: Build | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: false | |
arguments: assembleDebug assembleDebugAndroidTest -PsaveBuildLogToFile=true | |
- name: Archiving violations report | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: violations-build-debug | |
path: ./**/build/logs/buildlog*.txt | |
build-release: | |
name: Build release | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
- name: Decrypt secrets | |
run: ./release/decrypt-secrets.sh | |
env: | |
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }} | |
## Actual task | |
- name: Build | |
uses: gradle/gradle-build-action@v2 | |
env: | |
ORG_GRADLE_PROJECT_RELEASE_KEYSTORE_PWD: ${{ secrets.RELEASE_KEYSTORE_PWD }} | |
with: | |
arguments: :apps:forlago:bundleRelease # analyzeReleaseBundle <- Disable due to https://github.com/spotify/ruler/issues/116 | |
- name: Clean secrets | |
if: always() | |
run: ./release/clean-secrets.sh | |
# Disable due to https://github.com/spotify/ruler/issues/116 | |
# - name: Upload Ruler report | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: ruler | |
# path: apps/forlago/build/reports/ruler | |
detekt: | |
name: Detekt | |
runs-on: ubuntu-latest | |
timeout-minutes: 40 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
## Actual tasks | |
- name: Detekt | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: detektDebug detektTest | |
- name: Archiving violations report | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: violations-detekt | |
path: ./**/reports/detekt/*.xml | |
spotless: | |
name: Spotless | |
runs-on: ubuntu-latest | |
timeout-minutes: 40 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
## Actual tasks | |
- name: Spotless | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: spotlessCheck | |
android-lint: | |
name: Android Lint | |
runs-on: ubuntu-latest | |
timeout-minutes: 40 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
## Actual tasks | |
- name: Lint | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: lint | |
- name: Upload Lint results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: android-lint-html-report | |
path: ./**/build/reports/lint-results-*.html | |
- name: Archiving violations report | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: violations-android-lint | |
path: ./**/reports/lint-results*.xml | |
unit-tests: | |
name: Unit tests | |
runs-on: ubuntu-latest | |
timeout-minutes: 40 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
## Actual tasks | |
- name: Unit tests | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: testDebugUnitTest | |
- name: Archiving violations report | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: violations-unit-tests | |
path: ./**/build/test-results/test*/*.xml | |
espresso-tests: | |
name: Espresso tests | |
# Android emulators require hardware acceleration (HAXM on Mac & Windows, QEMU on Linux) from the host to run fast. | |
# The macOS VM provided by GitHub Actions is the only one that currently supports it. | |
runs-on: macos-latest | |
timeout-minutes: 45 | |
env: | |
JAVA_TOOL_OPTIONS: -Xmx4g | |
TERM: dumb | |
strategy: | |
# Allow tests to continue on other devices if they fail on one device. | |
fail-fast: false | |
matrix: | |
api-level: [26, 30] | |
target: [google_apis] | |
arch: [x86_64] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
- name: AVD cache | |
uses: actions/cache@v2 | |
id: avd-cache | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
~/.android/debug.keystore | |
key: avd-${{ matrix.api-level }}-${{ matrix.arch }}-${{ matrix.target }} | |
- name: Assemble Android tests | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: assembleAndroidTest | |
- name: Run emulator to generate snapshot for caching | |
if: steps.avd-cache.outputs.cache-hit != 'true' | |
uses: reactivecircus/[email protected] | |
with: | |
api-level: ${{ matrix.api-level }} | |
target: ${{ matrix.target }} | |
arch: ${{ matrix.arch }} | |
profile: Galaxy Nexus | |
cores: 2 | |
sdcard-path-or-size: 100M | |
avd-name: api${{ matrix.api-level }}-${{ matrix.arch }}-${{ matrix.target }} | |
force-avd-creation: false | |
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
disable-animations: false | |
channel: stable | |
script: echo "Generated AVD snapshot for caching." | |
## Actual task | |
- name: Run Android tests on API ${{ matrix.api-level }} / ${{ matrix.arch }} / ${{ matrix.target }} | |
uses: reactivecircus/[email protected] | |
with: | |
api-level: ${{ matrix.api-level }} | |
target: ${{ matrix.target }} | |
arch: ${{ matrix.arch }} | |
profile: Galaxy Nexus | |
cores: 2 | |
ram-size: 2048M | |
sdcard-path-or-size: 100M | |
avd-name: api${{ matrix.api-level }}-${{ matrix.arch }}-${{ matrix.target }} | |
force-avd-creation: false | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
disable-animations: true | |
channel: stable | |
script: | | |
echo $GITHUB_REPOSITORY | |
adb devices | |
./gradlew apps:forlago:connectedCheck | |
- name: Make file path compatible with upload-artifact | |
run: find . -path '*/build/*' -name '*:*' -exec bash -c 'mv "$0" "${0//:/_}"' {} \; | |
- name: Upload results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: instrumentation-test-results-${{ matrix.api-level }}-${{ matrix.arch }}-${{ matrix.target }} | |
path: | | |
**/build/reports/* | |
**/build/outputs/*/connected/* | |
publishing-violation: | |
name: Publishing violations to PR | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
runs-on: ubuntu-latest | |
needs: [build-debug, detekt, android-lint, unit-tests] | |
timeout-minutes: 40 | |
env: | |
TERM: dumb | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 17.0.10 | |
- name: Copy CI gradle.properties | |
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | |
- name: Validate gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
## This is needed by secrets-gradle-plugin | |
- name: Create Local Properties File | |
run: touch local.properties | |
- name: Fetching build-debug result | |
uses: actions/download-artifact@v3 | |
with: | |
name: violations-build-debug | |
- name: Fetching detekt result | |
uses: actions/download-artifact@v3 | |
with: | |
name: violations-detekt | |
- name: Fetching android-lint result | |
uses: actions/download-artifact@v3 | |
with: | |
name: violations-android-lint | |
- name: Fetching unit-tests result | |
uses: actions/download-artifact@v3 | |
with: | |
name: violations-unit-tests | |
## Actual tasks | |
- name: Publishing violation comments to PR | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
uses: gradle/gradle-build-action@v2 | |
with: | |
cache-read-only: true | |
arguments: violationCommentsToGitHub -DGITHUB_PULLREQUESTID=${{ github.event.number }} -DGITHUB_OAUTH2TOKEN=${{ secrets.GITHUB_TOKEN }} --info |