Skip to content

Update Android Gradle Plugin (patch) (#750) #96

Update Android Gradle Plugin (patch) (#750)

Update Android Gradle Plugin (patch) (#750) #96

Workflow file for this run

name: CI # Check Gradle and AGP combinations
on:
push:
branches-ignore:
- renovate/configure
concurrency:
# Documentation suggests ${{ github.head_ref }}, but that's only available on pull_request/pull_request_target triggers, so using ${{ github.ref }}.
# On main, we want all builds to complete even if merging happens faster to make it easier to discover at which point something broke.
# More info: https://stackoverflow.com/a/68422069/253468:
group: ${{ github.ref == 'refs/heads/main' && format('ci-main-{0}', github.sha) || format('ci-{0}', github.ref) }}
cancel-in-progress: true
jobs:
validate:
name: "0 🦺 Validation"
uses: TWiStErRob/github-workflows/.github/workflows/validate.yml@1e06403c5d561d70e40109c2701ea3092ca6ded7 # v3
permissions:
contents: read
security-events: write
actions: read
graph:
name: "1 🔨 Graph"
needs: validate
timeout-minutes: 10
permissions:
# actions/checkout
contents: read
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
steps:
- name: "Set up JDK 17."
uses: actions/setup-java@v4
with:
java-version: 17
distribution: zulu
- name: "Set up Android SDK."
uses: android-actions/setup-android@v3
with:
log-accepted-android-sdk-licenses: false
- name: "Checkout ${{ github.ref }} branch in ${{ github.repository }} repository."
uses: actions/checkout@v4
- name: "Build the Graph plugin."
working-directory: graph
run: >
./gradlew
build
detekt
detektMain
detektTest
- name: "Integration test for the Graph plugin."
working-directory: graph/sample
run: >
../gradlew
-p .
--continue
--no-daemon
-x lint
:app:testR
:a:aR
--exclude-task compileRShaders
-Pfast
build:
name: "1 🔨 Build"
needs: validate
timeout-minutes: 30
permissions:
# actions/checkout
contents: read
# github/codeql-action/upload-sarif
security-events: write
# andymckay/cancel-action
actions: write
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
steps:
- name: "Set up JDK 17."
uses: actions/setup-java@v4
with:
java-version: 17
distribution: zulu
- name: "Set up Android SDK."
uses: android-actions/setup-android@v3
with:
log-accepted-android-sdk-licenses: false
- name: "Checkout ${{ github.ref }} branch in ${{ github.repository }} repository."
uses: actions/checkout@v4
# Check publicly available release version first, this should be independent of repository state.
- name: "Verify docs/examples/release."
working-directory: docs/examples/release
if: ${{ success() || failure() }}
run: ./gradlew --no-daemon --no-build-cache --stacktrace assemble check
- name: "Build Gradle plugins."
run: >
./gradlew
--no-daemon
--no-build-cache
--no-configuration-cache
--no-watch-fs
--stacktrace
--continue
jar
validatePlugins
detektMain
detektTest
detektTestFixtures
detektReportMergeSarif
detektReportMergeXml
-Pnet.twisterrob.gradle.build.detektReportMergeIncludedBuilds=true
- name: "Upload 'Detekt Results' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: 'Detekt Results'
if-no-files-found: error
path: |
**/build/reports/detekt/
build/reports/detekt/merge.*
- name: "Publish 'Code scanning results / detekt' GitHub Code Scanning analysis."
uses: github/codeql-action/upload-sarif@v3
if: ${{ success() || failure() }}
with:
sarif_file: ${{ github.workspace }}/build/reports/detekt/merge.sarif
- name: "Cancel other jobs on Build failure, no need to check / test it."
if: ${{ failure() }}
uses: andymckay/cancel-action@0.4
- name: "Publish Gradle plugins to mavenLocal()."
# TODEL --no-configuration-cache, because https://github.com/Kotlin/dokka/issues/2231
run: ./gradlew --no-daemon --no-build-cache --no-configuration-cache --stacktrace publishToMavenLocal
- name: "Upload 'Gradle Plugin Validation Report' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: 'Gradle Plugin Validation Report'
if-no-files-found: error
path: |
**/build/reports/plugin-development/validation-report.json
- name: "Upload JARs, Maven and Gradle metadata as 'Intermediate Artifacts' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: 'Intermediate Artifacts'
if-no-files-found: error
path: |
**/build/libs/*.jar
**/build/publications/release/module.json
**/build/publications/release/pom-default.xml
- name: "Upload 'mavenLocal()' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: 'mavenLocal'
if-no-files-found: error
path: |
~/.m2/repository/**
- name: "Parse env.PROJECT_VERSION."
run: echo "PROJECT_VERSION=$(grep --color=never --perl-regexp --only-matching '(?<=^projectVersion=)(.*)$' gradle.properties)" | tee --append "${GITHUB_ENV}"
- name: "Calculate env.SNAPSHOT_VERSION for branches."
# ${{ github.event.pull_request.number }} is not available for push.
if: ${{ endsWith(env.PROJECT_VERSION, '-SNAPSHOT') && github.ref != 'refs/heads/main' }}
run: echo "SNAPSHOT_VERSION=$(echo "${PROJECT_VERSION}" | sed -re "s/^(.*)(-SNAPSHOT)$/\1.$(echo "${GITHUB_REF_NAME}" | tr / -)\2/")" | tee --append "${GITHUB_ENV}"
- name: "Calculate env.SNAPSHOT_VERSION for main."
if: ${{ endsWith(env.PROJECT_VERSION, '-SNAPSHOT') && github.ref == 'refs/heads/main' }}
run: echo "SNAPSHOT_VERSION=$(echo $PROJECT_VERSION)" | tee --append "${GITHUB_ENV}"
- name: "Verify docs/examples/local for release."
working-directory: docs/examples/local
if: ${{ env.SNAPSHOT_VERSION == '' }}
run: |
sed -i.bak -re "s/version \"${PROJECT_VERSION}-SNAPSHOT\"/version \"${PROJECT_VERSION}\"/g" build.gradle.kts
sed -i.bak -re "s/version \"${PROJECT_VERSION}-SNAPSHOT\"/version \"${PROJECT_VERSION}\"/g" settings.gradle.kts
./gradlew --no-daemon --no-build-cache --stacktrace assemble check
- name: "Verify docs/examples/local for snapshot."
working-directory: docs/examples/local
if: ${{ env.SNAPSHOT_VERSION != '' }}
run: ./gradlew --no-daemon --no-build-cache --stacktrace assemble check
- name: "Publish Gradle plugins to Sonatype Snapshot with version ${{ env.SNAPSHOT_VERSION }}."
if: ${{ env.SNAPSHOT_VERSION != '' }}
env:
# Implicit: -PsonatypeUsername=...
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
# Implicit: -PsonatypePassword=...
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
# TODEL --no-configuration-cache, because https://github.com/Kotlin/dokka/issues/2231
run: >
./gradlew
--no-daemon
--no-build-cache
--no-configuration-cache
--no-watch-fs
--stacktrace
publishLibraryPublicationToSonatypeRepository
publishPluginMavenPublicationToSonatypeRepository
publishAllPluginMarkerMavenPublicationsToSonatypeRepository
-PprojectVersion="${SNAPSHOT_VERSION}"
- name: "Verify docs/examples/snapshot with version ${{ env.SNAPSHOT_VERSION }}."
working-directory: docs/examples/snapshot
if: ${{ env.SNAPSHOT_VERSION != '' }}
run: |
sed -i.bak -re "s/version \"${PROJECT_VERSION}\"/version \"${SNAPSHOT_VERSION}\"/g" build.gradle.kts
sed -i.bak -re "s/version \"${PROJECT_VERSION}\"/version \"${SNAPSHOT_VERSION}\"/g" settings.gradle.kts
./gradlew --no-daemon --no-build-cache --stacktrace assemble check
check:
name: "2 🛠️ ${{ matrix.name }}"
needs: validate
timeout-minutes: 45
permissions:
# actions/checkout
contents: read
# github/codeql-action/upload-sarif
security-events: write
env:
JOB_NAME: '${{ matrix.name }} (${{ matrix.agp }} on ${{ matrix.gradle }})'
# Capture which Gradle version is running the build to use in some steps.
# Value will be written in a later step using `>> "${GITHUB_ENV}"`.
GRADLE_VERSION: '0.0.0'
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
steps:
- name: "Trigger details."
env:
COMPARE_URL: ${{ github.event.compare }}
run: echo "Running in response to a ${GITHUB_EVENT_NAME} event, building ${COMPARE_URL} changes."
- name: "Set up JDK 17."
uses: actions/setup-java@v4
with:
java-version: 17
distribution: zulu
- name: "Set up Android SDK."
uses: android-actions/setup-android@v3
with:
log-accepted-android-sdk-licenses: false
- name: "Install Android SDK components."
env:
CURRENT_BUILD_TOOLS_VERSION: ${{ matrix.build-tools }}
run: |
# AGP's com.android.SdkConstants.CURRENT_BUILD_TOOLS_VERSION
echo sdkmanager --install "build-tools;${CURRENT_BUILD_TOOLS_VERSION}"
sdkmanager --install "build-tools;${CURRENT_BUILD_TOOLS_VERSION}"
# compileSdk for almost all tests.
echo sdkmanager --install "platforms;android-34"
sdkmanager --install "platforms;android-34"
- name: "Set up JDK(s)."
env:
JAVA_VERSION: ${{ matrix.gradle-java }}
run: |
case ${JAVA_VERSION} in
8)
echo "JAVA_HOME=$JAVA_HOME_8_X64" | tee --append "${GITHUB_ENV}"
;;
11)
echo "JAVA_HOME=$JAVA_HOME_11_X64" | tee --append "${GITHUB_ENV}"
;;
17)
echo "JAVA_HOME=$JAVA_HOME_17_X64" | tee --append "${GITHUB_ENV}"
;;
*)
echo "Unrecognized matrix.gradle-java=${JAVA_VERSION}."
exit 1
;;
esac
- name: "Checkout ${{ github.ref }} branch in ${{ github.repository }} repository."
uses: actions/checkout@v4
# TODEL https://github.com/gradle/wrapper-validation-action/issues/69
# Commented out, because action is not stable enough for parallel workflows ^.
# jobs.build would validate it anyway, although with that, the matrix will still execute the bad code.
# To be sure, lifted as "needs" prerequisite at least until there's some response on the issue.
#- name: Validate Gradle Wrapper JARs.
# uses: gradle/wrapper-validation-action@v1
# To prevent "Welcome to Gradle <version>! Here are the highlights of this release:" in build log, use:
#- run: touch ~/.gradle/notifications/5.6.4/release-features.rendered
- name: "Download Gradle running the build."
run: |
# Run a no-op gradlew command in workspace.
./gradlew --no-daemon --version | tee gradle.version.log
# Capture version for later usage.
# Note: the $ is very important no prevent matching the "Welcome to Gradle x.y.z!" line.
grep --color=never --only-matching --perl-regexp '(?<=Gradle )(\d+\.\d+(?:\.\d+)?(?:-(?:rc|milestone)-\d+)?)$' gradle.version.log > gradle.version
echo "GRADLE_VERSION=$(<gradle.version)" | tee --append "${GITHUB_ENV}"
- name: "Download Gradle ${{ env.GRADLE_VERSION }} running the tests."
env:
GRADLE_VERSION: ${{ matrix.gradle }}
run: |
# Create an empty project with wrapper using ${GRADLE_VERSION}.
mkdir "${HOME}/gradle-${GRADLE_VERSION}"
cd "${HOME}/gradle-${GRADLE_VERSION}"
touch settings.gradle
"${GITHUB_WORKSPACE}/gradlew" wrapper --gradle-version "${GRADLE_VERSION}" --distribution-type all --quiet
# Run a no-op gradlew command in an empty project with a specific wrapper version.
./gradlew --no-daemon --version
- name: "Cache Gradle ${{ env.GRADLE_VERSION }} files."
uses: actions/cache@v4
with:
path: |
# Prevent "Downloading https://services.gradle.org/distributions/gradle-${{ env.GRADLE_VERSION }}-all.zip"
# Prevent "Unzipping /home/${{ env.USER }}/.gradle/wrapper/dists/gradle-${{ env.GRADLE_VERSION }}-all/${ gradle-dist-hash }/gradle-${{ env.GRADLE_VERSION }}-all.zip"
# No need to cache this, as it's cached by default, it takes 4-11 seconds only to do it fresh.
#~/.gradle/wrapper/dists/gradle-${{ env.GRADLE_VERSION }}-all/
# Prevent "Download https://repo1.maven.org/maven2/" during build
~/.gradle/caches/modules-2/
# Prevent "Generating JAR file 'gradle-api-${{ env.GRADLE_VERSION }}.jar'" during build.
~/.gradle/caches/${{ env.GRADLE_VERSION }}/generated-gradle-jars/
key: |
${{ runner.os }}-gradle-${{ env.GRADLE_VERSION }}-${{ hashFiles('**/gradle-wrapper.properties', '**/*.gradle*', 'buildSrc/src/**') }}
restore-keys: |
${{ runner.os }}-gradle-${{ env.GRADLE_VERSION }}-
- name: "Cache Gradle Test Kit ${{ matrix.gradle }} files."
uses: actions/cache@v4
with:
path: |
# Prevent "Downloading https://services.gradle.org/distributions/gradle-${{ matrix.gradle }}-all.zip"
# Prevent "Unzipping /home/${{ env.USER }}/.gradle/wrapper/dists/gradle-${{ matrix.gradle }}-all/${ gradle-dist-hash }/gradle-${{ matrix.gradle }}-all.zip"
# No need to cache this, as it's cached by default, it takes 4-11 seconds only to do it fresh.
#~/.gradle/wrapper/dists/gradle-${{ matrix.gradle }}-all/
# Prevent "Download https://repo1.maven.org/maven2/" during test runs.
/tmp/.gradle-test-kit-${{ env.USER }}-*/caches/modules-2/
# Prevent "Generating JAR file 'gradle-api-${{ matrix.gradle }}.jar'" during test runs.
/tmp/.gradle-test-kit-${{ env.USER }}-*/caches/${{ matrix.gradle }}/generated-gradle-jars/
key: |
${{ runner.os }}-gradle-test-kit-${{ matrix.gradle }}-${{ matrix.agp }}
- name: "Check ${{ env.JOB_NAME }}."
env:
MATRIX_AGP: ${{ matrix.agp }}
MATRIX_KOTLIN: ${{ matrix.kotlin }}
MATRIX_GRADLE: ${{ matrix.gradle }}
# To run specific test, replace `${{ matrix.test-task }}` with `:quality:test --tests '*.HtmlReportTaskTest.runs on lints'`
run: >
./gradlew
--no-daemon
--no-build-cache
--no-configuration-cache
--no-watch-fs
--stacktrace
--continue
${{ matrix.test-task }}
-Pnet.twisterrob.gradle.build.verboseReports=true
-Pnet.twisterrob.test.android.pluginVersion="${MATRIX_AGP}"
-Pnet.twisterrob.test.kotlin.pluginVersion="${MATRIX_KOTLIN}"
-Pnet.twisterrob.gradle.runner.gradleVersion="${MATRIX_GRADLE}"
# -Pnet.twisterrob.test.gradle.javaHomeEnv=JAVA_HOME_${{ matrix.gradle-java }}_X64
- name: "Upload '${{ env.JOB_NAME }} Test Results XMLs' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: '${{ env.JOB_NAME }} Test Results XMLs'
if-no-files-found: error
path: |
**/build/test-results/test/TEST-*.xml
- name: "Upload '${{ env.JOB_NAME }} Test Results HTML' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: '${{ env.JOB_NAME }} Test Results HTML'
if-no-files-found: error
path: |
build/reports/tests/all/
- name: "Upload '${{ env.JOB_NAME }} Test Results HTMLs' artifact."
if: ${{ success() || failure() }}
uses: actions/upload-artifact@v4
with:
name: '${{ env.JOB_NAME }} Test Results HTMLs'
if-no-files-found: error
path: |
**/build/reports/tests/test/
- name: "Cleanup Gradle files before caching."
run: |
# Don't cache lock files to prevent breaking future builds
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
rm -fr ~/.gradle/caches/*/plugin-resolution/
- name: "Cleanup Gradle Test Kit files before caching."
run: |
# Don't cache lock files to prevent breaking future builds
rm -f /tmp/.gradle-test-kit-${USER}-*/caches/modules-2/modules-2.lock
rm -f /tmp/.gradle-test-kit-${USER}-*/caches/modules-2/gc.properties
rm -fr /tmp/.gradle-test-kit-${USER}-*/caches/*/plugin-resolution/
strategy:
fail-fast: false
matrix:
# See https://docs.gradle.org/current/userguide/compatibility.html#kotlin.
# See https://developer.android.com/studio/releases/gradle-plugin#updating-gradle.
#gradle: []
# See https://developer.android.com/studio/releases/gradle-plugin.
#agp: []
# See https://developer.android.com/studio/releases/build-tools#notes.
#build-tools: []
# See https://kotlinlang.org/docs/releases.html.
#kotlin: []
# Potential to run specific test tasks, e.g. :plugin can be run separately.
#test-task: []
include:
- name: "AGP 7.0.x on Gradle 7.0+"
gradle: '7.0.2'
gradle-java: '11'
agp: '7.0.4'
build-tools: '30.0.2'
kotlin: '1.4.32'
test-task: 'testReport :quality:tests'
- name: "AGP 7.0.x on Gradle 7.0+ - plugin"
gradle: '7.0.2'
gradle-java: '11'
agp: '7.0.4'
build-tools: '34.0.0'
kotlin: '1.4.32'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.0.x on Gradle 7.x"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.0.4'
build-tools: '30.0.2'
kotlin: '1.4.32'
test-task: 'testReport :quality:tests'
- name: "AGP 7.0.x on Gradle 7.x - plugin"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.0.4'
build-tools: '34.0.0'
kotlin: '1.4.32'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.1.x on Gradle 7.2+"
gradle: '7.2'
gradle-java: '11'
agp: '7.1.3'
build-tools: '30.0.3'
kotlin: '1.4.32'
test-task: 'testReport :quality:tests'
- name: "AGP 7.1.x on Gradle 7.2+ - plugin"
gradle: '7.2'
gradle-java: '11'
agp: '7.1.3'
build-tools: '34.0.0'
kotlin: '1.4.32'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.1.x on Gradle 7.x"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.1.3'
build-tools: '30.0.3'
kotlin: '1.4.32'
test-task: 'testReport :quality:tests'
- name: "AGP 7.1.x on Gradle 7.x - plugin"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.1.3'
build-tools: '34.0.0'
kotlin: '1.4.32'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.2.x on Gradle 7.3+"
gradle: '7.3.3'
gradle-java: '11'
agp: '7.2.2'
build-tools: '30.0.3'
kotlin: '1.4.32'
test-task: 'testReport :quality:tests'
- name: "AGP 7.2.x on Gradle 7.3+ - plugin"
gradle: '7.3.3'
gradle-java: '11'
agp: '7.2.2'
build-tools: '34.0.0'
kotlin: '1.4.32'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.2.x on Gradle 7.x"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.2.2'
build-tools: '30.0.3'
kotlin: '1.4.32'
test-task: 'testReport :quality:tests'
- name: "AGP 7.2.x on Gradle 7.x - plugin"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.2.2'
build-tools: '34.0.0'
kotlin: '1.4.32'
test-task: 'testReport :plugin:tests'
# See GradlePluginUtils.kt > pluginList: AGP 7.3 requires Kotlin 1.5.20+.
# 1.5.32 would be enough, but have to jump further forward because:
# org.jetbrains.kotlin.gradle.internal.kapt.KaptWithoutKotlincTask.kotlinStdlibClasspath is eagerly initialized.
# jarSearchingUtil.kt > findPotentialModuleJars uses a HashSet
# Sometimes (e.g. always on CI, not on Window locally) the hash ordering prefers
# classpath files('.../plugin/languages/build/classes/java/main')
# over
# classpath files('.../kotlin-stdlib-1.5.32.jar')
# and jarSearchingUtil.kt > hasEntry assumes that all "files" are .jar.
- name: "AGP 7.3.x on Gradle 7.4+"
gradle: '7.4.2'
gradle-java: '11'
agp: '7.3.1'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 7.3.x on Gradle 7.4+ - plugin"
gradle: '7.4.2'
gradle-java: '11'
agp: '7.3.1'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.3.x on Gradle 7.x"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.3.1'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 7.3.x on Gradle 7.x - plugin"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.3.1'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.4.x on Gradle 7.5+"
gradle: '7.5.1'
gradle-java: '11'
agp: '7.4.2'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 7.4.x on Gradle 7.5+ - plugin"
gradle: '7.5.1'
gradle-java: '11'
agp: '7.4.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.4.x on Gradle 7.x"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.4.2'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 7.4.x on Gradle 7.x - plugin"
gradle: '7.6.4'
gradle-java: '11'
agp: '7.4.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 7.4.x on Gradle 8.x"
gradle: '8.7'
gradle-java: '11'
agp: '7.4.2'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 7.4.x on Gradle 8.x - plugin"
gradle: '8.7'
gradle-java: '11'
agp: '7.4.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.0.x on Gradle 8.0+"
gradle: '8.0.2'
gradle-java: '17'
agp: '8.0.2'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 8.0.x on Gradle 8.0+ - plugin"
gradle: '8.0.2'
gradle-java: '17'
agp: '8.0.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.0.x on Gradle 8.x"
gradle: '8.7'
gradle-java: '17'
agp: '8.0.2'
kotlin: '1.6.21'
build-tools: '30.0.3'
test-task: 'testReport :quality:tests'
- name: "AGP 8.0.x on Gradle 8.x - plugin"
gradle: '8.7'
gradle-java: '17'
agp: '8.0.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.1.x on Gradle 8.0+"
gradle: '8.0.2'
gradle-java: '17'
agp: '8.1.4'
kotlin: '1.6.21'
build-tools: '33.0.1'
test-task: 'testReport :quality:tests'
- name: "AGP 8.1.x on Gradle 8.0+ - plugin"
gradle: '8.0.2'
gradle-java: '17'
agp: '8.1.4'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.1.x on Gradle 8.x"
gradle: '8.7'
gradle-java: '17'
agp: '8.1.4'
kotlin: '1.6.21'
build-tools: '33.0.1'
test-task: 'testReport :quality:tests'
- name: "AGP 8.1.x on Gradle 8.x - plugin"
gradle: '8.7'
gradle-java: '17'
agp: '8.1.4'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.2.x on Gradle 8.2+"
gradle: '8.2.1'
gradle-java: '17'
agp: '8.2.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP 8.2.x on Gradle 8.2+ - plugin"
gradle: '8.2.1'
gradle-java: '17'
agp: '8.2.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.2.x on Gradle 8.x"
gradle: '8.7'
gradle-java: '17'
agp: '8.2.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP 8.2.x on Gradle 8.x - plugin"
gradle: '8.7'
gradle-java: '17'
agp: '8.2.2'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.3.x on Gradle 8.4+"
gradle: '8.4'
gradle-java: '17'
agp: '8.3.1'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP 8.3.x on Gradle 8.4+ - plugin"
gradle: '8.4'
gradle-java: '17'
agp: '8.3.1'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.3.x on Gradle 8.x"
gradle: '8.7'
gradle-java: '17'
agp: '8.3.1'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP 8.3.x on Gradle 8.x - plugin"
gradle: '8.7'
gradle-java: '17'
agp: '8.3.1'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.4.x on Gradle 8.6+"
gradle: '8.6'
gradle-java: '17'
agp: '8.4.0'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP 8.4.x on Gradle 8.6+ - plugin"
gradle: '8.6'
gradle-java: '17'
agp: '8.4.0'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP 8.4.x on Gradle 8.x"
gradle: '8.7'
gradle-java: '17'
agp: '8.4.0'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP 8.4.x on Gradle 8.x - plugin"
gradle: '8.7'
gradle-java: '17'
agp: '8.4.0'
kotlin: '1.6.21'
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP stable on Gradle stable"
gradle: '8.7' # https://gradle.org/releases/
gradle-java: '17'
agp: '8.4.0' # https://maven.google.com/web/index.html?q=build#com.android.tools.build:gradle
kotlin: '1.9.23' # https://kotlinlang.org/docs/releases.html#release-details
build-tools: '34.0.0'
test-task: 'testReport :quality:tests'
- name: "AGP stable on Gradle stable - plugin"
gradle: '8.7' # https://gradle.org/releases/
gradle-java: '17'
agp: '8.4.0' # https://maven.google.com/web/index.html?q=build#com.android.tools.build:gradle
kotlin: '1.9.23' # https://kotlinlang.org/docs/releases.html#release-details
build-tools: '34.0.0'
test-task: 'testReport :plugin:tests'
- name: "AGP preview on Gradle preview"
gradle: '8.7' # https://services.gradle.org/distributions/
gradle-java: '17'
agp: '8.4.0' # https://maven.google.com/web/index.html?q=build#com.android.tools.build:gradle
kotlin: '2.0.0-Beta4' # https://kotlinlang.org/docs/eap.html#build-details
build-tools: '34.0.0' # https://dl.google.com/android/repository/repository2-3.xml <remotePackage path="build-tools;
test-task: 'testReport :quality:tests'
- name: "AGP preview on Gradle preview - plugin"
gradle: '8.7' # https://services.gradle.org/distributions/
gradle-java: '17'
agp: '8.4.0' # https://maven.google.com/web/index.html?q=build#com.android.tools.build:gradle
kotlin: '2.0.0-Beta4' # https://kotlinlang.org/docs/eap.html#build-details
build-tools: '34.0.0' # https://dl.google.com/android/repository/repository2-3.xml <remotePackage path="build-tools;
test-task: 'testReport :plugin:tests'
# Separate job for parsing the XML output, since the matrix runs on multiple machines.
publish-test-results:
name: "3 📢 Publish Tests Results"
needs: check
# The dependency job might be skipped, we don't need to run this job then.
if: ${{ success() || failure() }}
# Should finish under 2 minutes on success, so give it a big buffer in case failures take more time.
# It often runs out of time, because 1 of the many artifact downloads takes many minutes.
timeout-minutes: 10
permissions:
# EnricoMi/publish-unit-test-result-action
checks: write
runs-on: ubuntu-22.04
steps:
- name: "Download '... Test Results XMLs' Artifacts."
uses: actions/download-artifact@v4
with:
pattern: '* Test Results XMLs'
path: artifacts
- name: "Publish 'Test Results' check suite."
# Publish as much as possible even if some artifacts are missing (hopefully those jobs have failed separately).
if: ${{ success() || failure() }}
uses: EnricoMi/publish-unit-test-result-action@v2
with:
check_name: '0 🔔 Test Results'
comment_mode: off
report_individual_runs: true
action_fail_on_inconclusive: true
test_changes_limit: 0
junit_files: 'artifacts/* Test Results XMLs/**/*.xml'