# Releases a patch by cherrypicking commits into a release branch based on the previous # release tag. name: Patch Release Build on: workflow_dispatch: inputs: version: description: The version to tag the release with, e.g., 1.2.1, 1.2.2 required: true commits: description: List of commit shas to cherrypick. Multiple shas should be separated by spaces. required: false jobs: prepare-release-branch: runs-on: ubuntu-latest outputs: release-branch-name: ${{ steps.parse-release-branch.outputs.release-branch-name }} steps: - id: parse-release-branch name: Parse release branch name run: | # Sets the release-branch-name output to the version number with the last non-period element replaced with an 'x' and preprended with v. echo "::set-output name=release-branch-name::$(echo '${{ github.event.inputs.version }}' | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)/v\1.\2.x/')" # Sets the release-tag-name output to the version number with the last non-period element replace with a '0' and prepended with v echo "::set-output name=release-tag-name::$(echo '${{ github.event.inputs.version }}' | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)/v\1.\2.0/')" - id: checkout-release-branch name: Check out release branch continue-on-error: true uses: actions/checkout@v2.3.4 with: ref: ${{ steps.parse-release-branch.outputs.release-branch-name }} fetch-depth: 0 - id: checkout-release-tag name: Check out release tag if: ${{ steps.checkout-release-branch.outcome == 'failure' }} uses: actions/checkout@v2.3.4 with: ref: ${{ steps.parse-release-branch.outputs.release-tag-name }} fetch-depth: 0 - name: Create release branch if: ${{ steps.checkout-release-tag.outcome == 'success' }} run: | git checkout -b ${{ steps.parse-release-branch.outputs.release-branch-name }} git push --set-upstream origin ${{ steps.parse-release-branch.outputs.release-branch-name }} test: runs-on: ubuntu-latest needs: prepare-release-branch strategy: matrix: test-java-version: - 8 - 11 - 15 steps: - uses: actions/checkout@v2.3.4 with: ref: ${{ needs.prepare-release-branch.outputs.release-branch-name }} fetch-depth: 0 - 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: Restore cache uses: burrunan/gradle-cache-action@v1.10 with: job-id: jdk${{ matrix.test-java-version }} read-only: true - name: Cache Gradle Wrapper uses: actions/cache@v2 with: path: ~/.gradle/wrapper key: ${{ runner.os }}-gradle-wrapper-cache-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - name: Setup git name run: | git config user.name github-actions git config user.email github-actions@github.com - name: Cherrypicks if: ${{ github.event.inputs.commits != '' }} run: | git fetch origin main git cherry-pick ${{ github.event.inputs.commits }} - name: Test run: ./gradlew 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 }} needs: prepare-release-branch strategy: matrix: os: - windows-latest - ubuntu-latest smoke-test-suite: - jetty - liberty - payara - tomcat - tomee - websphere - wildfly - other exclude: - os: windows-latest smoke-test-suite: websphere steps: - name: Support longpaths run: git config --system core.longpaths true if: matrix.os == 'windows-latest' - uses: actions/checkout@v2.3.4 with: ref: ${{ needs.prepare-release-branch.outputs.release-branch-name }} fetch-depth: 0 - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Restore cache uses: burrunan/gradle-cache-action@v1.10 with: job-id: smokeTests read-only: true - name: Cache Gradle Wrapper uses: actions/cache@v2 with: path: ~/.gradle/wrapper key: ${{ runner.os }}-gradle-wrapper-cache-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - name: Setup git name run: | git config user.name github-actions git config user.email github-actions@github.com - name: Cherrypicks if: ${{ github.event.inputs.commits != '' }} run: | git fetch origin main git cherry-pick ${{ github.event.inputs.commits }} - name: Test run: ./gradlew :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 needs: prepare-release-branch steps: - uses: actions/checkout@v2.3.4 with: ref: ${{ needs.prepare-release-branch.outputs.release-branch-name }} fetch-depth: 0 - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Cache Gradle Wrapper uses: actions/cache@v2 with: path: ~/.gradle/wrapper key: ${{ runner.os }}-gradle-wrapper-cache-${{ hashFiles('examples/distro/gradle/wrapper/gradle-wrapper.properties') }} - name: Setup git name run: | git config user.name github-actions git config user.email github-actions@github.com - name: Cherrypicks if: ${{ github.event.inputs.commits != '' }} run: | git fetch origin main git cherry-pick ${{ github.event.inputs.commits }} - 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 working-directory: examples/distro - name: Build extension run: ./gradlew build --init-script ../../.github/scripts/local.init.gradle.kts working-directory: examples/extension release: runs-on: ubuntu-latest needs: [ prepare-release-branch, test, smoke-test, examples ] steps: - uses: actions/checkout@v2.3.4 with: ref: ${{ needs.prepare-release-branch.outputs.release-branch-name }} fetch-depth: 0 - name: Set up JDK 11 for running Gradle uses: actions/setup-java@v2 with: distribution: adopt java-version: 11 - name: Setup git name run: | git config user.name github-actions git config user.email github-actions@github.com - name: Cherrypicks if: ${{ github.event.inputs.commits != '' }} run: | git fetch origin main git cherry-pick ${{ github.event.inputs.commits }} - name: Build and publish artifacts uses: burrunan/gradle-cache-action@v1.10 with: job-id: jdk11 remote-build-cache-proxy-enabled: false 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 }} # TODO (trask) cache gradle wrapper? - name: Build and publish gradle plugins env: GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }} GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }} run: ../gradlew build publishPlugins working-directory: gradle-plugins - name: Push cherry-picked changes to the release branch run: git push - name: Create Release id: create_release uses: actions/create-release@v1.1.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ github.event.inputs.version }} commitish: ${{ needs.prepare-release-branch.outputs.release-branch-name }} release_name: Release v${{ github.event.inputs.version }} draft: true prerelease: false - 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-${{ github.event.inputs.version }}.jar asset_name: opentelemetry-javaagent.jar asset_content_type: application/java-archive