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