Skip to content

Commit df43850

Browse files
chore: bump version for maven central publishing
1 parent 67bced2 commit df43850

File tree

7 files changed

+237
-186
lines changed

7 files changed

+237
-186
lines changed

.github/workflows/gradle-publish.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4646
SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
4747
SONATYPE_TOKEN: ${{ secrets.SONATYPE_TOKEN }}
48-
ORG_GRADLE_PROJECT_signing.keyId: ${{ secrets.SIGNING_KEY_ID }}
49-
ORG_GRADLE_PROJECT_signing.key: ${{ secrets.SIGNING_KEY }}
50-
ORG_GRADLE_PROJECT_signing.password: ${{ secrets.SIGNING_PASSWORD }}
48+
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
49+
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
50+
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
5151

.github/workflows/gradle.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,6 @@ jobs:
6969
uses: gradle/actions/dependency-submission@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2
7070

7171
env:
72-
ORG_GRADLE_PROJECT_signing.keyId: ${{ secrets.SIGNING_KEY_ID }}
73-
ORG_GRADLE_PROJECT_signing.key: ${{ secrets.SIGNING_KEY }}
74-
ORG_GRADLE_PROJECT_signing.password: ${{ secrets.SIGNING_PASSWORD }}
72+
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
73+
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
74+
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}

api/build.gradle.kts

Lines changed: 65 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import java.io.File
2+
import java.util.*
23

