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

Add generateBuildSubstitutions task to bom projects. #3653

Merged

Conversation

Oberon00
Copy link
Member

@Oberon00 Oberon00 commented Sep 23, 2021

This is an alternative to #3603 (which I'd still prefer).

Since there was no agreement on renaming the projects, we can at least save ourselves the trouble of writing the substitutions for an included build by hand every time and let gradle to it in a semi-automated way.

This adds the generateBuildSubstitutions task to the bom projects, which is a convenience task that can be used to
generate a code snippet that can be copy-pasted
for use in composite builds.

Output for (stable) bom:

dependencySubstitution {
  substitute(module("io.opentelemetry:opentelemetry-api")).using(project(":api:all"))
  substitute(module("io.opentelemetry:opentelemetry-context")).using(project(":context"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-jaeger")).using(project(":exporters:jaeger"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-jaeger-proto")).using(project(":exporters:jaeger-proto"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-jaeger-thrift")).using(project(":exporters:jaeger-thrift"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-logging")).using(project(":exporters:logging"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-logging-otlp")).using(project(":exporters:logging-otlp"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-otlp")).using(project(":exporters:otlp:all"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-otlp-common")).using(project(":exporters:otlp:common"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-otlp-http-trace")).using(project(":exporters:otlp-http:trace"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-otlp-trace")).using(project(":exporters:otlp:trace"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-zipkin")).using(project(":exporters:zipkin"))
  substitute(module("io.opentelemetry:opentelemetry-extension-annotations")).using(project(":extensions:annotations"))
  substitute(module("io.opentelemetry:opentelemetry-extension-aws")).using(project(":extensions:aws"))
  substitute(module("io.opentelemetry:opentelemetry-extension-kotlin")).using(project(":extensions:kotlin"))
  substitute(module("io.opentelemetry:opentelemetry-extension-trace-propagators")).using(project(":extensions:trace-propagators"))
  substitute(module("io.opentelemetry:opentelemetry-sdk")).using(project(":sdk:all"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-common")).using(project(":sdk:common"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")).using(project(":sdk-extensions:autoconfigure-spi"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-aws")).using(project(":sdk-extensions:aws"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-jaeger-remote-sampler")).using(project(":sdk-extensions:jaeger-remote-sampler"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-resources")).using(project(":sdk-extensions:resources"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-testing")).using(project(":sdk:testing"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-trace")).using(project(":sdk:trace"))
}

Output for bom-alpha:

dependencySubstitution {
  substitute(module("io.opentelemetry:opentelemetry-api-metrics")).using(project(":api:metrics"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-otlp-http-metrics")).using(project(":exporters:otlp-http:metrics"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-otlp-metrics")).using(project(":exporters:otlp:metrics"))
  substitute(module("io.opentelemetry:opentelemetry-exporter-prometheus")).using(project(":exporters:prometheus"))
  substitute(module("io.opentelemetry:opentelemetry-extension-incubator")).using(project(":extensions:incubator"))
  substitute(module("io.opentelemetry:opentelemetry-extension-noop-api")).using(project(":extensions:noop-api"))
  substitute(module("io.opentelemetry:opentelemetry-opencensus-shim")).using(project(":opencensus-shim"))
  substitute(module("io.opentelemetry:opentelemetry-opentracing-shim")).using(project(":opentracing-shim"))
  substitute(module("io.opentelemetry:opentelemetry-proto")).using(project(":proto"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-async-processor")).using(project(":sdk-extensions:async-processor"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")).using(project(":sdk-extensions:autoconfigure"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-jfr-events")).using(project(":sdk-extensions:jfr-events"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-logging")).using(project(":sdk-extensions:logging"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-tracing-incubator")).using(project(":sdk-extensions:tracing-incubator"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-extension-zpages")).using(project(":sdk-extensions:zpages"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-metrics")).using(project(":sdk:metrics"))
  substitute(module("io.opentelemetry:opentelemetry-sdk-metrics-testing")).using(project(":sdk:metrics-testing"))
  substitute(module("io.opentelemetry:opentelemetry-semconv")).using(project(":semconv"))
}

If this approach seems right, I'll extend the README to document how to use this to create a composite build.

This is a convenience task that can be used to
generate a code snippet that can be copy-pasted
for use in composite builds.
@Oberon00 Oberon00 marked this pull request as ready for review September 23, 2021 16:02
@codecov
Copy link

codecov bot commented Sep 23, 2021

Codecov Report

Merging #3653 (e932ae1) into main (b1e1c47) will increase coverage by 1.32%.
The diff coverage is n/a.

Impacted file tree graph

@@             Coverage Diff              @@
##               main    #3653      +/-   ##
============================================
+ Coverage     87.63%   88.96%   +1.32%     
- Complexity     3678     3692      +14     
============================================
  Files           438      442       +4     
  Lines         11707    11562     -145     
  Branches       1128     1113      -15     
============================================
+ Hits          10260    10286      +26     
+ Misses         1078      898     -180     
- Partials        369      378       +9     
Impacted Files Coverage Δ
...toconfigure/OpenTelemetrySdkAutoConfiguration.java 82.85% <0.00%> (-17.15%) ⬇️
...ntelemetry/extension/trace/propagation/Common.java 66.66% <0.00%> (-8.34%) ⬇️
...trics/internal/state/SynchronousMetricStorage.java 77.77% <0.00%> (-8.16%) ⬇️
...rics/internal/state/AsynchronousMetricStorage.java 88.00% <0.00%> (-7.56%) ⬇️
...elemetry/opentracingshim/SpanContextShimTable.java 89.28% <0.00%> (-7.15%) ⬇️
...io/opentelemetry/sdk/metrics/view/Aggregation.java 70.00% <0.00%> (-2.42%) ⬇️
...telemetry/sdk/trace/export/BatchSpanProcessor.java 88.65% <0.00%> (-0.71%) ⬇️
...y/sdk/metrics/internal/state/MeterSharedState.java 91.04% <0.00%> (-0.14%) ⬇️
...k/metrics/exemplar/FixedSizeExemplarReservoir.java 75.00% <0.00%> (ø)
...try/sdk/autoconfigure/DefaultConfigProperties.java 91.35% <0.00%> (ø)
... and 19 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b1e1c47...e932ae1. Read the comment docs.

@jkwatson
Copy link
Contributor

This seems reasonable to me.

Copy link
Contributor

@anuraaga anuraaga left a comment

Choose a reason for hiding this comment

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

This seems reasonable to me.

I was just about to type the exact same letters!

@@ -59,6 +59,12 @@ nexusPublishing {
}
}

// The BOM projects register dependent tasks that actually do the generating.
tasks.register("generateBuildSubstitutions") {
Copy link
Member Author

Choose a reason for hiding this comment

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

Had to copy-paste this.

1. Run `./gradlew generateBuildSubstitutions`
2. Two files named `build/substitutions.gradle.kts` are generated in the bom and bom-alpha project's
directory, containing substitutions for the stable and alpha projects respectively.
3. Copy & paste the content of these files to a new `settings.gradle.kts` or the one where you want
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 is still cumbersome. If anyone knows a better format I could generate that could be used in a more straight-forward way, that would be appreciated.

CONTRIBUTING.md Outdated Show resolved Hide resolved
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants