@@ -9,7 +9,7 @@ name: Release
9
9
10
10
on :
11
11
release :
12
- types : [created]
12
+ types : [ created ]
13
13
14
14
jobs :
15
15
build :
27
27
with :
28
28
java-version : ' 21'
29
29
distribution : ' temurin'
30
- server-id : ossrh # Value of the distributionManagement/repository/id field of the pom.xml
31
- server-username : JRELEASER_MAVENCENTRAL_USERNAME
32
- server-password : JRELEASER_MAVENCENTRAL_PASSWORD
33
30
34
31
- name : Setup Gradle
35
- uses : gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
32
+ uses : gradle/actions/setup-gradle@v4
36
33
37
34
- name : Verify publication configuration
38
35
run : ./gradlew jreleaserConfig
@@ -53,12 +50,80 @@ jobs:
53
50
JRELEASER_GPG_SECRET_KEY : ${{ secrets.GPG_SECRET_KEY }}
54
51
JRELEASER_GPG_PASSPHRASE : ${{ secrets.SIGNING_PASSPHRASE }}
55
52
56
- - name : Publish to OSSRH repository
57
- run : ./gradlew publish jreleaserFullRelease
53
+ - name : Publish to Maven Central Portal
54
+ id : publish
55
+ run : ./gradlew publish jreleaserFullRelease --info --stacktrace -Djreleaser.verbose=true
58
56
env :
59
57
JRELEASER_MAVENCENTRAL_USERNAME : ${{ secrets.OSSRH_USERNAME }}
60
58
JRELEASER_MAVENCENTRAL_PASSWORD : ${{ secrets.OSSRH_TOKEN }}
61
59
JRELEASER_GPG_PUBLIC_KEY : ${{ secrets.GPG_PUBLIC_KEY }}
62
60
JRELEASER_GPG_SECRET_KEY : ${{ secrets.GPG_SECRET_KEY }}
63
61
JRELEASER_GPG_PASSPHRASE : ${{ secrets.SIGNING_PASSPHRASE }}
64
62
JRELEASER_GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
63
+
64
+ - name : Query Central Portal for validation errors
65
+ if : failure()
66
+ shell : bash
67
+ env :
68
+ OSSRH_USERNAME : ${{ secrets.OSSRH_USERNAME }}
69
+ OSSRH_TOKEN : ${{ secrets.OSSRH_TOKEN }}
70
+ run : |
71
+ set -euo pipefail
72
+
73
+ OUTPUT_PROPS="build/jreleaser/output.properties"
74
+
75
+ if [[ ! -f "$OUTPUT_PROPS" ]]; then
76
+ echo "::error title=File Missing::The file '$OUTPUT_PROPS' does not exist."
77
+ exit 1
78
+ fi
79
+
80
+ DEPLOY_ID=$(grep '^deploymentId=' "$OUTPUT_PROPS" | cut -d= -f2 || true)
81
+ if [[ -z "$DEPLOY_ID" ]]; then
82
+ echo "::error title=Missing Deployment ID::The 'deploymentId' key was not found in '$OUTPUT_PROPS'."
83
+ exit 1
84
+ fi
85
+
86
+ echo "Portal deploymentId: $DEPLOY_ID"
87
+
88
+ if [ -z "$OSSRH_USERNAME" ]; then
89
+ echo "::error title='OSSRH_USERNAME' is not set."
90
+ exit 1
91
+ fi
92
+
93
+ if [ -z "$OSSRH_TOKEN" ]; then
94
+ echo "::error title='OSSRH_TOKEN' is not set."
95
+ exit 1
96
+ fi
97
+
98
+ AUTH=$(printf "%s:%s" "$OSSRH_USERNAME" "$OSSRH_TOKEN" | base64)
99
+ echo "::add-mask::$AUTH"
100
+
101
+ STATUS_JSON=$(curl -sS \
102
+ -H "Authorization : Bearer $AUTH" \
103
+ -H "Content-Type : application/json" \
104
+ -X POST \
105
+ " https://central.sonatype.com/api/v1/publisher/status?id=$DEPLOY_ID" )
106
+
107
+ echo "$STATUS_JSON" | jq .
108
+
109
+ echo "$STATUS_JSON" | jq -r '.errors[]?.message' |
110
+ while read -r MSG; do
111
+ echo "::error title=Sonatype validation::$MSG"
112
+ done
113
+
114
+ {
115
+ echo "### Sonatype Central Portal validation result"
116
+ echo
117
+ echo '```json'
118
+ echo "$STATUS_JSON"
119
+ echo '```'
120
+ } >> "$GITHUB_STEP_SUMMARY"
121
+
122
+ - name : Upload JReleaser artefacts
123
+ if : always()
124
+ uses : actions/upload-artifact@v4
125
+ with :
126
+ name : jreleaser-logs
127
+ path : |
128
+ build/jreleaser/trace.log
129
+ build/jreleaser/output.properties
0 commit comments