diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index eac831e90..7bc58d21d 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -1,4 +1,4 @@ -name: Build +name: CI on: workflow_dispatch: @@ -12,37 +12,30 @@ concurrency: cancel-in-progress: true jobs: - test_and_apk: - name: "Local tests and APKs" + checks: runs-on: ubuntu-latest - permissions: contents: write pull-requests: write security-events: write - - timeout-minutes: 60 - + timeout-minutes: 20 steps: - - name: Checkout - uses: actions/checkout@v4 + - 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 21 - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} build-scan-publish: true - build-scan-terms-of-use-url: "https://gradle.com/terms-of-service" - build-scan-terms-of-use-agree: "yes" + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Check build-logic run: ./gradlew :build-logic:convention:check @@ -99,38 +92,29 @@ jobs: disable_globbing: true commit_message: "🤖 Updates graphs" - - name: Run all local screenshot tests (Roborazzi) - id: screenshotsverify - continue-on-error: true - run: ./gradlew verifyRoborazziDemoDebug + - name: Check badging + run: ./gradlew :app:checkProdReleaseBadging - - name: Prevent pushing new screenshots if this is a fork - id: checkfork_screenshots - 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." - echo "Your fork's CI will take screenshots for your fork." - exit 1 + assemble: + runs-on: ubuntu-latest + timeout-minutes: 40 + steps: + - uses: actions/checkout@v4 - # 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 + - uses: actions/setup-java@v5 + with: + distribution: zulu + java-version: 21 - - name: Push new screenshots if available - uses: stefanzweifel/git-auto-commit-action@v5 - if: steps.screenshotsrecord.outcome == 'success' + - uses: gradle/actions/setup-gradle@v4 with: - file_pattern: '*/*.png' - disable_globbing: true - commit_message: "🤖 Updates screenshots" + cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} + build-scan-publish: true + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes - # Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots. - - name: Run local tests - run: ./gradlew testDemoDebug :lint:test + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Build all build type and flavor permutations run: ./gradlew :app:assemble -PminifyWithR8=false @@ -141,19 +125,26 @@ jobs: name: APKs path: '**/build/outputs/apk/**/*.apk' - - name: Upload JVM local results (XML) - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 + lint: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v5 with: - name: local-test-results - path: '**/build/test-results/test*UnitTest/**.xml' + distribution: zulu + java-version: 21 - - name: Upload screenshot results (PNG) - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 + - uses: gradle/actions/setup-gradle@v4 with: - name: screenshot-test-results - path: '**/build/outputs/roborazzi/*_compare.png' + cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} + build-scan-publish: true + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Check lint run: ./gradlew :app:lintProdRelease :app-nia-catalog:lintRelease :lint:lint @@ -186,10 +177,79 @@ jobs: sarif_file: './lint/' category: lint - - name: Check badging - run: ./gradlew :app:checkProdReleaseBadging + unit-tests: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + security-events: write + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v5 + with: + distribution: zulu + java-version: 21 + + - uses: gradle/actions/setup-gradle@v4 + with: + cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} + build-scan-publish: true + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + + - 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_screenshots + 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." + echo "Your fork's CI will take screenshots for your fork." + 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 - androidTest: + - 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 + run: ./gradlew testDemoDebug :lint:test + + - name: Upload JVM local results (XML) + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: local-test-results + path: '**/build/test-results/test*UnitTest/**.xml' + + - name: Upload screenshot results (PNG) + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: screenshot-test-results + path: '**/build/outputs/roborazzi/*_compare.png' + + instrumented-tests: runs-on: ubuntu-latest timeout-minutes: 55 strategy: @@ -208,6 +268,8 @@ jobs: docker-images: false # Takes 16s, enable if needed in the future large-packages: false # includes google-cloud-sdk and it's slow + - uses: actions/checkout@v4 + - 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 @@ -215,25 +277,20 @@ jobs: 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 21 - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} build-scan-publish: true - build-scan-terms-of-use-url: "https://gradle.com/terms-of-service" - build-scan-terms-of-use-agree: "yes" + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Build projects and run instrumentation tests uses: reactivecircus/android-emulator-runner@v2 diff --git a/.github/workflows/NightlyBaselineProfiles.yaml b/.github/workflows/NightlyBaselineProfiles.yaml index 43d4b73fa..08858065e 100644 --- a/.github/workflows/NightlyBaselineProfiles.yaml +++ b/.github/workflows/NightlyBaselineProfiles.yaml @@ -17,8 +17,7 @@ jobs: timeout-minutes: 60 steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - name: Enable KVM group perms run: | @@ -27,22 +26,20 @@ jobs: sudo udevadm trigger --name-match=kvm ls /dev/kvm - - 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 + - uses: actions/setup-java@v5 with: - distribution: 'zulu' - java-version: 17 + distribution: zulu + java-version: 21 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} build-scan-publish: true - build-scan-terms-of-use-url: "https://gradle.com/terms-of-service" - build-scan-terms-of-use-agree: "yes" + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Setup Android SDK uses: android-actions/setup-android@v3 @@ -50,9 +47,6 @@ jobs: - name: Accept licenses run: yes | sdkmanager --licenses || true - - name: Check build-logic - run: ./gradlew :build-logic:convention:check - - name: Setup GMD run: ./gradlew :benchmarks:pixel6Api33Setup --info diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index 4c764a51d..b9e65efa6 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -13,6 +13,8 @@ jobs: timeout-minutes: 120 steps: + - uses: actions/checkout@v4 + - 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 @@ -20,26 +22,20 @@ jobs: 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 + - uses: actions/setup-java@v5 with: - distribution: 'zulu' - java-version: 17 + distribution: zulu + java-version: 21 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} build-scan-publish: true - build-scan-terms-of-use-url: "https://gradle.com/terms-of-service" - build-scan-terms-of-use-agree: "yes" + build-scan-terms-of-use-url: https://gradle.com/terms-of-service + build-scan-terms-of-use-agree: yes + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Setup Android SDK uses: android-actions/setup-android@v3 @@ -60,6 +56,7 @@ jobs: -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true -Pandroid.experimental.androidTest.numManagedDeviceShards=1 -Pandroid.experimental.testOptions.managedDevices.maxConcurrentDevices=1 + - name: Create Release id: create_release uses: actions/create-release@v1