224 lines
8.8 KiB
YAML
224 lines
8.8 KiB
YAML
name: Release
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
required-jobs:
|
|
uses: ./.github/workflows/build-common.yml
|
|
|
|
# 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
|
|
|
|
# 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
|
|
|
|
release:
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- required-jobs
|
|
outputs:
|
|
version: ${{ steps.create-github-release.outputs.version }}
|
|
steps:
|
|
- run: |
|
|
if [[ $GITHUB_REF_NAME != release/* ]]; then
|
|
echo this workflow should only be run against release branches
|
|
exit 1
|
|
fi
|
|
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
|
|
- 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
with:
|
|
ref: main
|
|
|
|
- name: Check that change log update was merged to 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
with:
|
|
# tags are needed for the generate-release-contributors.sh script
|
|
fetch-depth: 0
|
|
|
|
- name: Free disk space
|
|
run: .github/scripts/gha-free-disk-space.sh
|
|
|
|
- uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 # v4.0.0
|
|
with:
|
|
distribution: temurin
|
|
java-version: 17.0.6
|
|
|
|
- name: Build and publish artifacts
|
|
uses: gradle/gradle-build-action@3b1b3b9a2104c2b47fbae53f3938079c00c9bb87 # v3.0.0
|
|
with:
|
|
arguments: assemble publishToSonatype closeAndReleaseSonatypeStagingRepository
|
|
env:
|
|
SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
|
|
SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }}
|
|
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
|
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
|
|
|
|
- name: Build and publish gradle plugins
|
|
uses: gradle/gradle-build-action@3b1b3b9a2104c2b47fbae53f3938079c00c9bb87 # v3.0.0
|
|
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:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
sdk_version=$(grep -Po "val otelSdkVersion = \"\K[0-9]+.[0-9]+.[0-9]+" dependencyManagement/build.gradle.kts)
|
|
|
|
# conditional blocks not indented because of the heredoc
|
|
if [[ $VERSION == *.0 ]]; then
|
|
cat > /tmp/release-notes.txt << EOF
|
|
This release targets the OpenTelemetry SDK $sdk_version.
|
|
|
|
Note that many artifacts 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
|
|
else
|
|
cat > /tmp/release-notes.txt << EOF
|
|
This is a patch release on the previous $PRIOR_VERSION release, fixing the issue(s) below.
|
|
|
|
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
|
|
perl -0pe 's/(?<!\n)\n *(?!\n)(?![-*] )(?![1-9]+\. )/ /g' /tmp/CHANGELOG_SECTION.md \
|
|
>> /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
|
|
|
|
.github/scripts/generate-release-contributors.sh v$PRIOR_VERSION >> /tmp/release-notes.txt
|
|
fi
|
|
|
|
- id: create-github-release
|
|
name: Create GitHub release
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
cp javaagent/build/libs/opentelemetry-javaagent-${VERSION}.jar opentelemetry-javaagent.jar
|
|
gh release create --target $GITHUB_REF_NAME \
|
|
--title "Version $VERSION" \
|
|
--notes-file /tmp/release-notes.txt \
|
|
v$VERSION \
|
|
opentelemetry-javaagent.jar
|
|
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
|
|
merge-change-log-to-main:
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- release
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
|
|
- name: Copy change log section from release branch
|
|
env:
|
|
VERSION: ${{ needs.release.outputs.version }}
|
|
run: |
|
|
sed -n "0,/^## Version $VERSION /d;/^## Version /q;p" CHANGELOG.md \
|
|
> /tmp/changelog-section.md
|
|
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
with:
|
|
ref: main
|
|
|
|
- name: Merge change log to main
|
|
env:
|
|
VERSION: ${{ needs.release.outputs.version }}
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
release_date=$(gh release view v$VERSION --json publishedAt --jq .publishedAt | sed 's/T.*//')
|
|
RELEASE_DATE=$release_date .github/scripts/merge-change-log-after-release.sh
|
|
|
|
- name: Use CLA approved github bot
|
|
run: .github/scripts/use-cla-approved-github-bot.sh
|
|
|
|
- name: Create pull request against main
|
|
env:
|
|
VERSION: ${{ needs.release.outputs.version }}
|
|
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
|
|
GH_TOKEN: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
|
|
run: |
|
|
if git diff --quiet; then
|
|
if [[ $VERSION == *.0 ]]; then
|
|
echo there are no updates to merge, not creating pull request
|
|
exit 0 # success
|
|
else
|
|
echo patch release notes did not get applied for some reason
|
|
exit 1 # failure
|
|
fi
|
|
fi
|
|
|
|
message="Merge change log updates from $GITHUB_REF_NAME"
|
|
body="Merge log updates from \`$GITHUB_REF_NAME\`."
|
|
branch="opentelemetrybot/merge-change-log-updates-from-${GITHUB_REF_NAME//\//-}"
|
|
|
|
git checkout -b $branch
|
|
git commit -a -m "$message"
|
|
git push --set-upstream origin $branch
|
|
gh pr create --title "$message" \
|
|
--body "$body" \
|
|
--base main
|