From d5650937ea7576c0cf9cc789e0ae50e68ffaa1aa Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 17 Jun 2022 15:14:36 -0700 Subject: [PATCH] Release workflow simplifications (#356) * Release workflow simplifications * doc * Sync * Remove prerelease support * More * Sync * Fix --- .github/scripts/draft-change-log-entries.sh | 3 + .../scripts/generate-release-contributors.sh | 6 + .github/workflows/backport.yml | 9 +- .../workflows/merge-change-log-to-main.yml | 38 --- .github/workflows/prepare-patch-release.yml | 27 +- .github/workflows/prepare-release-branch.yml | 43 ++- .github/workflows/release.yml | 267 ++++++++++++------ RELEASING.md | 48 ++-- 8 files changed, 269 insertions(+), 172 deletions(-) delete mode 100644 .github/workflows/merge-change-log-to-main.yml diff --git a/.github/scripts/draft-change-log-entries.sh b/.github/scripts/draft-change-log-entries.sh index 13891117..ec24f57b 100755 --- a/.github/scripts/draft-change-log-entries.sh +++ b/.github/scripts/draft-change-log-entries.sh @@ -23,6 +23,9 @@ else range="v$major.$((minor - 1)).0..HEAD" fi +echo "## Unreleased" +echo + declare -A component_names=() component_names["aws-xray/"]="AWS X-Ray" component_names["consistent-sampling/"]="Consistent sampling" diff --git a/.github/scripts/generate-release-contributors.sh b/.github/scripts/generate-release-contributors.sh index 9a5c3ac9..3203e57b 100755 --- a/.github/scripts/generate-release-contributors.sh +++ b/.github/scripts/generate-release-contributors.sh @@ -5,6 +5,11 @@ # this should be run on the release branch +# NOTE if you need to run this script locally, you will need to first: +# git fetch upstream main +# git push origin upstream/main:main +# export GITHUB_REPOSITORY=open-telemetry/opentelemetry-java-contrib + from_version=$1 # get the date of the first commit that was not in the from_version @@ -80,4 +85,5 @@ echo $contributors1 $contributors2 \ | grep -v linux-foundation-easycla \ | grep -v github-actions \ | grep -v dependabot \ + | grep -v opentelemetry-java-bot \ | sed 's/^/@/' diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 31c73b75..2bdc3a32 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -10,6 +10,12 @@ jobs: backport: runs-on: ubuntu-latest steps: + - run: | + if [[ ! $GITHUB_REF_NAME =~ ^release/v[0-9]+\.[0-9]+\.x$ ]]; then + echo this workflow should only be run against release branches + exit 1 + fi + - uses: actions/checkout@v3 with: # history is needed to run git cherry-pick below @@ -21,12 +27,11 @@ jobs: - name: Create pull request env: NUMBER: ${{ github.event.inputs.number }} - # not using the default GITHUB_TOKEN because pull requests generated by it do not run any workflows + # not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} run: | commit=$(gh pr view $NUMBER --json mergeCommit --jq .mergeCommit.oid) title=$(gh pr view $NUMBER --json title --jq .title) - url=$(gh pr view $NUMBER --json url --jq .url) branch="backport-${NUMBER}-to-${GITHUB_REF_NAME//\//-}" diff --git a/.github/workflows/merge-change-log-to-main.yml b/.github/workflows/merge-change-log-to-main.yml deleted file mode 100644 index 8112e362..00000000 --- a/.github/workflows/merge-change-log-to-main.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Merge change log to main -on: - workflow_dispatch: - -jobs: - create-pull-request: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - # this workflow is run against the release branch (see usage of GITHUB_REF_NAME below) - # but it is creating a pull request against main - ref: main - # history is needed to run format-patch below - fetch-depth: 0 - - - name: Set git user - run: .github/scripts/set-git-user.sh - - # this will fail if there have been conflicting change log updates introduced in main - - name: Create pull request against main - env: - # not using the default GITHUB_TOKEN because pull requests generated by it do not run any workflows - GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} - run: | - message="Merge change log updates from $GITHUB_REF_NAME" - body="Merge change log updates from \`$GITHUB_REF_NAME\`." - branch="merge-change-log-updates-from-${GITHUB_REF_NAME//\//-}" - - # perform a 3-way merge of a single file - git format-patch --stdout HEAD..origin/$GITHUB_REF_NAME CHANGELOG.md | git apply --3way - - git commit -a -m "$message" - git push origin HEAD:$branch - gh pr create --title "$message" \ - --body "$body" \ - --head $branch \ - --base main diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index 6ac7d41f..f4aab3f5 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -8,10 +8,21 @@ jobs: steps: - uses: actions/checkout@v3 + - run: | + if [[ ! $GITHUB_REF_NAME =~ ^release/v[0-9]+\.[0-9]+\.x$ ]]; then + echo this workflow should only be run against release branches + exit 1 + fi + + if ! grep --quiet "^## Unreleased$" CHANGELOG.md; then + echo the change log is missing an \"Unreleased\" section + exit 1 + fi + - name: Set environment variables run: | version=$(.github/scripts/get-version.sh) - if [[ $version =~ ([0-9]+\.[0-9]+)\.([0-9]+) ]]; then + if [[ $version =~ ^([0-9]+\.[0-9]+)\.([0-9]+)$ ]]; then major_minor="${BASH_REMATCH[1]}" patch="${BASH_REMATCH[2]}" else @@ -20,22 +31,20 @@ jobs: fi echo "VERSION=$major_minor.$((patch + 1))" >> $GITHUB_ENV - - name: Check change log has been updated - run: | - if ! grep --quiet "^## Version $VERSION" CHANGELOG.md; then - echo the change log needs to be updated - exit 1 - fi - - name: Update version run: .github/scripts/update-version.sh $VERSION + - name: Update the change log with the approximate release date + run: | + date=$(date "+%Y-%m-%d") + sed -Ei "s/^## Unreleased$/## Version $VERSION ($date)/" CHANGELOG.md + - name: Set git user run: .github/scripts/set-git-user.sh - name: Create pull request env: - # not using the default GITHUB_TOKEN because pull requests generated by it do not run any workflows + # not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} run: | message="Prepare release $VERSION" diff --git a/.github/workflows/prepare-release-branch.yml b/.github/workflows/prepare-release-branch.yml index 8db012b5..a321fa53 100644 --- a/.github/workflows/prepare-release-branch.yml +++ b/.github/workflows/prepare-release-branch.yml @@ -9,10 +9,13 @@ jobs: - uses: actions/checkout@v3 - run: | - version=$(.github/scripts/get-version.sh) - version=${version//-SNAPSHOT/} - if ! grep --quiet "^## Version $version" CHANGELOG.md; then - echo the change log needs to be updated + if [[ $GITHUB_REF_NAME != main ]]; then + echo this workflow should only be run against main + exit 1 + fi + + if ! grep --quiet "^## Unreleased$" CHANGELOG.md; then + echo the change log is missing an \"Unreleased\" section exit 1 fi @@ -23,11 +26,15 @@ jobs: - uses: actions/checkout@v3 - name: Create release branch - id: create-release-branch run: | version=$(.github/scripts/get-version.sh) version=${version//-SNAPSHOT/} - release_branch_name=$(echo $version | sed -E 's/([0-9]+)\.([0-9]+)\.0/release\/v\1.\2.x/') + if [[ $version =~ ^([0-9]+)\.([0-9]+)\.0$ ]]; then + release_branch_name=$(echo $version | sed -E 's/([0-9]+)\.([0-9]+)\.0/release\/v\1.\2.x/') + else + echo "unexpected version: $version" + exit 1 + fi git push origin HEAD:$release_branch_name @@ -37,12 +44,17 @@ jobs: - name: Update version run: .github/scripts/update-version.sh $VERSION + - name: Update the change log with the approximate release date + run: | + date=$(date "+%Y-%m-%d") + sed -Ei "s/^## Unreleased$/## Version $VERSION ($date)/" CHANGELOG.md + - name: Set git user run: .github/scripts/set-git-user.sh - name: Create pull request against the release branch env: - # not using the default GITHUB_TOKEN because pull requests generated by it do not run any workflows + # not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} run: | message="Prepare release $VERSION" @@ -64,26 +76,33 @@ jobs: - name: Set environment variables run: | version=$(.github/scripts/get-version.sh) - if [[ $version =~ ([0-9]+)\.([0-9]+)\.0 ]]; then + version=${version//-SNAPSHOT/} + if [[ $version =~ ^([0-9]+)\.([0-9]+)\.0$ ]]; then major="${BASH_REMATCH[1]}" minor="${BASH_REMATCH[2]}" + next_version="$major.$((minor + 1)).0" else echo "unexpected version: $version" exit 1 fi - next_version="$major.$((minor + 1)).0" - next_version="${next_version}-SNAPSHOT" - echo "NEXT_VERSION=$next_version" >> $GITHUB_ENV + echo "NEXT_VERSION=${next_version}-SNAPSHOT" >> $GITHUB_ENV + echo "VERSION=$version" >> $GITHUB_ENV - name: Update version run: .github/scripts/update-version.sh $NEXT_VERSION + - name: Update the change log on main + run: | + # the actual release date on main will be updated at the end of the release workflow + date=$(date "+%Y-%m-%d") + sed -Ei "s/^## Unreleased$/## Unreleased\n\n## Version $VERSION ($date)/" CHANGELOG.md + - name: Set git user run: .github/scripts/set-git-user.sh - name: Create pull request against main env: - # not using the default GITHUB_TOKEN because pull requests generated by it do not run any workflows + # not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} run: | message="Update version to $NEXT_VERSION" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 305d91c0..af28ce3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,64 +3,88 @@ on: workflow_dispatch: jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 + assemble: + uses: ./.github/workflows/reusable-assemble.yml - - name: Set up JDK for running Gradle - uses: actions/setup-java@v3 - with: - distribution: temurin - java-version: 17 + test: + uses: ./.github/workflows/reusable-test.yml - - uses: gradle/gradle-build-action@v2 - name: Build - with: - arguments: build + # test-latest-deps 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 - - uses: actions/upload-artifact@v3 - name: Save unit test results - if: always() - with: - name: test-results - path: jmx-metrics/build/reports/tests/test + smoke-test: + uses: ./.github/workflows/reusable-smoke-test.yml - integration-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 + # 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 - - name: Set up JDK for running Gradle - uses: actions/setup-java@v3 - with: - distribution: temurin - java-version: 17 + gradle-plugins: + uses: ./.github/workflows/reusable-gradle-plugins.yml - - uses: gradle/gradle-build-action@v2 - name: Integration test - with: - arguments: integrationTest - - - uses: actions/upload-artifact@v3 - name: Save integration test results - if: always() - with: - name: integration-test-results - path: jmx-metrics/build/reports/tests/integrationTest + examples: + uses: ./.github/workflows/reusable-examples.yml release: - runs-on: ubuntu-latest needs: - - build - - integration-test + - assemble + - test + - smoke-test + - gradle-plugins + - examples + runs-on: ubuntu-latest steps: - run: | if [[ $GITHUB_REF_NAME != release/* ]]; then - echo the release workflow should only be run against release branches + echo this workflow should only be run against release branches exit 1 fi + - uses: actions/checkout@v3 + + - name: Set environment variables + run: | + version=$(.github/scripts/get-version.sh) + if [[ $version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then + major="${BASH_REMATCH[1]}" + minor="${BASH_REMATCH[2]}" + patch="${BASH_REMATCH[3]}" + else + echo "unexpected version: $version" + exit 1 + fi + if [[ $patch == 0 ]]; then + if [[ $minor == 0 ]]; then + prior_major=$((major - 1)) + prior_minor=$(grep -Po "^## Version $prior_major.\K[0-9]+" CHANGELOG.md | head -1) + prior_version="$prior_major.$prior_minor" + else + prior_version="$major.$((minor - 1)).0" + fi + else + prior_version="$major.$minor.$((patch - 1))" + fi + echo "VERSION=$version" >> $GITHUB_ENV + echo "PRIOR_VERSION=$prior_version" >> $GITHUB_ENV + + # check out main branch to verify there won't be problems with merging the change log + # at the end of this workflow + - uses: actions/checkout@v3 + with: + ref: main + + - run: | + if [[ $VERSION == *.0 ]]; then + # not making a patch release + if ! grep --quiet "^## Version $VERSION " CHANGELOG.md; then + echo the pull request generated by prepare-release-branch.yml needs to be merged first + exit 1 + fi + fi + + # back to the release branch - uses: actions/checkout@v3 with: # tags are needed for the generate-release-contributors.sh script @@ -82,30 +106,19 @@ jobs: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }} - - name: Set environment variables - run: | - version=$(.github/scripts/get-version.sh) - if [[ $version =~ ([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then - major="${BASH_REMATCH[1]}" - minor="${BASH_REMATCH[2]}" - patch="${BASH_REMATCH[3]}" - else - echo "unexpected version: $version" - exit 1 - fi - if [[ $patch == 0 ]]; then - if [[ $minor == 0 ]]; then - prior_major=$((major - 1)) - prior_minor=$(grep -Po "^## Version $prior_major.\K([0-9]+)" CHANGELOG.md | head -1) - prior_version="$prior_major.$prior_minor" - else - prior_version="$major.$((minor - 1)).0" - fi - else - prior_version="$major.$minor.$((patch - 1))" - fi - echo "VERSION=$version" >> $GITHUB_ENV - echo "PRIOR_VERSION=$prior_version" >> $GITHUB_ENV + - 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: Generate release notes env: @@ -124,17 +137,21 @@ jobs: EOF fi + # CHANGELOG_SECTION.md is also used at the end of the release workflow + # for copying the change log updates to main + sed -n "0,/^## Version $VERSION /d;/^## Version /q;p" CHANGELOG.md \ + > /tmp/CHANGELOG_SECTION.md + # the complex perl regex is needed because markdown docs render newlines as soft wraps # while release notes render them as line breaks - sed -n "0,/^## Version $VERSION/d;/^## Version /q;p" CHANGELOG.md \ - | perl -0pe 's/(?> /tmp/release-notes.txt # conditional block not indented because of the heredoc if [[ $VERSION == *.0 ]]; then cat >> /tmp/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 @@ -154,27 +171,117 @@ jobs: v$VERSION \ opentelemetry-jmx-metrics.jar - - name: Update the change log with the release date + - uses: actions/checkout@v3 + with: + # the step below is creating a pull request against main + ref: main + + - name: Copy change log updates to main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - date=$(gh release view v$VERSION --json publishedAt --jq .publishedAt | sed 's/T.*//') - sed -Ei "s/## Version $VERSION .*/## Version $VERSION ($date)/" CHANGELOG.md + if [[ $VERSION == *.0 ]]; then + # this was not a patch release, so the version exists already in the CHANGELOG.md + + # update the release date + date=$(gh release view v$VERSION --json publishedAt --jq .publishedAt | sed 's/T.*//') + sed -Ei "s/## Version $VERSION .*/## Version $VERSION ($date)/" CHANGELOG.md + + # the entries are copied over from the release branch to support workflows + # where change log entries may be updated after preparing the release branch + + # copy the portion above the release, up to and including the heading + sed -n "0,/^## Version $VERSION ($date)/p" CHANGELOG.md > /tmp/CHANGELOG.md + + # copy the release notes + cat /tmp/CHANGELOG_SECTION.md >> /tmp/CHANGELOG.md + + # copy the portion below the release + sed -n "0,/^## Version $VERSION /d;0,/^## Version /{/^## Version/!d};p" CHANGELOG.md \ + >> /tmp/CHANGELOG.md + + # update the real CHANGELOG.md + cp /tmp/CHANGELOG.md CHANGELOG.md + else + # this was a patch release, so the version does not exist already in the CHANGELOG.md + + # copy the portion above the top-most release, not including the heading + sed -n "0,/^## Version /{ /^## Version /!p }" CHANGELOG.md > /tmp/CHANGELOG.md + + # add the heading + date=$(gh release view v$VERSION --json publishedAt --jq .publishedAt | sed 's/T.*//') + echo "## Version $VERSION ($date)" >> /tmp/CHANGELOG.md + + # copy the release notes + cat /tmp/CHANGELOG_SECTION.md >> /tmp/CHANGELOG.md + + # copy the portion starting from the top-most release + sed -n "/^## Version /,\$p" CHANGELOG.md >> /tmp/CHANGELOG.md + + # update the real CHANGELOG.md + cp /tmp/CHANGELOG.md CHANGELOG.md + fi - name: Set git user run: .github/scripts/set-git-user.sh - - name: Create pull request against the release branch + - name: Create pull request against main env: - # not using the default GITHUB_TOKEN because pull requests generated by it do not run any workflows + # not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} run: | - message="Add the release date for $VERSION to the change log" - branch="add-release-date-for-${VERSION}" + message="Copy change log updates from $GITHUB_REF_NAME" + body="Copy log updates from \`$GITHUB_REF_NAME\`." + branch="copy-change-log-updates-from-${GITHUB_REF_NAME//\//-}" + + if [[ $VERSION == *.0 ]]; then + if git diff --quiet; then + echo there are no updates needed to the change log on main, not creating pull request + exit 0 # success + fi + fi git commit -a -m "$message" git push origin HEAD:$branch - gh pr create --title "[$GITHUB_REF_NAME] $message" \ - --body "$message." \ + gh pr create --title "$message" \ + --body "$body" \ --head $branch \ - --base $GITHUB_REF_NAME + --base main + + - uses: actions/checkout@v3 + with: + repository: opentelemetry-java-bot/opentelemetry-operator + # this is the personal access token used for "git push" below + token: ${{ secrets.BOT_TOKEN }} + + - name: Initialize pull request branch + run: | + git remote add upstream https://github.com/open-telemetry/opentelemetry-operator.git + git fetch upstream + git checkout -b update-opentelemetry-javaagent-to-${VERSION} upstream/main + + - name: Update version + run: | + echo $VERSION > autoinstrumentation/java/version.txt + + - name: Set git user + run: .github/scripts/set-git-user.sh + + - name: Create pull request against opentelemetry-operator + env: + # this is the personal access token used for "gh pr create" below + GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} + run: | + message="Update the javaagent version to $VERSION" + body="Update the javaagent version to \`$VERSION\`." + + # gh pr create doesn't have a way to explicitly specify different head and base + # repositories currently, but it will implicitly pick up the head from a different + # repository if you set up a tracking branch + + git commit -a -m "$message" + git push --set-upstream origin update-opentelemetry-javaagent-to-${VERSION} + gh pr create --title "$message" \ + --body "$body" \ + --repo open-telemetry/opentelemetry-operator \ + --base main diff --git a/RELEASING.md b/RELEASING.md index f8505f99..0bea738a 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -14,19 +14,19 @@ as the last step, which publishes a snapshot build to * Close the release milestone if there is one. * Merge a pull request to `main` updating the `CHANGELOG.md`. - * The heading for the release should include the release version but not the release date, e.g. - `## Version 1.9.0 (unreleased)`. - * Use `.github/scripts/draft-change-log-entries.sh` as a starting point for writing the change - log. + * The heading for the unreleased entries should be `## Unreleased`. + * Use `.github/scripts/draft-change-log-entries.sh` as a starting point for writing the change log. * Run the [Prepare release branch workflow](https://github.com/open-telemetry/opentelemetry-java-contrib/actions/workflows/prepare-release-branch.yml). -* Review and merge the two pull requests that it creates - (one is targeted to the release branch and one is targeted to the `main` branch). + * Press the "Run workflow" button, and leave the default branch `main` selected. + * Review and merge the two pull requests that it creates + (one is targeted to the release branch and one is targeted to `main`). ## Preparing a new patch release All patch releases should include only bug-fixes, and must avoid adding/modifying the public APIs. -In general, patch releases are only made for regressions, memory leaks and deadlocks. +In general, patch releases are only made for regressions, security vulnerabilities, memory leaks +and deadlocks. * Backport pull request(s) to the release branch. * Run the [Backport workflow](https://github.com/open-telemetry/opentelemetry-java-contrib/actions/workflows/backport.yml). @@ -35,33 +35,19 @@ In general, patch releases are only made for regressions, memory leaks and deadl then click the "Run workflow" button below that. * Review and merge the backport pull request that it generates. * Merge a pull request to the release branch updating the `CHANGELOG.md`. - * The heading for the release should include the release version but not the release date, e.g. - `## Version 1.9.1 (unreleased)`. + * The heading for the unreleased entries should be `## Unreleased`. * Run the [Prepare patch release workflow](https://github.com/open-telemetry/opentelemetry-java-contrib/actions/workflows/prepare-patch-release.yml). * Press the "Run workflow" button, then select the release branch from the dropdown list, e.g. `release/v1.9.x`, and click the "Run workflow" button below that. -* Review and merge the pull request that it creates. + * Review and merge the pull request that it creates for updating the version. ## Making the release -Run the [Release workflow](https://github.com/open-telemetry/opentelemetry-java-contrib/actions/workflows/release.yml). - -* Press the "Run workflow" button, then select the release branch from the dropdown list, - e.g. `release/v1.9.x`, and click the "Run workflow" button below that. -* This workflow will publish the artifacts to maven central and will publish a GitHub release - with release notes based on the change log and with the jmx metrics jar attached. -* Review and merge the pull request that the release workflow creates against the release branch - which adds the release date to the change log. - -## After the release - -Run the [Merge change log to main workflow](https://github.com/open-telemetry/opentelemetry-java-contrib/actions/workflows/merge-change-log-to-main.yml). - -* Press the "Run workflow" button, then select the release branch from the dropdown list, - e.g. `release/v1.9.x`, and click the "Run workflow" button below that. -* This will create a pull request that merges the change log updates from the release branch - back to main. -* Review and merge the pull request that it creates. -* This workflow will fail if there have been conflicting change log updates introduced in main, - in which case you will need to merge the change log updates manually and send your own pull - request against main. +* Run the [Release workflow](https://github.com/open-telemetry/opentelemetry-java-contrib/actions/workflows/release.yml). + * Press the "Run workflow" button, then select the release branch from the dropdown list, + e.g. `release/v1.9.x`, and click the "Run workflow" button below that. + * This workflow will publish the artifacts to maven central and will publish a GitHub release + with release notes based on the change log and with the jmx metrics jar attached. + * Review and merge the pull request that it creates for updating the change log in main + (note that if this is not a patch release then the change log on main may already be up-to-date, + in which case no pull request will be created).