-
Notifications
You must be signed in to change notification settings - Fork 870
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add functionality to generate API changes (#4285)
* Add functionality to generate API changes * Update conventions/src/main/kotlin/otel.japicmp-conventions.gradle.kts Co-authored-by: John Watson <jkwatson@gmail.com> * Do not commit any API changes until we have stable release Co-authored-by: John Watson <jkwatson@gmail.com>
- Loading branch information
Showing
7 changed files
with
89 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
83 changes: 83 additions & 0 deletions
83
conventions/src/main/kotlin/otel.japicmp-conventions.gradle.kts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
import me.champeau.gradle.japicmp.JapicmpTask | ||
|
||
plugins { | ||
base | ||
|
||
id("me.champeau.gradle.japicmp") | ||
} | ||
|
||
/** | ||
* The latest *released* version of the project. Evaluated lazily so the work is only done if necessary. | ||
*/ | ||
val latestReleasedVersion: String by lazy { | ||
// hack to find the current released version of the project | ||
val temp: Configuration = configurations.create("tempConfig") | ||
// pick the agent, since it's always there. | ||
dependencies.add(temp.name,"io.opentelemetry.javaagent:opentelemetry-javaagent:latest.release") | ||
val moduleVersion = configurations["tempConfig"].resolvedConfiguration.firstLevelModuleDependencies.elementAt(0).moduleVersion | ||
|
||
configurations.remove(temp) | ||
logger.info("Discovered latest release version: $moduleVersion") | ||
moduleVersion | ||
} | ||
|
||
/** | ||
* Locate the project's artifact of a particular version. | ||
*/ | ||
fun findArtifact(version: String): File { | ||
val existingGroup = group | ||
try { | ||
val depModule = "${project.group}:${base.archivesName.get()}:$version@jar" | ||
// Temporarily change the group name because we want to fetch an artifact with the same | ||
// Maven coordinates as the project, which Gradle would not allow otherwise. | ||
group = "virtual_group" | ||
val depJar = "${base.archivesName.get()}-${version}.jar" | ||
val configuration: Configuration = configurations.detachedConfiguration( | ||
dependencies.create(depModule) | ||
) | ||
return files(configuration.files).filter { | ||
it.name.equals(depJar) | ||
}.singleFile | ||
} finally { | ||
group = existingGroup | ||
} | ||
} | ||
|
||
tasks { | ||
val jApiCmp by registering(JapicmpTask::class) { | ||
dependsOn("jar") | ||
|
||
// the japicmp "new" version is either the user-specified one, or the locally built jar. | ||
val apiNewVersion: String? by project | ||
val newArtifact = apiNewVersion?.let { findArtifact(it) } | ||
?: file(getByName<Jar>("jar").archiveFile) | ||
newClasspath = files(newArtifact) | ||
|
||
//only output changes, not everything | ||
isOnlyModified = true | ||
|
||
// the japicmp "old" version is either the user-specified one, or the latest release. | ||
val apiBaseVersion: String? by project | ||
val baselineVersion = apiBaseVersion ?: latestReleasedVersion | ||
oldClasspath = try { | ||
files(findArtifact(baselineVersion)) | ||
} catch (e: Exception) { | ||
//if we can't find the baseline artifact, this is probably one that's never been published before, | ||
//so publish the whole API. We do that by flipping this flag, and comparing the current against nothing. | ||
isOnlyModified = false | ||
files() | ||
} | ||
|
||
//this is needed so that we only consider the current artifact, and not dependencies | ||
isIgnoreMissingClasses = true | ||
packageExcludes = listOf("*.internal", "*.internal.*") | ||
val baseVersionString = if (apiBaseVersion == null) "latest" else baselineVersion | ||
val newVersionString = if (apiNewVersion == null) "current" else apiNewVersion | ||
txtOutputFile = file("$rootDir/docs/apidiffs/${newVersionString}_vs_${baseVersionString}/${base.archivesName.get()}.txt") | ||
} | ||
// have the check task depend on the api comparison task, to make it more likely it will get used. | ||
named("check") { | ||
dependsOn(jApiCmp) | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
plugins { | ||
id("otel.java-conventions") | ||
id("otel.japicmp-conventions") | ||
id("otel.publish-conventions") | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
plugins { | ||
id("otel.java-conventions") | ||
id("otel.japicmp-conventions") | ||
id("otel.publish-conventions") | ||
} | ||
|
||
|