name: Reusable - Common on: workflow_call: inputs: cache-read-only: type: boolean required: false no-build-cache: type: boolean required: false max-test-retries: type: string required: false skip-openj9-tests: type: boolean required: false skip-windows-smoke-tests: type: boolean required: false secrets: FLAKY_TEST_REPORTER_ACCESS_KEY: required: false permissions: contents: read jobs: spotless: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version - name: Setup Gradle uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: cache-read-only: ${{ inputs.cache-read-only }} - name: Spotless run: ./gradlew spotlessCheck ${{ inputs.no-build-cache && '--no-build-cache' || '' }} license-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version - name: Setup Gradle uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: cache-read-only: ${{ inputs.cache-read-only }} - name: Generate license report run: ./gradlew generateLicenseReport ${{ inputs.no-build-cache && '--no-build-cache' || '' }} - name: Check licenses run: | # add any untracked folders that may have been added by generateLicenseReport git add licenses if [[ $(git diff --cached --shortstat licenses) == "" ]] then echo "Licenses are up-to-date." else echo "Licenses are not up-to-date, please run './gradlew generateLicenseReport --no-build-cache' locally and commit." echo git diff --cached --stat licenses echo git diff --cached licenses exit 1 fi # this is needed because we don't auto-update dependencies in instrumentation/** # and so we want to enforce that all "real" dependencies are dependency managed extra-dependency-management-enforcement: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Dependency check run: | set +e grep '^ implementation(".*:.*:[0-9].*")\|^ api(".*:.*:[0-9].*")' \ --include=\*.kts \ -r instrumentation \ | grep -v testing/build.gradle.kts \ | grep -v com.azure:azure-core-tracing-opentelemetry \ | grep -v com.couchbase.client:tracing-opentelemetry \ > dependencies.txt if [ -s dependencies.txt ]; then echo unmanaged dependencies found echo cat dependencies.txt exit 1 fi check-javaagent-suppression-keys: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - run: .github/scripts/check-javaagent-suppression-keys.sh check-latest-dep-test-overrides: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - run: .github/scripts/check-latest-dep-test-overrides.sh build: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version - name: Increase gradle daemon heap size run: | sed -i "s/org.gradle.jvmargs=/org.gradle.jvmargs=-Xmx3g /" gradle.properties - name: Setup Gradle uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: cache-read-only: ${{ inputs.cache-read-only }} - name: Build # javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/ run: ./gradlew check spdxSbom -x javadoc -x spotlessCheck -PskipTests=true ${{ inputs.no-build-cache && '--no-build-cache' || '' }} - name: Check for jApiCmp diffs run: | # need to "git add" in case any generated files did not already exist git add docs/apidiffs if git diff --cached --quiet then echo "No diff detected." else echo "Diff detected - did you run './gradlew jApiCmp'?" git diff --cached --name-only git diff --cached exit 1 fi - name: Upload agent jar uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: opentelemetry-javaagent.jar path: javaagent/build/libs/opentelemetry-javaagent-*-SNAPSHOT.jar if-no-files-found: ignore - name: Collect SBOMs run: | mkdir sboms cp javaagent/build/spdx/*.spdx.json sboms - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 name: Upload SBOMs with: name: opentelemetry-java-instrumentation-SBOM.zip path: "sboms/*.json" test: name: test${{ matrix.test-partition }} (${{ matrix.test-java-version }}, ${{ matrix.vm }}) runs-on: ubuntu-latest strategy: matrix: test-java-version: - 8 - 11 - 17 - 21 - 23 vm: - hotspot - openj9 test-partition: - 0 - 1 - 2 - 3 exclude: - vm: ${{ inputs.skip-openj9-tests && 'openj9' || '' }} fail-fast: false steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - id: setup-test-java name: Set up JDK ${{ matrix.test-java-version }}-${{ matrix.vm }} for running tests uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: # using zulu because new releases get published quickly distribution: ${{ matrix.vm == 'hotspot' && 'zulu' || 'adopt-openj9'}} java-version: ${{ matrix.test-java-version }} - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version # vaadin 14 tests fail with node 18 - name: Set up Node uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: 16 # vaadin tests use pnpm - name: Cache pnpm modules uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ~/.pnpm-store key: ${{ runner.os }}-test-cache-pnpm-modules - name: Start deadlock detector run: .github/scripts/deadlock-detector.sh - name: Setup Gradle uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: # only push cache for one matrix option since github action cache space is limited cache-read-only: ${{ inputs.cache-read-only || matrix.test-java-version != 11 || matrix.vm != 'hotspot' }} - name: List tests # "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 run: > ./gradlew check -x spotlessCheck listTestsInPartition -PtestPartition=${{ matrix.test-partition }} - name: Set test tasks run: | echo "test-tasks=$(cat test-tasks.txt | xargs echo | sed 's/\n/ /g')" >> $GITHUB_ENV - name: Test # spotless is checked separately since it's a common source of failure run: > ./gradlew ${{ env.test-tasks }} -PtestJavaVersion=${{ matrix.test-java-version }} -PtestJavaVM=${{ matrix.vm }} -Porg.gradle.java.installations.paths=${{ steps.setup-test-java.outputs.path }} -Porg.gradle.java.installations.auto-download=false ${{ inputs.no-build-cache && ' --no-build-cache' || '' }} ${{ inputs.max-test-retries && format(' -PmaxTestRetries={0}', inputs.max-test-retries) || '' }} - name: Build scan if: ${{ !cancelled() && hashFiles('build-scan.txt') != '' }} run: cat build-scan.txt - name: Get current job url id: jobs if: ${{ !cancelled() }} uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: matrix: ${{ toJson(matrix) }} with: result-encoding: string script: | const { data: workflow_run } = await github.rest.actions.listJobsForWorkflowRun({ owner: context.repo.owner, repo: context.repo.repo, run_id: context.runId, per_page: 100 }); const matrix = JSON.parse(process.env.matrix); const job_name = `common / test${ matrix['test-partition'] } (${ matrix['test-java-version'] }, ${ matrix.vm })`; return workflow_run.jobs.find((job) => job.name === job_name).html_url; - name: Flaky test report if: ${{ !cancelled() }} env: FLAKY_TEST_REPORTER_ACCESS_KEY: ${{ secrets.FLAKY_TEST_REPORTER_ACCESS_KEY }} JOB_URL: ${{ steps.jobs.outputs.result }} run: | if [ -s build-scan.txt ]; then export BUILD_SCAN_URL=$(cat build-scan.txt) fi ./gradlew :test-report:reportFlakyTests - name: Upload deadlock detector artifacts if any if: failure() uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: deadlock-detector-test-${{ matrix.test-java-version }}-${{ matrix.vm }}-${{ matrix.test-partition }} path: /tmp/deadlock-detector-* if-no-files-found: ignore - name: Upload jvm crash dump files if any if: failure() uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: javacore-test-${{ matrix.test-java-version }}-${{ matrix.test-partition }} path: | **/hs_err_pid*.log **/javacore.*.txt **/Snap.*.trc **/core.*.dmp **/jitdump.*.dmp if-no-files-found: ignore smoke-test: runs-on: ${{ matrix.os }} strategy: matrix: os: - windows-latest - ubuntu-latest smoke-test-suite: - jetty - liberty - payara - tomcat - tomee - websphere - wildfly - other exclude: - os: ${{ inputs.skip-windows-smoke-tests && 'windows-latest' || '' }} - os: windows-latest smoke-test-suite: websphere fail-fast: false steps: - name: Support long paths run: git config --system core.longpaths true if: matrix.os == 'windows-latest' - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version - name: Set up Gradle cache uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: # only push cache for one matrix option per OS since github action cache space is limited cache-read-only: ${{ inputs.cache-read-only || matrix.smoke-test-suite != 'tomcat' }} - name: Build # running suite "none" compiles everything needed by smoke tests without executing any tests run: ./gradlew :smoke-tests:test -PsmokeTestSuite=none ${{ inputs.no-build-cache && ' --no-build-cache' || '' }} - name: Test run: ./gradlew :smoke-tests:test -PsmokeTestSuite=${{ matrix.smoke-test-suite }}${{ inputs.no-build-cache && ' --no-build-cache' || '' }} - name: Upload jvm crash dump files if any if: failure() uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: javacore-smoke-test-${{ matrix.smoke-test-suite }}-${{ matrix.os }} # we expect crash dumps either in root director or in smoke-tests # not using **/ here because actions/upload-artifact fails with long paths https://github.com/actions/upload-artifact/issues/309 path: | hs_err_pid*.log smoke-tests/hs_err_pid*.log javacore.*.txt smoke-tests/javacore.*.txt Snap.*.trc smoke-tests/Snap.*.trc core.*.dmp smoke-tests/core.*.dmp jitdump.*.dmp smoke-tests/jitdump.*.dmp if-no-files-found: ignore gradle-plugins: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version - name: Setup Gradle uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: cache-read-only: ${{ inputs.cache-read-only }} - name: Build run: ./gradlew build ${{ inputs.no-build-cache && '--no-build-cache' || '' }} working-directory: gradle-plugins examples: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Free disk space run: .github/scripts/gha-free-disk-space.sh - name: Set up JDK for running Gradle uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: temurin java-version-file: .java-version - name: Set up Gradle cache uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0 with: cache-read-only: ${{ inputs.cache-read-only }} - name: Local publish of artifacts # javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/ run: ./gradlew publishToMavenLocal -x javadoc - name: Local publish of gradle plugins # javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/ run: ./gradlew publishToMavenLocal -x javadoc working-directory: gradle-plugins - name: Build distro run: ./gradlew build --init-script ../../.github/scripts/local.init.gradle.kts${{ inputs.no-build-cache && ' --no-build-cache' || '' }} working-directory: examples/distro - name: Build extension run: ./gradlew build --init-script ../../.github/scripts/local.init.gradle.kts${{ inputs.no-build-cache && ' --no-build-cache' || '' }} working-directory: examples/extension - name: Run muzzle check against extension run: ./gradlew muzzle --init-script ../../.github/scripts/local.init.gradle.kts working-directory: examples/extension