version: 2.1 defaults: &defaults working_directory: ~/dd-trace-java resource_class: xlarge docker: - image: &default_container datadog/dd-trace-java-docker-build:latest environment: JAVA_HOME: /usr/local/openjdk-11 cache_keys: &cache_keys keys: # Rev the version when the cache gets too big - trace-java-v1-{{ .Branch }}-{{ .Revision }} - trace-java-v1-{{ .Branch }} parameters: gradle_flags: type: string default: "--stacktrace --no-daemon" jobs: build: <<: *defaults steps: - checkout - restore_cache: <<: *cache_keys - run: name: Build Project command: >- GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1G -Xms64M' -Dota.forkedMaxHeapSize=1G -Dota.forkedMinHeapSize=64M" ./gradlew clean build shadowJar -x test << pipeline.parameters.gradle_flags >> --max-workers=8 - run: name: Collect Libs when: always command: .circleci/collect_libs.sh - store_artifacts: path: ./libs - run: name: Collect Reports when: on_fail command: .circleci/collect_reports.sh - store_artifacts: path: ./reports - persist_to_workspace: root: . paths: - .gradle - workspace - save_cache: key: trace-java-v1-{{ .Branch }}-{{ .Revision }} paths: ~/.gradle default_test_job: &default_test_job <<: *defaults docker: - image: *default_container environment: JAVA_HOME: /usr/local/openjdk-11 # This is used by spymemcached instrumentation tests - image: memcached # This is used by rabbitmq instrumentation tests - image: rabbitmq parameters: testTask: type: string prefixTestTask: default: false type: boolean steps: - checkout - attach_workspace: at: . - restore_cache: <<: *cache_keys - run: name: Run Tests command: >- GRADLE_OPTS="-Dota.forkedMaxHeapSize=4G -Dota.forkedMinHeapSize=64M" ./gradlew <<# parameters.prefixTestTask>>testJava<><< parameters.testTask >> << pipeline.parameters.gradle_flags >> --max-workers=6 - run: name: Collect Reports when: on_fail command: .circleci/collect_reports.sh - store_artifacts: path: ./reports - run: name: Collect Test Results when: always command: .circleci/collect_results.sh - store_test_results: path: ./results muzzle: <<: *defaults parallelism: 8 steps: - checkout # We are not running with a cache here because it gets very big and ends up taking more time # restoring/saving than the actual increase in time it takes just downloading the artifacts each time. - run: name: Gather muzzle tasks command: SKIP_BUILDSCAN="true" ./gradlew writeMuzzleTasksToFile --stacktrace --no-daemon - run: name: Verify Muzzle command: >- SKIP_BUILDSCAN="true" GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx4G -Xms64M' -Dota.forkedMaxHeapSize=4G -Dota.forkedMinHeapSize=64M" ./gradlew `circleci tests split workspace/build/muzzleTasks | xargs` --parallel --stacktrace --no-daemon --max-workers=16 publish: &publish <<: *defaults steps: - checkout - attach_workspace: at: . - restore_cache: <<: *cache_keys - deploy: name: Publish master to Artifactory command: | ./gradlew \ -PbuildInfo.build.number=${CIRCLE_BUILD_NUM} \ snapshot --max-workers=1 --build-cache --stacktrace --no-daemon publish_master: <<: *publish release: <<: *defaults steps: - checkout - attach_workspace: at: . - restore_cache: <<: *cache_keys - run: command: ./gradlew -Prelease.useLastTag=true final no_output_timeout: 6h patch_release: <<: *defaults steps: - checkout - run: | if [[ $(git tag --points-at HEAD | grep "^v") ]]; then echo "Don't make patch release on commit which already has version tag" circleci-agent step halt fi - attach_workspace: at: . - restore_cache: <<: *cache_keys - run: ./gradlew -Prelease.scope=patch final workflows: build_test_deploy: jobs: - build: filters: tags: only: /.*/ - default_test_job: requires: - build prefixTestTask: true name: test_<< matrix.testTask >> matrix: parameters: testTask: ["8"] filters: tags: only: /.*/ - default_test_job: requires: - build name: test_latest testTask: latestDepTest filters: tags: only: /.*/ - muzzle: requires: - build filters: branches: ignore: master - publish_master: requires: - test_8 - test_latest - muzzle filters: branches: only: master tags: ignore: /.*/ nightly_snapshot: triggers: - schedule: cron: "0 0 * * *" filters: branches: only: - depends-on-otel-java-snapshot jobs: - default_test_job: name: test_11 testTask: test jacocoTestReport jacocoTestCoverageVerification release: jobs: - release: filters: branches: ignore: /.*/ tags: # Only for major and minor releases only: /^v.*\.0$/ patch_release: jobs: - build: filters: branches: only: /\d+\.\d+\.x$/ - default_test_job: requires: - build prefixTestTask: true name: test_<< matrix.testTask >> matrix: parameters: testTask: ["7", "8", "14"] filters: branches: only: /\d+\.\d+\.x$/ - default_test_job: requires: - build name: test_11 testTask: test jacocoTestReport jacocoTestCoverageVerification filters: branches: only: /\d+\.\d+\.x$/ - default_test_job: requires: - build name: test_latest testTask: latestDepTest filters: branches: only: /\d+\.\d+\.x$/ - muzzle: requires: - build filters: branches: only: /\d+\.\d+\.x$/ - patch_release: requires: - test_7 - test_8 - test_11 - test_14 - test_latest - muzzle filters: branches: only: /\d+\.\d+\.x$/