# Releases a new major / minor / patch version from a release branch name: Release Build on: workflow_dispatch: jobs: test: runs-on: ubuntu-latest strategy: matrix: test-java-version: - 8 - 11 - 15 steps: - uses: actions/checkout@v2.3.4 with: ref: ${{ github.ref_name }} - id: setup-test-java name: Set up JDK ${{ matrix.test-java-version }} for running tests uses: actions/setup-java@v2 with: distribution: adopt java-version: ${{ matrix.test-java-version }} - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Test uses: gradle/gradle-build-action@v2 with: arguments: test -PtestJavaVersion=${{ matrix.test-java-version }} -Porg.gradle.java.installations.paths=${{ steps.setup-test-java.outputs.path }} -Porg.gradle.java.installations.auto-download=false # testLatestDeps is intentionally not included in the release workflows # because any time a new library version is released to maven central # it can fail due to test code incompatibility with the new library version, # or due to slight changes in emitted telemetry smoke-test: runs-on: ${{ matrix.os }} strategy: matrix: os: - windows-2019 - ubuntu-latest smoke-test-suite: - jetty - liberty - payara - tomcat - tomee - websphere - wildfly - other exclude: - os: windows-2019 smoke-test-suite: websphere steps: - name: Support longpaths run: git config --system core.longpaths true if: matrix.os == 'windows-2019' - uses: actions/checkout@v2.3.4 with: ref: ${{ github.ref_name }} - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Test uses: gradle/gradle-build-action@v2 with: arguments: ":smoke-tests:test -PsmokeTestSuite=${{ matrix.smoke-test-suite }}" # muzzle is intentionally not included in the release workflows # because any time a new library version is released to maven central it can fail, # and this is not a reason to hold up the release examples: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.4 with: ref: ${{ github.ref_name }} - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Local publish of artifacts uses: gradle/gradle-build-action@v2 with: # javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/ arguments: publishToMavenLocal -x javadoc - name: Local publish of gradle plugins uses: gradle/gradle-build-action@v2 with: # javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/ arguments: publishToMavenLocal -x javadoc build-root-directory: gradle-plugins - name: Build distro uses: gradle/gradle-build-action@v2 with: arguments: build --init-script ../../.github/scripts/local.init.gradle.kts build-root-directory: examples/distro - name: Build extension uses: gradle/gradle-build-action@v2 with: arguments: build --init-script ../../.github/scripts/local.init.gradle.kts build-root-directory: examples/extension - name: Run muzzle check against extension uses: gradle/gradle-build-action@v2 with: arguments: muzzle --init-script ../../.github/scripts/local.init.gradle.kts build-root-directory: examples/extension cache-read-only: true release: needs: [ test, smoke-test, examples ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.4 with: ref: ${{ github.ref_name }} # tags are needed for the generate-release-contributors.sh script fetch-depth: 0 - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Build and publish artifacts uses: gradle/gradle-build-action@v2 with: arguments: assemble publishToSonatype closeAndReleaseSonatypeStagingRepository env: SONATYPE_USER: ${{ secrets.SONATYPE_USER }} SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }} GRGIT_USER: ${{ github.actor }} GRGIT_PASS: ${{ secrets.GITHUB_TOKEN }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }} - name: Build and publish gradle plugins uses: gradle/gradle-build-action@v2 env: SONATYPE_USER: ${{ secrets.SONATYPE_USER }} SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }} GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }} GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }} with: # Don't use publishToSonatype since we don't want to publish the marker artifact arguments: build publishPlugins publishPluginMavenPublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository build-root-directory: gradle-plugins - name: Set versions id: set-versions run: | v=$(grep -Eo "[0-9]+.[0-9]+.0" version.gradle.kts | head -1) if [[ $v =~ ([0-9]+).([0-9]+).0 ]]; then major="${BASH_REMATCH[1]}" minor="${BASH_REMATCH[2]}" else echo "unexpected version: $v" exit 1 fi if [[ $minor == 0 ]]; then prior_major=$((major - 1)) prior_minor=$(grep -Po "^## Version $prior_major.\K([0-9]+)" CHANGELOG.md | head -1) prior="$prior_major.$prior_minor" else prior="$major.$((minor - 1)).0" fi echo "::set-output name=release-version::$v" echo "::set-output name=prior-version::$prior" - name: Generate Release Notes env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | cat > release-notes.txt << EOF Note that all artifacts other than `io.opentelemetry.javaagent:opentelemetry-javaagent` have the `-alpha` suffix attached to their version number, reflecting that they are still alpha quality and will continue to have breaking changes. Please see the [VERSIONING.md](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/VERSIONING.md#opentelemetry-java-instrumentation-versioning) for more details. EOF sed -n '4,/^## Version /p' CHANGELOG.md \ | head -n -1 \ | perl -0pe 's/^\n+//g' \ | perl -0pe 's/\n+$/\n/g' \ | sed -r 's,\[#([0-9]+)]\(https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/[0-9]+\),#\1,' \ | perl -0pe 's/\n +/ /g' \ >> release-notes.txt cat >> release-notes.txt << EOF ### 🙇 Thank you This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests: EOF .github/scripts/generate-release-contributors.sh v${{ steps.set-versions.outputs.prior-version }} v${{ steps.set-versions.outputs.release-version }} >> release-notes.txt - name: Create Release id: create_release uses: actions/create-release@v1.1.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.set-versions.outputs.release-version }} commitish: ${{ github.ref_name }} release_name: Version ${{ steps.set-versions.outputs.release-version }} draft: true prerelease: false body_path: release-notes.txt - name: Upload Release Asset id: upload-release-asset uses: actions/upload-release-asset@v1.0.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ steps.set-versions.outputs.release-version }}.jar asset_name: opentelemetry-javaagent.jar asset_content_type: application/java-archive