diff --git a/.github/repository-settings.md b/.github/repository-settings.md index 17879d5d1d8a..b0e58c2f389f 100644 --- a/.github/repository-settings.md +++ b/.github/repository-settings.md @@ -10,6 +10,10 @@ private admin repo. - `GPG_PASSWORD` - stored in OpenTelemetry-Java 1Password - `GPG_PRIVATE_KEY` - stored in OpenTelemetry-Java 1Password +- `DEVELOCITY_ACCESS_KEY` - owned by [@trask](https://github.com/trask) + - Generated at https://develocity.opentelemetry.io > My settings > Access keys + - Format of env var is `develocity.opentelemetry.io=`, + see [docs](https://docs.gradle.com/enterprise/gradle-plugin/#via_environment_variable) - `GRADLE_PUBLISH_KEY` - `GRADLE_PUBLISH_SECRET` - `NVD_API_KEY` - stored in OpenTelemetry-Java 1Password diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index cef5d2fff7f5..d2a1eaae4f09 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -16,6 +16,8 @@ on: type: boolean required: false secrets: + DEVELOCITY_ACCESS_KEY: + required: false FLAKY_TEST_REPORTER_ACCESS_KEY: required: false @@ -43,6 +45,8 @@ jobs: cache-read-only: ${{ inputs.cache-read-only }} - name: Spotless + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} run: ./gradlew spotlessCheck ${{ inputs.no-build-cache && '--no-build-cache' || '' }} license-check: @@ -65,6 +69,8 @@ jobs: cache-read-only: ${{ inputs.cache-read-only }} - name: Generate license report + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} # with the build cache enabled occasionally produces outdated results run: ./gradlew generateLicenseReport --no-build-cache @@ -192,6 +198,8 @@ jobs: cache-read-only: ${{ inputs.cache-read-only }} - name: Build + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} run: ./gradlew check javadoc sourcesJar spdxSbom -x spotlessCheck -PskipTests=true ${{ inputs.no-build-cache && '--no-build-cache' || '' }} - name: Check for jApiCmp diffs @@ -296,6 +304,8 @@ jobs: cache-read-only: ${{ inputs.cache-read-only || matrix.test-java-version != 11 || matrix.vm != 'hotspot' }} - name: List tests + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} # "check" is needed to activate all tests for listing purposes # listTestsInPartition writes test tasks that apply to the given partition to a file named # "test-tasks.txt" and then disables all tasks (including tests) after it runs @@ -310,6 +320,8 @@ jobs: echo "test-tasks=$(cat test-tasks.txt | xargs echo | sed 's/\n/ /g')" >> $GITHUB_ENV - name: Test + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} # spotless is checked separately since it's a common source of failure run: > ./gradlew @@ -432,11 +444,15 @@ jobs: cache-read-only: ${{ inputs.cache-read-only || matrix.smoke-test-suite != 'tomcat' }} - name: Build + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} # running suite "none" compiles everything needed by smoke tests without executing any tests # --no-daemon is used to free up the memory from the build step before running the test step below run: ./gradlew :smoke-tests:test -PsmokeTestSuite=none --no-daemon ${{ inputs.no-build-cache && ' --no-build-cache' || '' }} - name: Test + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} run: ./gradlew :smoke-tests:test -PsmokeTestSuite=${{ matrix.smoke-test-suite }} ${{ inputs.no-build-cache && ' --no-build-cache' || '' }} - name: Build scan diff --git a/.github/workflows/build-daily-no-build-cache.yml b/.github/workflows/build-daily-no-build-cache.yml index 652df1d810b6..da5811002197 100644 --- a/.github/workflows/build-daily-no-build-cache.yml +++ b/.github/workflows/build-daily-no-build-cache.yml @@ -15,6 +15,7 @@ jobs: with: no-build-cache: true secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} test-latest-deps: @@ -22,6 +23,7 @@ jobs: with: no-build-cache: true secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} # muzzle is not included here because it doesn't use gradle cache anyway and so is already covered diff --git a/.github/workflows/build-daily.yml b/.github/workflows/build-daily.yml index 7d76d7c02f8e..d0c03fee0d9f 100644 --- a/.github/workflows/build-daily.yml +++ b/.github/workflows/build-daily.yml @@ -13,11 +13,13 @@ jobs: common: uses: ./.github/workflows/build-common.yml secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} test-latest-deps: uses: ./.github/workflows/reusable-test-latest-deps.yml secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} muzzle: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b79bf4e9ad9b..83ef9f7a6782 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,6 +14,7 @@ jobs: common: uses: ./.github/workflows/build-common.yml secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} test-latest-deps: @@ -23,6 +24,7 @@ jobs: if: "!startsWith(github.ref_name, 'release/')" uses: ./.github/workflows/reusable-test-latest-deps.yml secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} muzzle: @@ -80,6 +82,7 @@ jobs: - name: Build and publish artifact snapshots env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} SONATYPE_USER: ${{ secrets.SONATYPE_USER }} SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} @@ -88,6 +91,7 @@ jobs: - name: Build and publish gradle plugin snapshots env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} SONATYPE_USER: ${{ secrets.SONATYPE_USER }} SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} diff --git a/.github/workflows/reusable-test-latest-deps.yml b/.github/workflows/reusable-test-latest-deps.yml index 46566a0f9f12..552aafd50ecb 100644 --- a/.github/workflows/reusable-test-latest-deps.yml +++ b/.github/workflows/reusable-test-latest-deps.yml @@ -10,6 +10,8 @@ on: type: boolean required: false secrets: + DEVELOCITY_ACCESS_KEY: + required: false FLAKY_TEST_REPORTER_ACCESS_KEY: required: false @@ -60,6 +62,8 @@ jobs: cache-read-only: ${{ inputs.cache-read-only }} - name: List tests + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} run: > ./gradlew check -x spotlessCheck @@ -72,6 +76,8 @@ jobs: echo "test-tasks=$(cat test-tasks.txt | xargs echo | sed 's/\n/ /g')" >> $GITHUB_ENV - name: Test + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} run: > ./gradlew ${{ env.test-tasks }} diff --git a/settings.gradle.kts b/settings.gradle.kts index a961f5e4a209..c76aac3bba3d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,7 +22,7 @@ plugins { // ./gradlew :smoke-tests:images:servlet:buildLinuxTestImages pushMatrix -PsmokeTestServer=jetty // ./gradlew :smoke-tests:images:servlet:buildWindowsTestImages pushMatrix -PsmokeTestServer=jetty id("com.bmuschko.docker-remote-api") version "9.4.0" apply false - id("com.gradle.develocity") version "4.2.2" + id("com.gradle.develocity") version "4.2" } dependencyResolutionManagement { @@ -47,21 +47,67 @@ dependencyResolutionManagement { } } -develocity { - buildScan { - publishing.onlyIf { System.getenv("CI") != null } - termsOfUseUrl.set("https://gradle.com/help/legal-terms-of-use") - termsOfUseAgree.set("yes") +val develocityServer = "https://develocity.opentelemetry.io" +val isCI = System.getenv("CI") != null +val develocityAccessKey = System.getenv("DEVELOCITY_ACCESS_KEY") ?: "" - if (!gradle.startParameter.taskNames.contains("listTestsInPartition") && - !gradle.startParameter.taskNames.contains(":test-report:reportFlakyTests")) { - buildScanPublished { - File("build-scan.txt").printWriter().use { writer -> - writer.println(buildScanUri) +// if develocity access key is not given and we are in CI, then we publish to scans.gradle.com +val useScansGradleCom = isCI && develocityAccessKey.isEmpty() + +if (useScansGradleCom) { + develocity { + buildScan { + termsOfUseUrl = "https://gradle.com/help/legal-terms-of-use" + termsOfUseAgree = "yes" + uploadInBackground = !isCI + + capture { + fileFingerprints = true + } + + if (!gradle.startParameter.taskNames.contains("listTestsInPartition") && + !gradle.startParameter.taskNames.contains(":test-report:reportFlakyTests")) { + buildScanPublished { + File("build-scan.txt").printWriter().use { writer -> + writer.println(buildScanUri) + } + } + } + } + } +} else { + develocity { + server = develocityServer + buildScan { + uploadInBackground = !isCI + publishing.onlyIf { it.isAuthenticated } + + capture { + fileFingerprints = true + } + + gradle.startParameter.projectProperties["testJavaVersion"]?.let { tag(it) } + gradle.startParameter.projectProperties["testJavaVM"]?.let { tag(it) } + gradle.startParameter.projectProperties["smokeTestSuite"]?.let { + value("Smoke test suite", it) + } + + if (!gradle.startParameter.taskNames.contains("listTestsInPartition") && + !gradle.startParameter.taskNames.contains(":test-report:reportFlakyTests")) { + buildScanPublished { + File("build-scan.txt").printWriter().use { writer -> + writer.println(buildScanUri) + } } } } } + + buildCache { + remote(develocity.buildCache) { + isPush = isCI && develocityAccessKey.isNotEmpty() + } + } } rootProject.name = "opentelemetry-java-instrumentation"