diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index 39cccae70..408a7bb71 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -104,16 +104,19 @@ jobs: - name: Run local tests if: always() run: ./gradlew testDemoDebug :lint:test - # Replace task exclusions with `-Pandroidx.baselineprofile.skipgeneration` when # https://android-review.googlesource.com/c/platform/frameworks/support/+/2602790 landed in a # release build - - name: Build all build type and flavor permutations including baseline profiles - run: ./gradlew :app:assemble - -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=baselineprofile - -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" - -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true - -Pandroid.experimental.androidTest.numManagedDeviceShards=1 + - name: Build all build type and flavor permutations + run: ./gradlew :app:assemble :benchmarks:assemble + -x pixel6Api33ProdNonMinifiedReleaseAndroidTest + -x pixel6Api33ProdNonMinifiedBenchmarkAndroidTest + -x pixel6Api33DemoNonMinifiedReleaseAndroidTest + -x pixel6Api33DemoNonMinifiedBenchmarkAndroidTest + -x collectDemoNonMinifiedReleaseBaselineProfile + -x collectDemoNonMinifiedBenchmarkBaselineProfile + -x collectProdNonMinifiedReleaseBaselineProfile + -x collectProdNonMinifiedBenchmarkBaselineProfile - name: Upload build outputs (APKs) uses: actions/upload-artifact@v4 diff --git a/.github/workflows/Nightly.yaml b/.github/workflows/Nightly.yaml new file mode 100644 index 000000000..bdcaaa743 --- /dev/null +++ b/.github/workflows/Nightly.yaml @@ -0,0 +1,161 @@ +name: Nightly + +on: + schedule: + - cron: '0 5 * * *' + +concurrency: + group: build-${{ github.ref }} + cancel-in-progress: true + +jobs: + test_and_apk: + name: "Local tests and APKs" + runs-on: ubuntu-latest + + permissions: + contents: write + + timeout-minutes: 60 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 17 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Check build-logic + run: ./gradlew check -p build-logic + + - name: Check spotless + run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache + + - name: Run all local screenshot tests (Roborazzi) + id: screenshotsverify + continue-on-error: true + run: ./gradlew verifyRoborazziDemoDebug + + - name: Prevent pushing new screenshots if this is a fork + id: checkfork + continue-on-error: false + if: steps.screenshotsverify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository + run: | + echo "::error::Screenshot tests failed, please create a PR in your fork first." && exit 1 + + # Runs if previous job failed + - name: Generate new screenshots if verification failed and it's a PR + id: screenshotsrecord + if: steps.screenshotsverify.outcome == 'failure' && github.event_name == 'pull_request' + run: | + ./gradlew recordRoborazziDemoDebug + + - name: Push new screenshots if available + uses: stefanzweifel/git-auto-commit-action@v5 + if: steps.screenshotsrecord.outcome == 'success' + with: + file_pattern: '*/*.png' + disable_globbing: true + commit_message: "🤖 Updates screenshots" + + # Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots. + - name: Run local tests + if: always() + run: ./gradlew testDemoDebug :lint:test + + # Replace task exclusions with `-Pandroidx.baselineprofile.skipgeneration` when + # https://android-review.googlesource.com/c/platform/frameworks/support/+/2602790 landed in a + # release build + - name: Build all build type and flavor permutations including baseline profiles + run: ./gradlew :app:assemble + -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=baselineprofile + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true + + - name: Upload build outputs (APKs) + uses: actions/upload-artifact@v4 + with: + name: APKs + path: '**/build/outputs/apk/**/*.apk' + + - name: Upload test results (XML) + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results + path: '**/build/test-results/test*UnitTest/**.xml' + + - name: Check lint + run: ./gradlew :app:lintProdRelease :app-nia-catalog:lintRelease :lint:lint + + - name: Upload lint reports (HTML) + if: always() + uses: actions/upload-artifact@v4 + with: + name: lint-reports + path: '**/build/reports/lint-results-*.html' + + - name: Check badging + run: ./gradlew :app:checkProdReleaseBadging + + androidTest: + runs-on: ubuntu-latest + timeout-minutes: 55 + strategy: + matrix: + api-level: [26, 30] + + steps: + - name: Enable KVM group perms + 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 + ls /dev/kvm + + - name: Checkout + uses: actions/checkout@v4 + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 17 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Build projects before running emulator + run: ./gradlew packageDemoDebug packageDemoDebugAndroidTest + + - name: Run instrumentation tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + arch: x86_64 + disable-animations: true + disk-size: 6000M + heap-size: 600M + script: ./gradlew connectedDemoDebugAndroidTest --daemon + + - name: Upload test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-reports-${{ matrix.api-level }} + path: '**/build/reports/androidTests'