From 4c0102759c7e5a015d8ec45b5dcb32f6d43d38b2 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 10 Jul 2026 20:26:19 -0700 Subject: [PATCH 1/4] Pin japicmp baseline with apidiff snapshots --- .github/workflows/release.yml | 3 +++ .../otel.japicmp-conventions.gradle.kts | 23 +++++-------------- docs/knowledge/build.md | 6 ++--- version.gradle.kts | 2 ++ 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2839f535f8b..35d9da2b3af 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -197,8 +197,11 @@ jobs: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} run: | ./gradlew japicmp -PapiBaseVersion=$PRIOR_VERSION -PapiNewVersion=$VERSION + # Pin the apidiff baseline to the just-released version. + sed -i "s/^val apidiffBaselineVersion = .*/val apidiffBaselineVersion = \"$VERSION\"/" version.gradle.kts ./gradlew --refresh-dependencies japicmp git add docs/apidiffs + git add version.gradle.kts - name: Update versions in README.md env: diff --git a/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts index a274b1157dd..6370a2b7351 100644 --- a/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts @@ -13,22 +13,11 @@ plugins { } /** - * The latest *released* version of the project. Evaluated lazily so the work is only done if necessary. + * The baseline version japicmp compares against. Pinned in version.gradle.kts and bumped + * atomically with docs/apidiffs/current_vs_latest/ by the post-release PR opened from + * .github/workflows/release.yml. */ -val latestReleasedVersion: String by lazy { - // hack to find the current released version of the project - val temp: Configuration = configurations.create("tempConfig") { - resolutionStrategy.cacheChangingModulesFor(0, "seconds") - resolutionStrategy.cacheDynamicVersionsFor(0, "seconds") - } - // pick the api, since it's always there. - dependencies.add(temp.name, "io.opentelemetry:opentelemetry-api:latest.release") - val moduleVersion = - configurations["tempConfig"].resolvedConfiguration.firstLevelModuleDependencies.elementAt(0).moduleVersion - configurations.remove(temp) - logger.debug("Discovered latest release version: " + moduleVersion) - moduleVersion -} +val apidiffBaselineVersion = rootProject.extra["apidiffBaselineVersion"] as String class AllowNewAbstractMethodOnAutovalueClasses : AbstractRecordingSeenMembers() { override fun maybeAddViolation(member: JApiCompatibility): Violation? { @@ -114,9 +103,9 @@ if (!project.hasProperty("otel.release") && !project.name.startsWith("bom")) { // the japicmp "new" version is either the user-specified one, or the locally built jar. val apiNewVersion = project.findProperty("apiNewVersion") as String? - // the japicmp "old" version is either the user-specified one, or the latest release. + // the japicmp "old" version is either the user-specified one, or the pinned baseline. val apiBaseVersion = project.findProperty("apiBaseVersion") as String? - val baselineVersion = apiBaseVersion ?: latestReleasedVersion + val baselineVersion = apiBaseVersion ?: apidiffBaselineVersion // Setup new and old classpath, new and old archives. // New and old classpaths are set to the set of all artifacts published by this project, at diff --git a/docs/knowledge/build.md b/docs/knowledge/build.md index a041a1dbbb4..b8e079fd06c 100644 --- a/docs/knowledge/build.md +++ b/docs/knowledge/build.md @@ -24,9 +24,9 @@ All tasks can be scoped to a single module by prefixing with the module path: ``` `./gradlew build` and `./gradlew check` both depend on the `jApiCmp` task, which compares the -locally-built jars against the latest release and writes diffs to `docs/apidiffs/current_vs_latest/`. -Include any changes to those files in your PR. See [api-design.md](api-design.md#japicmp) -for details. +locally-built jars against the release pinned by `apidiffBaselineVersion` in `version.gradle.kts` +and writes diffs to `docs/apidiffs/current_vs_latest/`. Include any changes to those files in your +PR. See [api-design.md](api-design.md#japicmp) for details. If your branch is not up to date with `main`, `jApiCmp` may produce a diff that reflects changes already merged to `main` rather than your own changes. Rebase or merge `main` before treating diff --git a/version.gradle.kts b/version.gradle.kts index 4ebd96caa1f..7b11437565b 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -1,4 +1,5 @@ val snapshot = true +val apidiffBaselineVersion = "1.63.0" allprojects { var ver = "1.65.0" @@ -10,4 +11,5 @@ allprojects { ver += "-SNAPSHOT" } version = ver + extra["apidiffBaselineVersion"] = apidiffBaselineVersion } From ad5c339f82fc3ba88d6b731fc819dc9ec52b4ce7 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 10 Jul 2026 20:56:19 -0700 Subject: [PATCH 2/4] Address review comment from Copilot: target project version --- .github/scripts/get-version.sh | 2 +- .github/scripts/update-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/scripts/get-version.sh b/.github/scripts/get-version.sh index 0c18cd2aa23..f77d27e730d 100755 --- a/.github/scripts/get-version.sh +++ b/.github/scripts/get-version.sh @@ -1,3 +1,3 @@ #!/bin/bash -e -grep -Eo "[0-9]+.[0-9]+.[0-9]+" version.gradle.kts +grep "var ver = " version.gradle.kts | grep -Eo "[0-9]+.[0-9]+.[0-9]+" diff --git a/.github/scripts/update-version.sh b/.github/scripts/update-version.sh index aaeae508a2d..8d95cac9327 100755 --- a/.github/scripts/update-version.sh +++ b/.github/scripts/update-version.sh @@ -3,6 +3,6 @@ version=$1 versionWithSnapshot="$version-SNAPSHOT" -sed -Ei "s/[0-9]+\.[0-9]+\.[0-9]+/$version/" version.gradle.kts +sed -Ei "s/var ver = \"[^\"]*\"/var ver = \"$version\"/" version.gradle.kts sed -Ei "1 s/(Comparing source compatibility of [a-z-]+)-[0-9]+\.[0-9]+\.[0-9]+(-SNAPSHOT)?.jar/\1-$versionWithSnapshot.jar/" docs/apidiffs/current_vs_latest/*.txt From 43576d2737b9543067d1f397ba3f7c807691eac9 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 10 Jul 2026 21:01:31 -0700 Subject: [PATCH 3/4] Address review comment from Copilot: escape version separators --- .github/scripts/get-version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/get-version.sh b/.github/scripts/get-version.sh index f77d27e730d..3efbd7754ec 100755 --- a/.github/scripts/get-version.sh +++ b/.github/scripts/get-version.sh @@ -1,3 +1,3 @@ #!/bin/bash -e -grep "var ver = " version.gradle.kts | grep -Eo "[0-9]+.[0-9]+.[0-9]+" +grep "var ver = " version.gradle.kts | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+" From 1b371e179c15373b3a3d377367801375cbed9193 Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Mon, 13 Jul 2026 15:48:47 -0500 Subject: [PATCH 4/4] Update apidiffBaselineVersion to 1.64.0 --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index 7b11437565b..a084a0ff5be 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -1,5 +1,5 @@ val snapshot = true -val apidiffBaselineVersion = "1.63.0" +val apidiffBaselineVersion = "1.64.0" allprojects { var ver = "1.65.0"