-
Notifications
You must be signed in to change notification settings - Fork 218
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
148 additions
and
13 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
# | ||
# 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" |
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