123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- name: Reusable - Common
- on:
- workflow_call:
- inputs:
- cache-read-only:
- type: boolean
- required: false
- no-build-cache:
- type: boolean
- required: false
- skip-openj9-tests:
- type: boolean
- required: false
- skip-windows-smoke-tests:
- type: boolean
- required: false
- secrets:
- GRADLE_ENTERPRISE_ACCESS_KEY:
- required: false
- permissions:
- contents: read
- jobs:
- spotless:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - name: Free disk space
- run: .github/scripts/gha-free-disk-space.sh
- - name: Set up JDK for running Gradle
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- with:
- distribution: temurin
- java-version-file: .java-version
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.0
- with:
- cache-read-only: ${{ inputs.cache-read-only }}
- # gradle enterprise is used for the build cache
- gradle-home-cache-excludes: caches/build-cache-1
- - name: Spotless
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
- run: ./gradlew spotlessCheck ${{ inputs.no-build-cache && '--no-build-cache' || '' }}
- gradle-wrapper-validation:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - uses: gradle/actions/wrapper-validation@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.0
- license-check:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - name: Free disk space
- run: .github/scripts/gha-free-disk-space.sh
- - name: Set up JDK for running Gradle
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- with:
- distribution: temurin
- java-version-file: .java-version
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.0
- with:
- cache-read-only: ${{ inputs.cache-read-only }}
- # gradle enterprise is used for the build cache
- gradle-home-cache-excludes: caches/build-cache-1
- - name: Generate license report
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
- # currently ignoring inputs.no-build-cache and always running with --no-build-cache
- # see https://github.com/jk1/Gradle-License-Report/issues/231
- run: ./gradlew generateLicenseReport --no-build-cache
- - name: Check licenses
- run: |
- # add any untracked folders that may have been added by generateLicenseReport
- git add licenses
- # there's always going to one line difference due to the timestamp included in the report
- if [[ $(git diff --cached --shortstat licenses) == " 1 file changed, 1 insertion(+), 1 deletion(-)" ]]
- then
- echo "Licenses are up-to-date."
- else
- echo "Licenses are not up-to-date, please run './gradlew generateLicenseReport' locally and commit."
- echo
- echo "$(git diff --cached --stat licenses)"
- echo
- 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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - 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
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - name: Free disk space
- run: .github/scripts/gha-free-disk-space.sh
- - name: Set up JDK for running Gradle
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- 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@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.0
- with:
- cache-read-only: ${{ inputs.cache-read-only }}
- # gradle enterprise is used for the build cache
- gradle-home-cache-excludes: caches/build-cache-1
- - name: Build
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
- # 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'?"
- echo $(git diff --cached --name-only)
- echo $(git diff --cached)
- exit 1
- fi
- - name: Upload agent jar
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
- 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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
- 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
- - 22
- vm:
- - hotspot
- - openj9
- test-partition:
- - 0
- - 1
- - 2
- - 3
- exclude:
- - vm: ${{ inputs.skip-openj9-tests && 'openj9' || '' }}
- - test-java-version: 22
- vm: openj9
- fail-fast: false
- steps:
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - 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@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- 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@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- with:
- distribution: temurin
- java-version-file: .java-version
- # vaadin 14 tests fail with node 18
- - name: Set up Node
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
- with:
- node-version: 16
- # vaadin tests use pnpm
- - name: Cache pnpm modules
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- 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@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.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' }}
- # gradle enterprise is used for the build cache
- gradle-home-cache-excludes: caches/build-cache-1
- - name: List tests
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_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
- 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
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
- # 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' || '' }}
- - name: Build scan
- if: ${{ !cancelled() && hashFiles('build-scan.txt') != '' }}
- run: cat build-scan.txt
- - name: Upload deadlock detector artifacts if any
- if: failure()
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
- 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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
- 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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - name: Free disk space
- run: .github/scripts/gha-free-disk-space.sh
- - name: Set up JDK for running Gradle
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- with:
- distribution: temurin
- java-version-file: .java-version
- - name: Set up Gradle cache
- uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.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' }}
- # gradle enterprise is used for the build cache
- gradle-home-cache-excludes: caches/build-cache-1
- - name: Build
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
- # running suite "none" compiles everything needed by smoke tests without executing any tests
- run: ./gradlew :smoke-tests:test -PsmokeTestSuite=none --no-daemon ${{ inputs.no-build-cache && ' --no-build-cache' || '' }}
- - name: Test
- env:
- GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
- 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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
- 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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - name: Free disk space
- run: .github/scripts/gha-free-disk-space.sh
- - name: Set up JDK for running Gradle
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- with:
- distribution: temurin
- java-version-file: .java-version
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - name: Free disk space
- run: .github/scripts/gha-free-disk-space.sh
- - name: Set up JDK for running Gradle
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
- with:
- distribution: temurin
- java-version-file: .java-version
- - name: Set up Gradle cache
- uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.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
|