Release #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
workflow_dispatch: | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
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@v3 | |
- uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 17 | |
- 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 }} | |
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 | |
# 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 | |
- name: Check that change log update was merged to main | |
run: | | |
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 | |
# back to the release branch | |
- uses: actions/checkout@v3 | |
with: | |
# tags are needed for the generate-release-contributors.sh script | |
fetch-depth: 0 | |
- name: Generate release notes | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
# 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 | |
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 | |
- id: create-github-release | |
name: Create GitHub release | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
gh release create --target $GITHUB_REF_NAME \ | |
--title "Version $VERSION" \ | |
--notes-file /tmp/release-notes.txt \ | |
v$VERSION | |
echo "version=$VERSION" >> $GITHUB_OUTPUT |