opentelemetry-java-instrume.../.circleci/config.yml

318 lines
7.2 KiB
YAML

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.prefixTestTask>><< 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$/