Manual Maven Release #4
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
# | |
# Release workflow | |
# | |
# Secrets: | |
# - GPG_SIGNING_KEY (private key with armor) | |
# - GPG_PASSPHRASE (the private key passphrase) | |
# - GPG_KEY_FINGERPRINT (fingerprint and not hash) | |
# - MAVEN_USER (token user generated by central.sonatype.org) | |
# - MAVEN_PASSWORD (token password generated by central.sonatype.org) | |
# | |
name: Manual Maven Release | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: The version to release (will be inferred from the pom version by default). | |
required: false | |
next-version: | |
description: The next developement version (will be inferred from the pom version by default). | |
required: false | |
java-version: | |
description: The java version to use | |
required: false | |
default: 22 | |
distribution: | |
description: The java distribution to use. | |
required: false | |
default: temurin | |
maven-version: | |
description: The Maven version to use | |
required: false | |
default: 3.9.8 | |
jobs: | |
release: | |
name: Release to Maven Central | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout ${{ github.ref_name }} | |
uses: actions/checkout@v4 | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: ${{ github.event.inputs.distribution }} | |
java-version: ${{ github.event.inputs.java-version }} | |
cache: maven | |
server-id: central | |
server-username: MAVEN_USER | |
server-password: MAVEN_PASSWORD | |
gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} | |
gpg-passphrase: MAVEN_GPG_PASSPHRASE | |
- name: Setup Maven | |
uses: stCarolas/setup-maven@v5 | |
with: | |
maven-version: ${{ github.event.inputs.maven-version }} | |
- name: Import GPG key | |
uses: crazy-max/ghaction-import-gpg@v6 | |
with: | |
gpg_private_key: ${{ secrets.GPG_SIGNING_KEY }} | |
passphrase: ${{ secrets.GPG_PASSPHRASE }} | |
git_config_global: true | |
git_user_signingkey: true | |
git_commit_gpgsign: true | |
fingerprint: ${{ secrets.GPG_KEY_FINGERPRINT }} | |
- name: Diag | |
if: false | |
run: | | |
echo "=====================" | |
echo " Maven " | |
echo "=====================" | |
mvn -v | |
echo "=====================" | |
echo " Global settings " | |
echo "=====================" | |
cat $HOME/.m2/settings.xml | |
echo "" | |
echo "=====================" | |
echo " Git config " | |
echo "=====================" | |
git config -l --global | |
- name: Release preparation | |
id: pre-release | |
shell: bash | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
gh extension install valeriobelli/gh-milestone | |
version=$(mvn -q -DforceStdout help:evaluate -N -Dexpression=project.version | sed -rn 's/([^-]+)(-SNAPSHOT|)$/\1/p') | |
echo "version=$version" >> "$GITHUB_OUTPUT" | |
- name: Release | |
env: | |
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} | |
MAVEN_GPG_KEY_FINGERPRINT: ${{ secrets.GPG_KEY_FINGERPRINT }} | |
MAVEN_USER: ${{ secrets.MAVEN_USER }} | |
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} | |
run: | | |
mvn -B release:prepare release:perform -Darguments="-DskipTests" -DreleaseVersion=${{ github.event.inputs.version }} -DdevelopmentVersion=${{ github.event.inputs.next-version }} | |
- name: Post release | |
env: | |
GH_TOKEN: ${{ github.token }} | |
shell: bash | |
run: | | |
version=${{ steps.pre-release.outputs.version }} | |
echo "Trying to find milestone $version" | |
milestone=$(gh milestone list --json id,title,state --jq "map_values(select(.title == \"${version}\" and .state == \"OPEN\")).[].number") | |
if [ ! -z "$milestone" ]; then | |
echo "Found milestone $version, closing it" | |
gh milestone edit $milestone --state closed | |
fi | |
version=$(mvn -q -DforceStdout help:evaluate -N -Dexpression=project.version | sed -rn 's/([^-]+)(-SNAPSHOT|)$/\1/p') | |
echo "Preparing development $version" | |
echo "Trying to find milestone $version" | |
milestone=$(gh milestone list --json id,title,state --jq "map_values(select(.title == \"${version}\" and .state == \"OPEN\")).[].number") | |
if [ -z "$milestone" ]; then | |
echo "Creating milestone $version" | |
gh milestone create --title $version | |
fi | |
name=$(mvn -q -DforceStdout help:evaluate -N -Dexpression=project.name) | |
version=${{ steps.pre-release.outputs.VERSION }} | |
tag=$(git describe --tags --abbrev=0) | |
echo "Creating release \"$name $version\" from tag $tag" | |
gh release create $tag --verify-tag --notes-from-tag --title "$name $version" |