diff --git a/.circleci/config.yml b/.circleci/config.yml index 8a040942913..6c22a21aa66 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,34 +1,118 @@ version: 2 + +defaults: &defaults + working_directory: ~/dd-trace-java + resource_class: large + docker: + - image: circleci/openjdk:8 + +test_job: &test_job + steps: + - attach_workspace: + at: . + + - run: + name: Run Tests + command: GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xmx2G -Xms512M" ./gradlew -g=gradle-home test --parallel --stacktrace --no-daemon --max-workers=3 + + - run: + name: Save Artifacts to (project-root)/build + when: always + command: .circleci/save_artifacts.sh + + - store_test_results: + path: build/test-results + + - store_artifacts: + path: build + + - persist_to_workspace: + root: . + paths: . + jobs: build: - working_directory: ~/dd-trace-java + <<: *defaults docker: - image: circleci/openjdk:8-jdk - resource_class: xlarge steps: - checkout - restore_cache: # Reset the cache approx every release - key: dd-trace-java-{{ checksum "dd-trace-java.gradle" }} + keys: + - dd-trace-java-{{ checksum "dd-trace-java.gradle" }}-{{ .Branch }}-{{ .Revision }}-verified + - dd-trace-java-{{ checksum "dd-trace-java.gradle" }}-{{ .Branch }}-{{ .Revision }} + - dd-trace-java-{{ checksum "dd-trace-java.gradle" }}-{{ .Branch }} + - dd-trace-java-{{ checksum "dd-trace-java.gradle" }} + - dd-trace-java - run: name: Build Project - command: GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xmx2G -Xms512M" ./gradlew clean compileJava compileTestJava compileGroovy compileTestGroovy shadowJar --stacktrace --no-daemon + command: GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xmx2G -Xms512M" ./gradlew -g=gradle-home clean check -x test --stacktrace --no-daemon + + - save_cache: + key: dd-trace-java-{{ checksum "dd-trace-java.gradle" }}-{{ .Branch }}-{{ .Revision }} + paths: gradle-home + background: true + + - persist_to_workspace: + root: . + paths: . + + test_7: + <<: *defaults + docker: + - image: openjdk:7-jdk + + steps: + - attach_workspace: + at: . + + - run: + name: Fix EC parameters error # (ref https://github.com/travis-ci/travis-ci/issues/8503) + command: | + wget "https://downloads.bouncycastle.org/java/bcprov-ext-jdk15on-158.jar" -O "${JAVA_HOME}"/jre/lib/ext/bcprov-ext-jdk15on-158.jar && \ + perl -pi.bak -e 's/^(security\.provider\.)([0-9]+)/$1.($2+1)/ge' /etc/java-7-openjdk/security/java.security && \ + echo "security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider" | tee -a /etc/java-7-openjdk/security/java.security - run: name: Run Tests - command: GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xmx2G -Xms512M" ./gradlew check --parallel --stacktrace --no-daemon --max-workers=3 + command: GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xmx2G -Xms512M" ./gradlew -g=gradle-home test --parallel --stacktrace --no-daemon --max-workers=3 - run: - name: Verify Version Scan - command: ./gradlew verifyVersionScan --parallel --stacktrace --no-daemon + name: Save Artifacts to (project-root)/build + when: always + command: .circleci/save_artifacts.sh - - save_cache: - paths: - - ~/.gradle - key: dd-trace-java-{{ checksum "dd-trace-java.gradle" }} + - store_test_results: + path: build/test-results + + - store_artifacts: + path: build + + test_8: + <<: *defaults + <<: *test_job + docker: + - image: circleci/openjdk:8-jdk + +# test_9: +# <<: *defaults +# <<: *test_job +# docker: +# - image: circleci/openjdk:9-jdk + + scan_and_save: + <<: *defaults + steps: + - attach_workspace: + at: . + + - run: + name: Verify Version Scan + command: ./gradlew -g=gradle-home verifyVersionScan --parallel --stacktrace --no-daemon - run: name: Save Artifacts to (project-root)/build @@ -41,6 +125,16 @@ jobs: - store_artifacts: path: build + - save_cache: + key: dd-trace-java-{{ checksum "dd-trace-java.gradle" }}-{{ .Branch }}-{{ .Revision }}-verified + paths: gradle-home + + deploy: + <<: *defaults + steps: + - attach_workspace: + at: . + - run: name: Decode Signing Key command: echo $PGP_KEY_FILE | base64 --decode > /home/circleci/dd-trace-java/.circleci/secring.gpg @@ -49,7 +143,7 @@ jobs: name: Publish master to Artifactory command: | if [ "${CIRCLE_BRANCH}" == "master" ]; then - ./gradlew -Psigning.keyId=${PGP_KEY_ID} \ + ./gradlew -g=gradle-home -Psigning.keyId=${PGP_KEY_ID} \ -Psigning.password=${PGP_KEY_PASS} \ -Psigning.secretKeyRingFile=/home/circleci/dd-trace-java/.circleci/secring.gpg \ -PbintrayUser=${BINTRAY_USER} \ @@ -57,3 +151,33 @@ jobs: -PbuildInfo.build.number=${CIRCLE_BUILD_NUM} \ artifactoryPublish --max-workers=1 --stacktrace --no-daemon fi + +workflows: + version: 2 + build_test_deploy: + jobs: + - build + + - test_7: + requires: + - build + - test_8: + requires: + - build +# - test_9: +# requires: +# - build + + - scan_and_save: + requires: + - build + - test_7 + - test_8 +# - test_9 + + - deploy: + requires: + - scan_and_save + filters: + branches: + only: master diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index f93d1a2bd34..a3243fac23f 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -12,6 +12,6 @@ dependencies { compile group: 'org.eclipse.aether', name: 'aether-transport-http', version: '1.1.0' compile group: 'org.apache.maven', name: 'maven-aether-provider', version: '3.3.9' - compile group: 'com.google.guava', name: 'guava', version: '23.0' + compile group: 'com.google.guava', name: 'guava', version: '20.0' compile group: 'org.ow2.asm', name: 'asm-all', version: '5.2' } diff --git a/dd-java-agent-ittests/dd-java-agent-ittests.gradle b/dd-java-agent-ittests/dd-java-agent-ittests.gradle index 99e8c5ade44..feb5382939f 100644 --- a/dd-java-agent-ittests/dd-java-agent-ittests.gradle +++ b/dd-java-agent-ittests/dd-java-agent-ittests.gradle @@ -5,6 +5,17 @@ description = 'dd-java-agent-ittests' evaluationDependsOn(':dd-java-agent:tooling') compileTestJava.dependsOn tasks.getByPath(':dd-java-agent:tooling:testClasses') +if (!JavaVersion.current().isJava8Compatible()) { + sourceSets { + test { + groovy { + // These classes use Ratpack which requires Java 8. + exclude '**/TestHttpServer.groovy', '**/ApacheHttpClientTest.groovy' + } + } + } +} + dependencies { testCompile project(':dd-trace-api') testCompile project(':dd-trace-ot') @@ -20,10 +31,10 @@ dependencies { testCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2' testCompile group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2' // run embeded mongodb for integration testing - testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '2.0.0' + testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '1.50.5' - testCompile group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.1.v20170120' - testCompile group: 'org.eclipse.jetty', name: 'jetty-servlet', version: '9.4.1.v20170120' + testCompile group: 'org.eclipse.jetty', name: 'jetty-server', version: '8.2.0.v20160908' + testCompile group: 'org.eclipse.jetty', name: 'jetty-servlet', version: '8.2.0.v20160908' testCompile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: '8.0.41' testCompile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '8.0.41' // note: aws transitively pulls in apache-httpclient, which we also test against: @@ -39,8 +50,8 @@ dependencies { // JDBC tests: testCompile group: 'com.h2database', name: 'h2', version: '1.4.196' - testCompile group: 'org.hsqldb', name: 'hsqldb', version: '2.4.0' - testCompile group: 'org.apache.derby', name: 'derby', version: '10.14.1.0' + testCompile group: 'org.hsqldb', name: 'hsqldb', version: '2.3.+' + testCompile group: 'org.apache.derby', name: 'derby', version: '10.12.1.1' } test { diff --git a/dd-java-agent/dd-java-agent.gradle b/dd-java-agent/dd-java-agent.gradle index b59e0479701..5597b1757ce 100644 --- a/dd-java-agent/dd-java-agent.gradle +++ b/dd-java-agent/dd-java-agent.gradle @@ -86,7 +86,7 @@ shadowJar { } dependencies { - exclude(dependency('org.projectlombok:lombok:1.16.18')) + exclude(dependency('org.projectlombok:lombok:1.16.20')) } } diff --git a/dd-java-agent/instrumentation/datastax-cassandra-3.2/datastax-cassandra-3.2.gradle b/dd-java-agent/instrumentation/datastax-cassandra-3.2/datastax-cassandra-3.2.gradle index 55617fbefde..ec7c07bfc03 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra-3.2/datastax-cassandra-3.2.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra-3.2/datastax-cassandra-3.2.gradle @@ -31,6 +31,17 @@ versionScan { apply from: "${rootDir}/gradle/java.gradle" +if (!JavaVersion.current().isJava8Compatible()) { + sourceSets { + test { + groovy { + // These classes use Cassandra 3 which requires Java 8. + exclude '**/CassandraClientTest.groovy' + } + } + } +} + dependencies { compileOnly group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.2.0' compile('io.opentracing.contrib:opentracing-cassandra-driver:0.0.3-RC1') { diff --git a/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle b/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle index 1a930404933..95b0379a462 100644 --- a/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle +++ b/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle @@ -14,6 +14,17 @@ versionScan { apply from: "${rootDir}/gradle/java.gradle" +if (!JavaVersion.current().isJava8Compatible()) { + sourceSets { + test { + groovy { + // These classes use Ratpack which requires Java 8. + exclude '**/OkHttp3Test.groovy' + } + } + } +} + dependencies { compileOnly group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.0' compile('io.opentracing.contrib:opentracing-okhttp3:0.1.0-RC1') { diff --git a/dd-trace-ot/dd-trace-ot.gradle b/dd-trace-ot/dd-trace-ot.gradle index fa14e467015..44d4b16a2b0 100644 --- a/dd-trace-ot/dd-trace-ot.gradle +++ b/dd-trace-ot/dd-trace-ot.gradle @@ -16,6 +16,17 @@ whitelistedInstructionClasses += whitelistedBranchClasses += [ 'datadog.trace.api.DDTags', ] +if (!JavaVersion.current().isJava8Compatible()) { + sourceSets { + test { + groovy { + // These classes use Ratpack which requires Java 8. + exclude 'datadog/trace/api/writer/DDApiTest.groovy' + } + } + } +} + dependencies { compile project(':dd-trace-api') compile deps.opentracing diff --git a/examples/dropwizard-mongo-client/gradle/wrapper/gradle-wrapper.properties b/examples/dropwizard-mongo-client/gradle/wrapper/gradle-wrapper.properties index 702c4b68b8c..0e680f3759f 100644 --- a/examples/dropwizard-mongo-client/gradle/wrapper/gradle-wrapper.properties +++ b/examples/dropwizard-mongo-client/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip diff --git a/examples/rest-spark/gradle/wrapper/gradle-wrapper.properties b/examples/rest-spark/gradle/wrapper/gradle-wrapper.properties index 702c4b68b8c..0e680f3759f 100644 --- a/examples/rest-spark/gradle/wrapper/gradle-wrapper.properties +++ b/examples/rest-spark/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip diff --git a/examples/spring-boot-jdbc/gradle/wrapper/gradle-wrapper.properties b/examples/spring-boot-jdbc/gradle/wrapper/gradle-wrapper.properties index 702c4b68b8c..0e680f3759f 100644 --- a/examples/spring-boot-jdbc/gradle/wrapper/gradle-wrapper.properties +++ b/examples/spring-boot-jdbc/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip diff --git a/gradle/checkstyle.gradle b/gradle/checkstyle.gradle index 5e723d47c87..b5bdf0fc4c1 100644 --- a/gradle/checkstyle.gradle +++ b/gradle/checkstyle.gradle @@ -49,8 +49,15 @@ tasks.withType(Test) { mustRunAfter checkstyleTasks } -apply plugin: 'com.github.sherter.google-java-format' +if (!JavaVersion.current().isJava9Compatible()) { + // Verification seems broken on Java 9. + apply plugin: 'com.github.sherter.google-java-format' -tasks.withType(Checkstyle) { - mustRunAfter verifyGoogleJavaFormat + googleJavaFormat { + exclude 'gradle-home' + } + + tasks.withType(Checkstyle) { + mustRunAfter verifyGoogleJavaFormat + } } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 589dae951e1..408c10c855c 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -6,7 +6,7 @@ ext { opentracing: '0.31.0', slf4j : "1.7.25", - guava : "23.0", + guava : "20.0", jackson : "2.9.3", spock : "1.0-groovy-$spockGroovyVer", diff --git a/gradle/java.gradle b/gradle/java.gradle index d99e1227c68..bddd35e2cfe 100644 --- a/gradle/java.gradle +++ b/gradle/java.gradle @@ -7,8 +7,8 @@ targetCompatibility = 1.7 apply plugin: "io.franzbecker.gradle-lombok" lombok { // optional: values below are the defaults - version = "1.16.18" - sha256 = "9d957f572386b9e257093a45b148f9b411cff80d9efd55eaf6fca27002d2e4d9" + version = "1.16.20" + sha256 = "c5178b18caaa1a15e17b99ba5e4023d2de2ebc18b58cde0f5a04ca4b31c10e6d" } apply plugin: "eclipse" @@ -36,7 +36,7 @@ repositories { dependencies { testCompile deps.junit - testCompile group: 'org.assertj', name: 'assertj-core', version: '3.6.2' + testCompile group: 'org.assertj', name: 'assertj-core', version: '2.9.+' testCompile group: 'org.mockito', name: 'mockito-core', version: '2.7.22' testCompile deps.spock diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 702c4b68b8c..0e680f3759f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip diff --git a/settings.gradle b/settings.gradle index c06825e2495..c54b760d5a2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,19 +2,11 @@ rootProject.name = 'dd-trace-java' include ':dd-trace-ot' include ':dd-java-agent' -include ':dd-java-agent:benchmark' -include ':dd-java-agent:benchmark-integration' -include ':dd-java-agent:benchmark-integration:jetty-perftest' include ':dd-java-agent:testing' include ':dd-java-agent:tooling' include ':dd-java-agent-ittests' include ':dd-trace-api' -// examples -include ':examples:dropwizard-mongo-client' -include ':examples:spring-boot-jdbc' -include ':examples:rest-spark' - // instrumentation: include ':dd-java-agent:instrumentation:apache-httpclient-4.3' include ':dd-java-agent:instrumentation:aws-sdk' @@ -30,6 +22,19 @@ include ':dd-java-agent:instrumentation:servlet-3' include ':dd-java-agent:instrumentation:spring-web' include ':dd-java-agent:instrumentation:trace-annotation' + +if (JavaVersion.current().isJava8Compatible()) { + // benchmark + include ':dd-java-agent:benchmark' + include ':dd-java-agent:benchmark-integration' + include ':dd-java-agent:benchmark-integration:jetty-perftest' + + // examples + include ':examples:dropwizard-mongo-client' + include ':examples:spring-boot-jdbc' + include ':examples:rest-spark' +} + def setBuildFile(project) { project.buildFileName = "${project.name}.gradle" project.children.each {