From a6d876ce8fc7d7ba70d62a2f074f0d8abc7875c9 Mon Sep 17 00:00:00 2001 From: Chris Chestnut Date: Thu, 2 Apr 2026 17:16:51 +0000 Subject: [PATCH 1/4] automate version validation with prod test suite --- .../app-distribution-gradle-compatibility-tests.yml | 13 +++++++++++-- .../firebase-appdistribution-gradle.gradle | 2 ++ .../firebase/appdistribution/gradle/VersionUtils.kt | 0 .../gradle/BeePlusGradleProject.java | 7 ++++--- 4 files changed, 17 insertions(+), 5 deletions(-) rename firebase-appdistribution-gradle/src/{integrationTest => main}/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt (100%) diff --git a/.github/workflows/app-distribution-gradle-compatibility-tests.yml b/.github/workflows/app-distribution-gradle-compatibility-tests.yml index 4b919962dcb..35ef8b59ba1 100644 --- a/.github/workflows/app-distribution-gradle-compatibility-tests.yml +++ b/.github/workflows/app-distribution-gradle-compatibility-tests.yml @@ -25,21 +25,30 @@ jobs: java-version: 17 distribution: temurin cache: gradle + + - name: Setup local.properties for prodTest + run: | + echo "${{ secrets.INTEG_TESTS_FAD_GRADLE_PROD_TEST_PROPERTIES }}" > local.properties + - name: Add FAD service-credentials.json env: INTEG_TESTS_FAD_SERVICE_CREDENTIALS: ${{ secrets.INTEG_TESTS_FAD_SERVICE_CREDENTIALS }} if: env.INTEG_TESTS_FAD_SERVICE_CREDENTIALS != '' && env.INTEG_TESTS_FAD_SERVICE_CREDENTIALS != 'null' run: | echo $INTEG_TESTS_FAD_SERVICE_CREDENTIALS | base64 -d > firebase-appdistribution-gradle/service-credentials.json + - name: Run tests id: tests + env: + FIREBASE_TOKEN: ${{ secrets.INTEG_TESTS_FAD_FIREBASE_TOKEN }} run: | ./gradlew \ - :firebase-appdistribution-gradle:integrationTest + :firebase-appdistribution-gradle:integrationTest \ + :firebase-appdistribution-gradle:prodTest - name: Upload Test Report if: failure() uses: actions/upload-artifact@v4 with: name: integration-test-report - path: firebase-appdistribution-gradle/build/reports/tests/integrationTest/ + path: firebase-appdistribution-gradle/build/reports/tests/ diff --git a/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle b/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle index b3673a09da2..3736a5b0fb4 100644 --- a/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle +++ b/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle @@ -223,6 +223,7 @@ dependencies { integrationTestImplementation(gradleApi()) integrationTestImplementation(gradleTestKit()) + integrationTestImplementation(sourceSets.main.output) integrationTestImplementation("com.android.tools.build:gradle:7.2.0") integrationTestImplementation(libs.junit) integrationTestImplementation("com.github.tomakehurst:wiremock:2.26.3") @@ -232,6 +233,7 @@ dependencies { prodTestImplementation(gradleApi()) prodTestImplementation(gradleTestKit()) + prodTestImplementation(sourceSets.main.output) prodTestImplementation("com.android.tools.build:gradle:7.2.0") prodTestImplementation(libs.junit) prodTestImplementation("com.github.tomakehurst:wiremock:2.26.3") diff --git a/firebase-appdistribution-gradle/src/integrationTest/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt b/firebase-appdistribution-gradle/src/main/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt similarity index 100% rename from firebase-appdistribution-gradle/src/integrationTest/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt rename to firebase-appdistribution-gradle/src/main/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt diff --git a/firebase-appdistribution-gradle/src/prodTest/java/com/google/firebase/appdistribution/gradle/BeePlusGradleProject.java b/firebase-appdistribution-gradle/src/prodTest/java/com/google/firebase/appdistribution/gradle/BeePlusGradleProject.java index b27c725ff02..2a59496da46 100644 --- a/firebase-appdistribution-gradle/src/prodTest/java/com/google/firebase/appdistribution/gradle/BeePlusGradleProject.java +++ b/firebase-appdistribution-gradle/src/prodTest/java/com/google/firebase/appdistribution/gradle/BeePlusGradleProject.java @@ -58,9 +58,10 @@ private static String getRequiredSystemProperty(String propertyName) { static final String PACKAGE_NAME = "com.firebase.appdistribution.prober"; // Also remember to update the latest AGP/gradle versions in UploadDistributionTaskTest.kt // firebase-appdistribution-gradle/src/integrationTest/java/com/google/firebase/appdistribution/gradle/UploadDistributionTaskTest.kt#L724-L726 - static final String LATEST_AGP_VERSION = "9.2.1"; - static final String LATEST_GRADLE_VERSION = "9.5.0"; + static final String LATEST_AGP_VERSION = VersionUtils.INSTANCE.fetchLatestAgpVersion(); + static final String LATEST_GRADLE_VERSION = VersionUtils.INSTANCE.fetchLatestGradleVersion(); // The project number for App Distro Probes. We need to use this project + // because this is the one that's actually linked to play for BeePlus, // which is required for AAB uploads. private static final String PROJECT_NUMBER_SYSTEM_PROPERTY = "firebase.projectNumber"; @@ -184,7 +185,7 @@ public BuildResult runUploadAab() { private String getToken() { String token = System.getenv("FIREBASE_TOKEN"); - if (token == null || token.isEmpty()) { + if (isNullOrEmpty(token)) { throw new IllegalStateException( "FIREBASE_TOKEN environment variable not set. This is required for production tests."); } From 4ad0e6aa64c70b62907ab5cc38d33b84d0e69df7 Mon Sep 17 00:00:00 2001 From: Chris Chestnut Date: Tue, 19 May 2026 17:18:53 +0000 Subject: [PATCH 2/4] Modify where test file is bundled --- .../firebase-appdistribution-gradle.gradle | 27 +++++++++++++++++-- .../appdistribution/gradle/VersionUtils.kt | 0 2 files changed, 25 insertions(+), 2 deletions(-) rename firebase-appdistribution-gradle/src/{main => testUtil}/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt (100%) diff --git a/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle b/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle index 3736a5b0fb4..bc67f1772e9 100644 --- a/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle +++ b/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle @@ -88,10 +88,33 @@ sourceSets { } } + test { + java { + srcDirs += ['src/testUtil/java'] + } + kotlin { + srcDirs += ['src/testUtil/java'] + } + } + // Source set for integration tests - integrationTest + integrationTest { + java { + srcDirs += ['src/testUtil/java'] + } + kotlin { + srcDirs += ['src/testUtil/java'] + } + } - prodTest + prodTest { + java { + srcDirs += ['src/testUtil/java'] + } + kotlin { + srcDirs += ['src/testUtil/java'] + } + } // Source set for Gradle Runner test build. Gradle Runner test builds are run in separate // processes i.e. test build does not share same class paths as test process. So we need diff --git a/firebase-appdistribution-gradle/src/main/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt b/firebase-appdistribution-gradle/src/testUtil/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt similarity index 100% rename from firebase-appdistribution-gradle/src/main/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt rename to firebase-appdistribution-gradle/src/testUtil/java/com/google/firebase/appdistribution/gradle/VersionUtils.kt From f1f864989267395c0b7ff0e6eb9d25fe9df19214 Mon Sep 17 00:00:00 2001 From: Chris Chestnut Date: Tue, 19 May 2026 17:20:36 +0000 Subject: [PATCH 3/4] Rebase with main --- firebase-debug.log | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 firebase-debug.log diff --git a/firebase-debug.log b/firebase-debug.log new file mode 100644 index 00000000000..e7daaff2607 --- /dev/null +++ b/firebase-debug.log @@ -0,0 +1,16 @@ +[debug] [2026-04-06T12:03:44.782Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] +[debug] [2026-04-06T12:03:44.789Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] +[debug] [2026-04-06T12:03:45.007Z] Running auto auth +[debug] [2026-04-06T12:03:45.008Z] Running auto auth +[debug] [2026-04-06T12:03:51.324Z] No OAuth tokens found +[debug] [2026-04-06T12:03:51.326Z] >>> [apiv2][query] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [none] +[debug] [2026-04-06T12:03:51.326Z] >>> [apiv2][(partial)header] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com x-goog-user-project= +[debug] [2026-04-06T12:03:51.340Z] No OAuth tokens found +[debug] [2026-04-06T12:03:51.340Z] >>> [apiv2][query] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [none] +[debug] [2026-04-06T12:03:51.341Z] >>> [apiv2][(partial)header] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com x-goog-user-project= +[debug] [2026-04-06T12:03:51.527Z] <<< [apiv2][status] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com 400 +[debug] [2026-04-06T12:03:51.528Z] <<< [apiv2][body] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [omitted] +[debug] [2026-04-06T12:03:51.532Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] +[debug] [2026-04-06T12:03:51.532Z] Running auto auth +[debug] [2026-04-06T12:03:51.703Z] <<< [apiv2][status] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com 400 +[debug] [2026-04-06T12:03:51.703Z] <<< [apiv2][body] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [omitted] From cb59a0ef4c3f03ed8f62536a8559d4ca152c4627 Mon Sep 17 00:00:00 2001 From: Chris Chestnut Date: Tue, 19 May 2026 18:08:29 +0000 Subject: [PATCH 4/4] try removing main output dependency --- .../firebase-appdistribution-gradle.gradle | 4 ++-- firebase-debug.log | 16 ---------------- 2 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 firebase-debug.log diff --git a/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle b/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle index bc67f1772e9..d7002b4ab1c 100644 --- a/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle +++ b/firebase-appdistribution-gradle/firebase-appdistribution-gradle.gradle @@ -246,7 +246,7 @@ dependencies { integrationTestImplementation(gradleApi()) integrationTestImplementation(gradleTestKit()) - integrationTestImplementation(sourceSets.main.output) + //integrationTestImplementation(sourceSets.main.output) integrationTestImplementation("com.android.tools.build:gradle:7.2.0") integrationTestImplementation(libs.junit) integrationTestImplementation("com.github.tomakehurst:wiremock:2.26.3") @@ -256,7 +256,7 @@ dependencies { prodTestImplementation(gradleApi()) prodTestImplementation(gradleTestKit()) - prodTestImplementation(sourceSets.main.output) + //prodTestImplementation(sourceSets.main.output) prodTestImplementation("com.android.tools.build:gradle:7.2.0") prodTestImplementation(libs.junit) prodTestImplementation("com.github.tomakehurst:wiremock:2.26.3") diff --git a/firebase-debug.log b/firebase-debug.log deleted file mode 100644 index e7daaff2607..00000000000 --- a/firebase-debug.log +++ /dev/null @@ -1,16 +0,0 @@ -[debug] [2026-04-06T12:03:44.782Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] -[debug] [2026-04-06T12:03:44.789Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] -[debug] [2026-04-06T12:03:45.007Z] Running auto auth -[debug] [2026-04-06T12:03:45.008Z] Running auto auth -[debug] [2026-04-06T12:03:51.324Z] No OAuth tokens found -[debug] [2026-04-06T12:03:51.326Z] >>> [apiv2][query] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [none] -[debug] [2026-04-06T12:03:51.326Z] >>> [apiv2][(partial)header] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com x-goog-user-project= -[debug] [2026-04-06T12:03:51.340Z] No OAuth tokens found -[debug] [2026-04-06T12:03:51.340Z] >>> [apiv2][query] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [none] -[debug] [2026-04-06T12:03:51.341Z] >>> [apiv2][(partial)header] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com x-goog-user-project= -[debug] [2026-04-06T12:03:51.527Z] <<< [apiv2][status] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com 400 -[debug] [2026-04-06T12:03:51.528Z] <<< [apiv2][body] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [omitted] -[debug] [2026-04-06T12:03:51.532Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] -[debug] [2026-04-06T12:03:51.532Z] Running auto auth -[debug] [2026-04-06T12:03:51.703Z] <<< [apiv2][status] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com 400 -[debug] [2026-04-06T12:03:51.703Z] <<< [apiv2][body] GET https://serviceusage.googleapis.com/v1/projects//services/firebaseappdistribution.googleapis.com [omitted]