34
plugins {
45
id("buildlogic.java-library-conventions")
@@ -45,19 +46,38 @@ java {
4546
}
4647

4748

48-
// Signing
49-
afterEvaluate {
50-
// Check if we are running any kind of publish task
51-
val isPublishing = gradle.startParameter.taskNames.any { it.contains("publish", ignoreCase = true) }
5249

53-
if (isPublishing && project.hasProperty("signing.key")) {
54-
signing {
55-
useInMemoryPgpKeys(
56-
findProperty("signing.keyId") as String?,
57-
findProperty("signing.key") as String?,
58-
findProperty("signing.password") as String?
59-
)
60-
sign(publishing.publications["maven"])
50+
// TODO: Disable preview features on the branch when the next JDK is released
51+
val enablePreviewFeatures = true
52+
53+
val collectorArgs = listOf(
54+
"-XX:+UseZGC"
55+
)
56+
val standardArgs = listOf(
57+
"--enable-native-access=ALL-UNNAMED",
58+
) + collectorArgs
59+
60+
tasks.named<Test>("test") {
61+
jvmArgs = if (enablePreviewFeatures) {
62+
listOf("--enable-preview") + standardArgs
63+
} else {
64+
standardArgs
65+
}
66+
}
67+
68+
if (enablePreviewFeatures) {
69+
tasks.withType<JavaCompile>().configureEach {
70+
options.compilerArgs.addAll(listOf("--enable-preview"))
71+
}
72+
73+
tasks.withType<JavaExec>().configureEach {
74+
jvmArgs("--enable-preview")
75+
}
76+
77+
tasks.withType<Javadoc>() {
78+
(options as StandardJavadocDocletOptions).apply {
79+
addBooleanOption("-enable-preview", true)
80+
source = "24"
6181
}
6282
}
6383
}
@@ -66,14 +86,6 @@ publishing {
6686
repositories {
6787
// Publish to GitHub Packages
6888
// https://docs.github.com/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-gradle
69-
maven {
70-
name = "GitHubPackages"
71-
url = uri("https://maven.pkg.github.com/briancorbinxyz/overengineering-tictactoe")
72-
credentials {
73-
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
74-
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
75-
}
76-
}
7789
maven {
7890
name = "Sonatype"
7991
url = uri(
@@ -87,6 +99,14 @@ publishing {
8799
password = project.findProperty("sonatype.key") as String? ?: System.getenv("SONATYPE_TOKEN")
88100
}
89101
}
102+
maven {
103+
name = "GitHubPackages"
104+
url = uri("https://maven.pkg.github.com/briancorbinxyz/overengineering-tictactoe")
105+
credentials {
106+
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
107+
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
108+
}
109+
}
90110
}
91111
publications {
92112
create<MavenPublication>("maven") {
@@ -119,38 +139,34 @@ publishing {
119139
}
120140
}
121141
}
142+
fun decodeKey(raw: String): String =
143+
if (raw.contains("-----BEGIN PGP PRIVATE KEY BLOCK-----")) {
144+
raw
145+
} else {
146+
String(Base64.getDecoder().decode(raw))
147+
}
122148

123-
// TODO: Disable preview features on the branch when the next JDK is released
124-
val enablePreviewFeatures = true
149+
val rawSigningKey = System.getenv("SIGNING_KEY") ?: findProperty("signing.key") as String?
150+
val signingKey = rawSigningKey?.let(::decodeKey)
125151

126-
val collectorArgs = listOf(
127-
"-XX:+UseZGC"
128-
)
129-
val standardArgs = listOf(
130-
"--enable-native-access=ALL-UNNAMED",
131-
) + collectorArgs
152+
val signingPassword = System.getenv("SIGNING_PASSWORD") ?: findProperty("signing.password") as String?
153+
val signingKeyId = System.getenv("SIGNING_KEY_ID") ?: findProperty("signing.keyId") as String?
132154

133-
tasks.named<Test>("test") {
134-
jvmArgs = if (enablePreviewFeatures) {
135-
listOf("--enable-preview") + standardArgs
136-
} else {
137-
standardArgs
138-
}
139-
}
155+
val isPublishing = gradle.startParameter.taskNames.any { it.contains("publish", ignoreCase = true) }
140156

141-
if (enablePreviewFeatures) {
142-
tasks.withType<JavaCompile>().configureEach {
143-
options.compilerArgs.addAll(listOf("--enable-preview"))
144-
}
145-
146-
tasks.withType<JavaExec>().configureEach {
147-
jvmArgs("--enable-preview")
148-
}
149-
150-
tasks.withType<Javadoc>() {
151-
(options as StandardJavadocDocletOptions).apply {
152-
addBooleanOption("-enable-preview", true)
153-
source = "24"
154-
}
157+
val shouldSign = isPublishing && signingKey != null && signingPassword != null
158+
159+
logger.lifecycle("🔐 Signing check:")
160+
logger.lifecycle(" • isPublishing: $isPublishing")
161+
logger.lifecycle(" • signingKeyId: ${signingKeyId != null}")
162+
logger.lifecycle(" • signingKey present: ${signingKey != null}")
163+
logger.lifecycle(" • signingPassword present: ${signingPassword != null}")
164+
165+
if (shouldSign) {
166+
signing {
167+
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
168+
sign(publishing.publications)
155169
}
170+
} else {
171+
logger.lifecycle("⚠️ Skipping signing: Not publishing or signing credentials are incomplete.")
156172
}

app/build.gradle.kts

Lines changed: 91 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import java.io.File
2+
import java.util.*
23

34
plugins {
45
// Apply the application plugin to add support for building a CLI application in Java.
@@ -58,80 +59,6 @@ tasks.run.configure {
5859
standardInput = System.`in`
5960
}
6061

61-
// https://docs.gradle.org/current/userguide/publishing_maven.html
62-
publishing {
63-
repositories {
64-
// Publish to GitHub Packages
65-
// https://docs.github.com/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-gradle
66-
maven {
67-
name = "GitHubPackages"
68-
url = uri("https://maven.pkg.github.com/briancorbinxyz/overengineering-tictactoe")
69-
credentials {
70-
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
71-
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
72-
}
73-
}
74-
maven {
75-
name = "Sonatype"
76-
url = uri(
77-
if (version.toString().endsWith("SNAPSHOT"))
78-
"https://s01.oss.sonatype.org/content/repositories/snapshots/"
79-
else
80-
"https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
81-
)
82-
credentials {
83-
username = project.findProperty("sonatype.user") as String? ?: System.getenv("SONATYPE_USER")
84-
password = project.findProperty("sonatype.key") as String? ?: System.getenv("SONATYPE_TOKEN")
85-
}
86-
}
87-
}
88-
publications {
89-
create<MavenPublication>("maven") {
90-
groupId = "org.xxdc.oss.example"
91-
artifactId = "tictactoe-app"
92-
from(components["java"])
93-
pom {
94-
name.set("tictactoe")
95-
description.set("An Over-Engineered Tic Tac Toe Game and Game Server")
96-
url.set("https://github.com/briancorbinxyz/overengineering-tictactoe")
97-
licenses {
98-
license {
99-
name.set("MIT License")
100-
url.set("https://opensource.org/licenses/MIT")
101-
}
102-
developers {
103-
developer {
104-
id.set("briancorbinxyz")
105-
name.set("Brian Corbin")
106-
email.set("mail@briancorbin.xyz")
107-
}
108-
}
109-
}
110-
scm {
111-
connection.set("scm:git:git://github.com/briancorbinxyz/overengineering-tictactoe.git")
112-
developerConnection.set("scm:git:ssh://github.com/briancorbinxyz/overengineering-tictactoe.git")
113-
url.set("https://github.com/briancorbinxyz/overengineering-tictactoe")
114-
}
115-
}
116-
}
117-
}
118-
}
119-
// Signing
120-
afterEvaluate {
121-
// Check if we are running any kind of publish task
122-
val isPublishing = gradle.startParameter.taskNames.any { it.contains("publish", ignoreCase = true) }
123-
124-
if (isPublishing && project.hasProperty("signing.key")) {
125-
signing {
126-
useInMemoryPgpKeys(
127-
findProperty("signing.keyId") as String?,
128-
findProperty("signing.key") as String?,
129-
findProperty("signing.password") as String?
130-
)
131-
sign(publishing.publications["maven"])
132-
}
133-
}
134-
}
13562
// Install a pre-commit hook to run the Gradle task "spotlessApply" before committing changes.
13663
tasks.register("installGitHook") {
13764
doLast {
@@ -223,3 +150,93 @@ if (enablePreviewFeatures) {
223150

224151
}
225152

153+
// https://docs.gradle.org/current/userguide/publishing_maven.html
154+
publishing {
155+
repositories {
156+
// Publish to GitHub Packages
157+
// https://docs.github.com/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-gradle
158+
maven {
159+
name = "Sonatype"
160+
url = uri(
161+
if (version.toString().endsWith("SNAPSHOT"))
162+
"https://s01.oss.sonatype.org/content/repositories/snapshots/"
163+
else
164+
"https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
165+
)
166+
credentials {
167+
username = project.findProperty("sonatype.user") as String? ?: System.getenv("SONATYPE_USER")
168+
password = project.findProperty("sonatype.key") as String? ?: System.getenv("SONATYPE_TOKEN")
169+
}
170+
}
171+
maven {
172+
name = "GitHubPackages"
173+
url = uri("https://maven.pkg.github.com/briancorbinxyz/overengineering-tictactoe")
174+
credentials {
175+
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
176+
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
177+
}
178+
}
179+
}
180+
publications {
181+
create<MavenPublication>("maven") {
182+
groupId = "org.xxdc.oss.example"
183+
artifactId = "tictactoe-app"
184+
from(components["java"])
185+
pom {
186+
name.set("tictactoe")
187+
description.set("An Over-Engineered Tic Tac Toe Game and Game Server")
188+
url.set("https://github.com/briancorbinxyz/overengineering-tictactoe")
189+
licenses {
190+
license {
191+
name.set("MIT License")
192+
url.set("https://opensource.org/licenses/MIT")
193+
}
194+
developers {
195+
developer {
196+
id.set("briancorbinxyz")
197+
name.set("Brian Corbin")
198+
email.set("mail@briancorbin.xyz")
199+
}
200+
}
201+
}
202+
scm {
203+
connection.set("scm:git:git://github.com/briancorbinxyz/overengineering-tictactoe.git")
204+
developerConnection.set("scm:git:ssh://github.com/briancorbinxyz/overengineering-tictactoe.git")
205+
url.set("https://github.com/briancorbinxyz/overengineering-tictactoe")
206+
}
207+
}
208+
}
209+
}
210+
}
211+
// Signing
212+
fun decodeKey(raw: String): String =
213+
if (raw.contains("-----BEGIN PGP PRIVATE KEY BLOCK-----")) {
214+
raw
215+
} else {
216+
String(Base64.getDecoder().decode(raw))
217+
}
218+
219+
val rawSigningKey = System.getenv("SIGNING_KEY") ?: findProperty("signing.key") as String?
220+
val signingKey = rawSigningKey?.let(::decodeKey)
221+
222+
val signingPassword = System.getenv("SIGNING_PASSWORD") ?: findProperty("signing.password") as String?
223+
val signingKeyId = System.getenv("SIGNING_KEY_ID") ?: findProperty("signing.keyId") as String?
224+
225+
val isPublishing = gradle.startParameter.taskNames.any { it.contains("publish", ignoreCase = true) }
226+
227+
val shouldSign = isPublishing && signingKey != null && signingPassword != null
228+
229+
logger.lifecycle("🔐 Signing check:")
230+
logger.lifecycle(" • isPublishing: $isPublishing")
231+
logger.lifecycle(" • signingKeyId: ${signingKeyId != null}")
232+
logger.lifecycle(" • signingKey present: ${signingKey != null}")
233+
logger.lifecycle(" • signingPassword present: ${signingPassword != null}")
234+
235+
if (shouldSign) {
236+
signing {
237+
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
238+
sign(publishing.publications)
239+
}
240+
} else {
241+
logger.lifecycle("⚠️ Skipping signing: Not publishing or signing credentials are incomplete.")
242+
}

buildSrc/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ testing {
7070
}
7171
}
7272

73-
val projectVersion by extra("2.0.7")
73+
val projectVersion by extra("2.0.8")
7474

7575
public val jdkVersion = 24
7676
// Apply a specific Java toolchain to ease working on different environments.
Binary file not shown.

0 commit comments

Comments
 (0)