Skip to content
Open
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
8 changes: 6 additions & 2 deletions .github/workflows/run-system-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,18 @@ jobs:
JAVA_11_HOME=$JAVA_HOME_11_X64 \
JAVA_17_HOME=$JAVA_HOME_17_X64 \
JAVA_21_HOME=$JAVA_HOME_21_X64 \
./gradlew clean :dd-java-agent:shadowJar \
./gradlew clean :dd-java-agent:shadowJar :dd-openfeature:jar \
--build-cache --parallel --stacktrace --no-daemon --max-workers=4
mkdir -p workspace/system-tests-binaries
cp workspace/dd-java-agent/build/libs/dd-java-agent-*.jar \
workspace/dd-openfeature/build/libs/dd-openfeature-*.jar \
workspace/system-tests-binaries/

- name: Upload artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: binaries
path: workspace/dd-java-agent/build/libs/
path: workspace/system-tests-binaries/

main:
needs:
Expand Down
10 changes: 6 additions & 4 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ build:
script:
- if [ $CI_PIPELINE_SOURCE == "schedule" ] ; then ./gradlew resolveAndLockAll --write-locks $GRADLE_ARGS; fi
- ./gradlew --version
- ./gradlew clean :dd-java-agent:shadowJar :dd-java-agent:check :dd-trace-api:jar :dd-trace-ot:shadowJar :products:feature-flagging:feature-flagging-api:jar -PskipTests -x spotlessCheck $GRADLE_ARGS
- ./gradlew clean :dd-java-agent:shadowJar :dd-java-agent:check :dd-trace-api:jar :dd-trace-ot:shadowJar :dd-openfeature:jar -PskipTests -x spotlessCheck $GRADLE_ARGS
- echo UPSTREAM_TRACER_VERSION=$(java -jar workspace/dd-java-agent/build/libs/*.jar) >> upstream.env
- echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env
- echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env
Expand All @@ -364,7 +364,7 @@ build:
- 'workspace/dd-java-agent/build/libs/*.jar'
- 'workspace/dd-trace-api/build/libs/*.jar'
- 'workspace/dd-trace-ot/build/libs/*.jar'
- 'workspace/products/feature-flagging/feature-flagging-api/build/libs/*.jar'
- 'workspace/dd-openfeature/build/libs/*.jar'
- 'upstream.env'
- '.gradle/daemon/*/*.out.log'
reports:
Expand Down Expand Up @@ -481,11 +481,11 @@ publish-artifacts-to-s3:
- aws s3 cp workspace/dd-java-agent/build/libs/dd-java-agent-${VERSION}.jar s3://dd-trace-java-builds/${CI_COMMIT_REF_NAME}/dd-java-agent.jar
- aws s3 cp workspace/dd-trace-api/build/libs/dd-trace-api-${VERSION}.jar s3://dd-trace-java-builds/${CI_COMMIT_REF_NAME}/dd-trace-api.jar
- aws s3 cp workspace/dd-trace-ot/build/libs/dd-trace-ot-${VERSION}.jar s3://dd-trace-java-builds/${CI_COMMIT_REF_NAME}/dd-trace-ot.jar
- aws s3 cp workspace/products/feature-flagging/feature-flagging-api/build/libs/dd-openfeature-${VERSION}.jar s3://dd-trace-java-builds/${CI_COMMIT_REF_NAME}/dd-openfeature.jar
- aws s3 cp workspace/dd-openfeature/build/libs/dd-openfeature-${VERSION}.jar s3://dd-trace-java-builds/${CI_COMMIT_REF_NAME}/dd-openfeature.jar
- aws s3 cp workspace/dd-java-agent/build/libs/dd-java-agent-${VERSION}.jar s3://dd-trace-java-builds/${CI_PIPELINE_ID}/dd-java-agent.jar
- aws s3 cp workspace/dd-trace-api/build/libs/dd-trace-api-${VERSION}.jar s3://dd-trace-java-builds/${CI_PIPELINE_ID}/dd-trace-api.jar
- aws s3 cp workspace/dd-trace-ot/build/libs/dd-trace-ot-${VERSION}.jar s3://dd-trace-java-builds/${CI_PIPELINE_ID}/dd-trace-ot.jar
- aws s3 cp workspace/products/feature-flagging/feature-flagging-api/build/libs/dd-openfeature-${VERSION}.jar s3://dd-trace-java-builds/${CI_PIPELINE_ID}/dd-openfeature.jar
- aws s3 cp workspace/dd-openfeature/build/libs/dd-openfeature-${VERSION}.jar s3://dd-trace-java-builds/${CI_PIPELINE_ID}/dd-openfeature.jar
- |
cat << EOF > links.json
{
Expand Down Expand Up @@ -583,6 +583,7 @@ validate_build:
- cp workspace/dd-java-agent/build/libs/*.jar reference-artifacts/
- cp workspace/dd-trace-api/build/libs/*.jar reference-artifacts/
- cp workspace/dd-trace-ot/build/libs/*.jar reference-artifacts/
- cp workspace/dd-openfeature/build/libs/*.jar reference-artifacts/
# Scheduled builds refresh dependency locks before creating the reference artifacts.
# Refresh them here as well so the candidate uses the same dependency resolution.
- if [ $CI_PIPELINE_SOURCE == "schedule" ] ; then ./gradlew resolveAndLockAll --write-locks $GRADLE_ARGS; fi
Expand All @@ -596,6 +597,7 @@ validate_build:
cp workspace/dd-java-agent/build/libs/*.jar check_reports/jar-comparison-artifacts/candidate/
cp workspace/dd-trace-api/build/libs/*.jar check_reports/jar-comparison-artifacts/candidate/
cp workspace/dd-trace-ot/build/libs/*.jar check_reports/jar-comparison-artifacts/candidate/
cp workspace/dd-openfeature/build/libs/*.jar check_reports/jar-comparison-artifacts/candidate/
exit 1
fi
after_script:
Expand Down

This file was deleted.

This file was deleted.

51 changes: 44 additions & 7 deletions dd-openfeature/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,29 @@ import me.champeau.gradle.japicmp.JapicmpTask

plugins {
`java-library`
idea
id("dd-trace-java.conventions.java")
id("dd-trace-java.module.distributable.api")
id("dd-trace-java.version-file")
id("dd-trace-java.jmh-conventions")
}

description = "Datadog OpenFeature provider SDK."

configure<TestJvmConstraintsExtension> {
minJavaVersion.set(JavaVersion.VERSION_11)
// Set both JAR and Maven artifact name
val openFeatureArtifactId = "dd-openfeature"
base {
archivesName.set(openFeatureArtifactId)
}

idea {
module {
jdkName = "11"
publishing {
publications.withType<MavenPublication>().configureEach {
artifactId = openFeatureArtifactId
}
}

configure<TestJvmConstraintsExtension> {
minJavaVersion.set(JavaVersion.VERSION_11)
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
Expand All @@ -45,6 +50,16 @@ tasks.withType<JavaCompile>().configureEach {
configureCompiler(JavaVersion.VERSION_11)
}

tasks.withType<Javadoc>().configureEach {
javadocTool = javaToolchains.javadocToolFor(java.toolchain)
}

tasks.named<Jar>("jar") {
manifest {
attributes("Automatic-Module-Name" to "com.datadog.openfeature")
}
}

// The agent bridge SPI versions, with the first SDK release shipping each of them. A released
// version is frozen (only default methods can be added): check it against that release.
// TODO Set the v1 baseline once the first SDK release with the agent bridge is published.
Expand All @@ -71,3 +86,25 @@ bridgeSpiBaselines.forEach { (spi, baseline) ->
}
}
}

// The public API, outside the internal packages, must stay compatible with the previous release:
// each release keeps the API of all the previous ones. The previous release is the latest one
// before the version being built, so release branches compare against their own line.
val publicApiBaseline = "(,${version.toString().removeSuffix("-SNAPSHOT")})"
val japicmpPublicApi = tasks.register<JapicmpTask>("japicmpPublicApi") {
description = "Checks the public API stays compatible with the previous dd-openfeature release."
val baselineSdk = "com.datadoghq:dd-openfeature:$publicApiBaseline"
oldArchives.from(configurations.detachedConfiguration(dependencies.create("$baselineSdk@jar")))
oldClasspath.from(configurations.detachedConfiguration(dependencies.create(baselineSdk)))
newArchives.from(tasks.named<Jar>("jar"))
newClasspath.from(configurations.named("runtimeClasspath"))
packageIncludes.addAll("com.datadog.openfeature", "datadog.trace.api.openfeature")
failOnModification.set(true)
failOnSourceIncompatibility.set(true)
// TODO Remove once the baseline is 1.69.0 or later: earlier releases link the agent bootstrap API.
ignoreMissingClasses.set(true)
txtOutputFile.set(layout.buildDirectory.file("reports/japicmp/public-api.txt"))
}
tasks.named("check") {
dependsOn(japicmpPublicApi)
}
2 changes: 1 addition & 1 deletion dd-openfeature/gradle.lockfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhRuntimeClasspa
org.apache.commons:commons-text:1.15.0=spotbugs
org.apache.logging.log4j:log4j-api:2.26.1=spotbugs
org.apache.logging.log4j:log4j-core:2.26.1=spotbugs
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath
org.apiguardian:apiguardian-api:1.1.2=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-ant:3.0.23=codenarc
org.codehaus.groovy:groovy-docgenerator:3.0.23=codenarc
org.codehaus.groovy:groovy-groovydoc:3.0.23=codenarc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.datadog.openfeature.internal.flagevaluation.FlagEvaluationPipeline;
import com.datadog.openfeature.internal.ufc.ServerConfiguration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
Expand Down Expand Up @@ -258,8 +259,13 @@ void stop() {
}

private void onConfiguration(@Nullable final ServerConfiguration configuration) {
this.configuration = configuration;
for (final Consumer<ServerConfiguration> listener : this.listeners) {
final Iterator<Consumer<ServerConfiguration>> snapshot;
synchronized (this.listeners) {
this.configuration = configuration;
snapshot = this.listeners.iterator();
}
while (snapshot.hasNext()) {
final Consumer<ServerConfiguration> listener = snapshot.next();
try {
listener.accept(configuration);
} catch (final RuntimeException e) {
Expand All @@ -274,10 +280,13 @@ private void onConfiguration(@Nullable final ServerConfiguration configuration)
* @param listener the listener to add.
*/
public void addConfigurationListener(final Consumer<ServerConfiguration> listener) {
this.listeners.add(listener);
final ServerConfiguration current = this.configuration;
if (current != null) {
listener.accept(current);
// Keep registration and replay atomic with notification snapshots.
synchronized (this.listeners) {
this.listeners.add(listener);
final ServerConfiguration current = this.configuration;
if (current != null) {
listener.accept(current);
}
}
}

Expand Down
Loading
Loading