Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid manual artifact/archive renaming (composite build readiness) #3603

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions api/all/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ plugins {

description = "OpenTelemetry API"
otelJava.moduleName.set("io.opentelemetry.api")
base.archivesBaseName = "opentelemetry-api"

dependencies {
api(project(":context"))
api(project(":opentelemetry-context"))

annotationProcessor("com.google.auto.value:auto-value")

Expand Down
10 changes: 0 additions & 10 deletions api/build.gradle.kts

This file was deleted.

4 changes: 2 additions & 2 deletions api/metrics/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ description = "OpenTelemetry API"
otelJava.moduleName.set("io.opentelemetry.api.metrics")

dependencies {
api(project(":api:all"))
api(project(":context"))
api(project(":api:opentelemetry-api"))
api(project(":opentelemetry-context"))

annotationProcessor("com.google.auto.value:auto-value")

Expand Down
6 changes: 2 additions & 4 deletions bom-alpha/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@ plugins {
}

description = "OpenTelemetry Bill of Materials (Alpha)"
group = "io.opentelemetry"
base.archivesBaseName = "opentelemetry-bom-alpha"

rootProject.subprojects.forEach { subproject ->
if (!project.name.startsWith("bom")) {
if (!project.name.startsWith("opentelemetry-bom")) {
evaluationDependsOn(subproject.path)
}
}
Expand All @@ -18,7 +16,7 @@ afterEvaluate {
constraints {
rootProject.subprojects
.sortedBy { it.findProperty("archivesBaseName") as String? }
.filter { !it.name.startsWith("bom") }
.filter { !it.name.startsWith("opentelemetry-bom") }
.filter { it.findProperty("otel.release") == "alpha" }
.forEach { project ->
project.plugins.withId("maven-publish") {
Expand Down
4 changes: 1 addition & 3 deletions bom/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ plugins {
}

description = "OpenTelemetry Bill of Materials"
group = "io.opentelemetry"
base.archivesBaseName = "opentelemetry-bom"

rootProject.subprojects.forEach { subproject ->
if (project != subproject) {
Expand All @@ -18,7 +16,7 @@ afterEvaluate {
constraints {
rootProject.subprojects
.sortedBy { it.findProperty("archivesBaseName") as String? }
.filter { !it.name.startsWith("bom") }
.filter { !it.name.startsWith("opentelemetry-bom") }
.filter { !it.hasProperty("otel.release") }
.forEach { project ->
project.plugins.withId("maven-publish") {
Expand Down
11 changes: 7 additions & 4 deletions buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ plugins {
val latestReleasedVersion: String by lazy {
// hack to find the current released version of the project
val temp: Configuration = configurations.create("tempConfig")
// pick the api, since it's always there.
dependencies.add(temp.name, "io.opentelemetry:opentelemetry-api:latest.release")
// Pick the bom, since it's always there. Picking the api gives us the currently built version
// when executing this from the context of the api project. But we never compare the bom's API
// since there is none.
dependencies.add(temp.name, "io.opentelemetry:opentelemetry-bom:latest.release")
val moduleVersion = configurations["tempConfig"].resolvedConfiguration.firstLevelModuleDependencies.elementAt(0).moduleVersion
configurations.remove(temp)
logger.debug("Discovered latest release version: " + moduleVersion)
logger.info("Discovered latest release version: {}", moduleVersion)
moduleVersion
}

Expand All @@ -43,7 +45,7 @@ fun findArtifact(version: String): File {
}

// generate the api diff report for any module that is stable and publishes a jar.
if (!project.hasProperty("otel.release") && !project.name.startsWith("bom")) {
if (!project.hasProperty("otel.release") && !project.name.startsWith("opentelemetry-bom")) {
afterEvaluate {
tasks {
val jApiCmp by registering(JapicmpTask::class) {
Expand All @@ -67,6 +69,7 @@ if (!project.hasProperty("otel.release") && !project.name.startsWith("bom")) {
//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
logger.warn("Project is new because and old version couldn't be found: {}", e.toString())
files()
}

Expand Down
12 changes: 2 additions & 10 deletions buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,6 @@ plugins {

val otelJava = extensions.create<OtelJavaExtension>("otelJava")

base {
// May be set already by a parent project, only set if not.
// TODO(anuraaga): Make this less hacky by creating a "module group" plugin.
if (!archivesName.get().startsWith("opentelemetry-")) {
archivesName.set("opentelemetry-${name}")
}
}

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
Expand Down Expand Up @@ -64,7 +56,7 @@ tasks {
}

//disable deprecation warnings for the protobuf module
if (project.name == "proto") {
if (project.name == "opentelemetry-proto") {
compilerArgs.add("-Xlint:-deprecation")
}

Expand Down Expand Up @@ -175,7 +167,7 @@ dependencies {
dependencyManagement(platform(project(":dependencyManagement")))
afterEvaluate {
configurations.configureEach {
if (isCanBeResolved && !isCanBeConsumed) {
if (!isCanBeConsumed && this != dependencyManagement) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is required for the composite build to work:

So this is not enough to make composite builds work as there is at least one other problem, namely how dependency management is set up. The constraints seem to be only applied if the ultimately built project has the constraints applied. For example, without this change, if I try inside the examples subdirectory:

$ ./gradlew classes --include-build ..

...

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':opentelemetry-examples-zipkin:compileJava'.
> Could not resolve all task dependencies for configuration ':opentelemetry-examples-zipkin:compileClasspath'.
   > Could not find io.zipkin.reporter2:zipkin-reporter:.
     Required by:
         project :opentelemetry-examples-zipkin > project :odin-java:exporters:opentelemetry-exporter-zipkin

We can see that opentelemetry-exporter-zipkin has the dependency api("io.zipkin.reporter2:zipkin-reporter"). However, the api configuration extends from nothing, so it does not have dependency management applied, and opentelemetry-examples-zipkin:compileClasspath does not use the java-conventions plugin so it does not have dependency management applied either.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@anuraaga Actually I'll need to resurrect this one change for the included build to actually work. Seems I tested with some changes from here mixed in when I made #3653.

extendsFrom(dependencyManagement)
}
}
Expand Down
15 changes: 13 additions & 2 deletions buildSrc/src/main/kotlin/otel.publish-conventions.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
import gradle.kotlin.dsl.accessors._33c50961cbf9e9e490400740be7b5d25.base

plugins {
`maven-publish`
signing

id("otel.japicmp-conventions")
}

base {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved from buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts

// May be set already by a parent project, only set if not.
// TODO(anuraaga): Make this less hacky by creating a "module group" plugin.
if (!project.name.startsWith("opentelemetry-")) {
throw Error("archivesName of ${project.path} should start with opentelemetry-")
}
}

// We must not change group ID or artifact ID here, otherwise composite builds won't work.
// Ensure that the project name matches the expected artifact ID.

publishing {
publications {
register<MavenPublication>("mavenPublication") {
Expand All @@ -14,10 +27,8 @@ publishing {
versionParts[0] += "-${release}"
version = versionParts.joinToString("-")
}
groupId = "io.opentelemetry"
afterEvaluate {
// not available until evaluated.
artifactId = base.archivesName.get()
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting rid of this and ensuring that project name == archive name == artifact ID was key here.

pom.description.set(project.description)
}

Expand Down
2 changes: 1 addition & 1 deletion context/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ dependencies {
add("otelAsBraveTestImplementation", "io.zipkin.brave:brave")
add("otelInBraveTestImplementation", "io.zipkin.brave:brave")

add("strictContextEnabledTestImplementation", project(":api:all"))
add("strictContextEnabledTestImplementation", project(":api:opentelemetry-api"))

// MustBeClosed
compileOnly("com.google.errorprone:error_prone_annotations")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@

package io.opentelemetry.sdk.example;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
Expand All @@ -25,6 +27,9 @@ public final class ConfigureSpanProcessorExample {
private static final Tracer tracer = openTelemetry.getTracer("ConfigureSpanProcessorExample");

public static void main(String[] args) {
System.out.println(
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added this to test the included build, I can remove or adapt it if desired.

Resource.getDefault().getAttribute(AttributeKey.stringKey("telemetry.sdk.version")));

// Example how to configure the default SpanProcessors.
defaultSpanProcessors();
// After this method, the following SpanProcessors are registered:
Expand Down
10 changes: 0 additions & 10 deletions exporters/build.gradle.kts

This file was deleted.

8 changes: 4 additions & 4 deletions exporters/jaeger-thrift/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ description = "OpenTelemetry - Jaeger Thrift Exporter"
otelJava.moduleName.set("io.opentelemetry.exporter.jaeger.thrift")

dependencies {
api(project(":sdk:all"))
api(project(":sdk:opentelemetry-sdk"))

implementation(project(":sdk:all"))
implementation(project(":semconv"))
implementation(project(":sdk:opentelemetry-sdk"))
implementation(project(":opentelemetry-semconv"))

implementation("io.jaegertracing:jaeger-client")

Expand All @@ -21,5 +21,5 @@ dependencies {
testImplementation("com.squareup.okhttp3:okhttp")
testImplementation("com.google.guava:guava-testlib")

testImplementation(project(":sdk:testing"))
testImplementation(project(":sdk:opentelemetry-sdk-testing"))
}
8 changes: 4 additions & 4 deletions exporters/jaeger/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ description = "OpenTelemetry - Jaeger Exporter"
otelJava.moduleName.set("io.opentelemetry.exporter.jaeger")

dependencies {
api(project(":sdk:all"))
api(project(":sdk:opentelemetry-sdk"))
api("io.grpc:grpc-api")

implementation(project(":sdk:all"))
implementation(project(":semconv"))
implementation(project(":sdk:opentelemetry-sdk"))
implementation(project(":opentelemetry-semconv"))

implementation("io.grpc:grpc-protobuf")
implementation("io.grpc:grpc-stub")
Expand All @@ -26,7 +26,7 @@ dependencies {
testImplementation("com.google.protobuf:protobuf-java-util")
testImplementation("com.squareup.okhttp3:okhttp")

testImplementation(project(":sdk:testing"))
testImplementation(project(":sdk:opentelemetry-sdk-testing"))

testRuntimeOnly("io.grpc:grpc-netty-shaded")
}
10 changes: 5 additions & 5 deletions exporters/logging-otlp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ description = "OpenTelemetry Protocol JSON Logging Exporters"
otelJava.moduleName.set("io.opentelemetry.exporter.logging.otlp")

dependencies {
compileOnly(project(":sdk:trace"))
compileOnly(project(":sdk:metrics"))
compileOnly(project(":sdk:opentelemetry-sdk-trace"))
compileOnly(project(":sdk:opentelemetry-sdk-metrics"))

implementation(project(":exporters:otlp:common"))
implementation(project(":proto"))
implementation(project(":exporters:otlp:opentelemetry-exporter-otlp-common"))
implementation(project(":opentelemetry-proto"))

implementation("org.curioswitch.curiostack:protobuf-jackson")

testImplementation(project(":sdk:testing"))
testImplementation(project(":sdk:opentelemetry-sdk-testing"))

testImplementation("org.skyscreamer:jsonassert")
}
6 changes: 3 additions & 3 deletions exporters/logging/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ description = "OpenTelemetry - Logging Exporter"
otelJava.moduleName.set("io.opentelemetry.exporter.logging")

dependencies {
api(project(":sdk:all"))
api(project(":sdk:metrics"))
api(project(":sdk:opentelemetry-sdk"))
api(project(":sdk:opentelemetry-sdk-metrics"))

testImplementation(project(":sdk:testing"))
testImplementation(project(":sdk:opentelemetry-sdk-testing"))
}
10 changes: 0 additions & 10 deletions exporters/otlp-http/build.gradle.kts

This file was deleted.

8 changes: 4 additions & 4 deletions exporters/otlp-http/metrics/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ description = "OpenTelemetry Protocol HTTP Metrics Exporter"
otelJava.moduleName.set("io.opentelemetry.exporter.otlp.http.metrics")

dependencies {
api(project(":sdk:metrics"))
api(project(":sdk:opentelemetry-sdk-metrics"))

implementation(project(":exporters:otlp:common"))
implementation(project(":exporters:otlp:opentelemetry-exporter-otlp-common"))

implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:okhttp-tls")
implementation("com.squareup.okio:okio")

testImplementation(project(":proto"))
testImplementation(project(":sdk:testing"))
testImplementation(project(":opentelemetry-proto"))
testImplementation(project(":sdk:opentelemetry-sdk-testing"))

testImplementation("com.google.api.grpc:proto-google-common-protos")
testImplementation("com.linecorp.armeria:armeria-junit5")
Expand Down
8 changes: 4 additions & 4 deletions exporters/otlp-http/trace/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ description = "OpenTelemetry Protocol HTTP Trace Exporter"
otelJava.moduleName.set("io.opentelemetry.exporter.otlp.http.trace")

dependencies {
api(project(":sdk:trace"))
api(project(":sdk:opentelemetry-sdk-trace"))

implementation(project(":exporters:otlp:common"))
implementation(project(":exporters:otlp:opentelemetry-exporter-otlp-common"))

implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:okhttp-tls")
implementation("com.squareup.okio:okio")

testImplementation(project(":proto"))
testImplementation(project(":sdk:testing"))
testImplementation(project(":opentelemetry-proto"))
testImplementation(project(":sdk:opentelemetry-sdk-testing"))

testImplementation("com.google.api.grpc:proto-google-common-protos")
testImplementation("com.linecorp.armeria:armeria-junit5")
Expand Down
3 changes: 1 addition & 2 deletions exporters/otlp/all/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ plugins {

description = "OpenTelemetry Protocol Exporters"
otelJava.moduleName.set("io.opentelemetry.exporter.otlp")
base.archivesBaseName = "opentelemetry-exporter-otlp"

dependencies {
api(project(":exporters:otlp:trace"))
api(project(":exporters:otlp:opentelemetry-exporter-otlp-trace"))
}
10 changes: 0 additions & 10 deletions exporters/otlp/build.gradle.kts

This file was deleted.

Loading