11name : Release
22
33on :
4- push :
5- branches : [main]
6- workflow_dispatch :
4+ release :
5+ types : [published]
76
87permissions :
9- contents : write
10- id-token : write
8+ contents : read
9+
10+ concurrency :
11+ group : release-${{ github.event.release.tag_name }}
12+ cancel-in-progress : false
1113
1214jobs :
1315 test :
2022 steps :
2123 - name : Checkout code
2224 uses : actions/checkout@v6
25+ with :
26+ ref : ${{ github.event.release.tag_name }}
2327
2428 - name : Set up JDK ${{ matrix.java }}
2529 uses : actions/setup-java@v5
@@ -38,14 +42,12 @@ jobs:
3842 name : Release
3943 runs-on : ubuntu-latest
4044 needs : test
41- if : github.ref == 'refs/heads/main'
4245
4346 steps :
4447 - name : Checkout code
4548 uses : actions/checkout@v6
4649 with :
47- fetch-depth : 0
48- token : ${{ secrets.GITHUB_TOKEN }}
50+ ref : ${{ github.event.release.tag_name }}
4951
5052 - name : Set up JDK 17
5153 uses : actions/setup-java@v5
@@ -54,30 +56,39 @@ jobs:
5456 distribution : ' temurin'
5557 cache : ' gradle'
5658
57- - name : Setup Node.js
58- uses : actions/setup-node@v6
59- with :
60- node-version : 20
61-
62- - name : Install semantic-release
63- run : npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/exec
64-
6559 - name : Grant execute permission for gradlew
6660 run : chmod +x gradlew
6761
68- - name : Configure Git
62+ - name : Prepare release version
63+ env :
64+ RELEASE_TAG : ${{ github.event.release.tag_name }}
6965 run : |
70- git config user.name "github-actions[bot]"
71- git config user.email "github-actions[bot]@users.noreply.github.com"
66+ version="${RELEASE_TAG#v}"
7267
73- - name : Release
68+ if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then
69+ echo "Release tag must look like v1.2.3 or 1.2.3, got '${RELEASE_TAG}'"
70+ exit 1
71+ fi
72+
73+ echo "RELEASE_VERSION=$version" >> "$GITHUB_ENV"
74+ perl -0pi -e "s/^version = '.*'$/version = '$version'/m" build.gradle
75+ RELEASE_VERSION="$version" perl -0pi -e 's|(<artifactId>lettermint</artifactId>\s*<version>)[^<]+(</version>)|$1$ENV{RELEASE_VERSION}$2|' pom.xml
76+
77+ - name : Publish to Maven Central
7478 env :
75- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
7679 OSSRH_USERNAME : ${{ secrets.OSSRH_USERNAME }}
7780 OSSRH_PASSWORD : ${{ secrets.OSSRH_PASSWORD }}
7881 ORG_GRADLE_PROJECT_signingKeyId : ${{ secrets.GPG_KEY_ID }}
7982 ORG_GRADLE_PROJECT_signingPassword : ${{ secrets.GPG_PASSPHRASE }}
8083 GPG_PRIVATE_KEY_BASE64 : ${{ secrets.GPG_PRIVATE_KEY }}
8184 run : |
8285 export ORG_GRADLE_PROJECT_signingKey=$(echo "$GPG_PRIVATE_KEY_BASE64" | base64 -d)
83- npx semantic-release
86+ ./gradlew publish --no-daemon
87+
88+ - name : Release staging repository
89+ env :
90+ OSSRH_USERNAME : ${{ secrets.OSSRH_USERNAME }}
91+ OSSRH_PASSWORD : ${{ secrets.OSSRH_PASSWORD }}
92+ run : |
93+ curl --fail-with-body -X POST -u "$OSSRH_USERNAME:$OSSRH_PASSWORD" \
94+ https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/co.lettermint
0 commit comments