From 9b971508fd7a621e8e73967726ebef4e29cb9ad8 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 17 Jul 2024 20:21:02 +0200 Subject: [PATCH] Add release workflow --- .github/workflows/release.yml | 134 ++++++++++++++++++++++++++++++++++ pom.xml | 27 +++---- 2 files changed, 148 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..ccb858116 --- /dev/null +++ b/.github/workflows/release.yml @@ -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" diff --git a/pom.xml b/pom.xml index 6100be07e..0f44c14fe 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ jline-parent 3.27.0-SNAPSHOT pom - JLine Parent + JLine JLine https://github.com/jline/jline3 @@ -83,11 +83,6 @@ https://github.com/jline/jline3/issues - - travis - https://travis-ci.org/jline/jline3 - - UTF-8 2024-07-17T18:32:16Z @@ -443,12 +438,9 @@ - org.apache.maven.plugins - maven-deploy-plugin - 3.1.2 - - true - + org.sonatype.central + central-publishing-maven-plugin + 0.5.0 org.apache.maven.plugins @@ -534,7 +526,7 @@ --pinentry-mode loopback - ${gpg.passphrase} + true true @@ -710,6 +702,15 @@ + + org.sonatype.central + central-publishing-maven-plugin + true + + central + + + org.graalvm.nativeimage native-image-maven-plugin