Skip to content

Commit e800fc1

Browse files
ci(publish): add Maven Central publishing to release workflow
1 parent 837d1e9 commit e800fc1

File tree

5 files changed

+127
-3
lines changed

5 files changed

+127
-3
lines changed

.github/workflows/release.yml

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,40 @@ jobs:
1919
release-please:
2020
name: Release Please
2121
runs-on: ubuntu-latest
22+
outputs:
23+
release_created: ${{ steps.release.outputs.release_created }}
24+
tag_name: ${{ steps.release.outputs.tag_name }}
25+
version: ${{ steps.release.outputs.version }}
2226
steps:
2327
- name: Run Release Please
28+
id: release
2429
uses: googleapis/release-please-action@16a9c90856f42705d54a6fda1823352bdc62cf38 # v4.4.0
2530
with:
2631
token: ${{ secrets.GITHUB_TOKEN }}
2732
config-file: release-please-config.json
28-
manifest-file: .release-please-manifest.json
33+
manifest-file: .release-please-manifest.json
34+
35+
publish:
36+
name: Publish to Maven Central
37+
needs: release-please
38+
if: ${{ needs.release-please.outputs.release_created == 'true' }}
39+
runs-on: ubuntu-latest
40+
steps:
41+
- name: Checkout code
42+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
43+
44+
- name: Set up JDK and GPG
45+
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
46+
with:
47+
java-version: '17'
48+
distribution: 'temurin'
49+
cache: 'gradle'
50+
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
51+
gpg-passphrase: GPG_PASSPHRASE
52+
53+
- name: Publish to Maven Central
54+
run: ./gradlew publishAllPublicationsToMavenCentralRepository
55+
env:
56+
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
57+
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
58+
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}

ans-sdk-agent-client/src/main/java/com/godaddy/ans/sdk/agent/AnsClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Client for connecting to ANS-registered agents with configurable verification.
1919
*
2020
* <p>This is the main entry point for agent-to-agent communication. Use
21-
* {@link com.godaddy.ans.sdk.discovery.DiscoveryClient} separately for agent
21+
* {@code DiscoveryClient} from the discovery module separately for agent
2222
* resolution if needed.</p>
2323
*
2424
* <h2>Quick Start - Request/Response</h2>

ans-sdk-agent-client/src/main/java/com/godaddy/ans/sdk/agent/verification/DnsResolverConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*
1818
* <h2>Resolver Options</h2>
1919
* <table>
20+
* <caption>Available DNS resolver configurations</caption>
2021
* <tr><th>Config</th><th>Primary IP</th><th>Provider</th></tr>
2122
* <tr><td>CLOUDFLARE</td><td>1.1.1.1</td><td>Cloudflare DNS</td></tr>
2223
* <tr><td>GOOGLE</td><td>8.8.8.8</td><td>Google Public DNS</td></tr>

ans-sdk-api/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,13 @@ tasks.compileJava {
7272
// Disable checkstyle for generated code
7373
tasks.named("checkstyleMain") {
7474
enabled = false
75+
}
76+
77+
// Ensure source/javadoc jars wait for code generation
78+
tasks.named("sourcesJar") {
79+
dependsOn(tasks.openApiGenerate)
80+
}
81+
82+
tasks.named("javadocJar") {
83+
dependsOn(tasks.openApiGenerate)
7584
}

build.gradle.kts

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,20 @@ plugins {
77

88
allprojects {
99
group = "com.godaddy.ans"
10-
version = "0.1.0"
10+
version = "0.1.0" // x-release-please-version
1111
}
1212

13+
// Modules to publish (excludes examples)
14+
val publishableModules = setOf(
15+
"ans-sdk-api",
16+
"ans-sdk-core",
17+
"ans-sdk-crypto",
18+
"ans-sdk-registration",
19+
"ans-sdk-discovery",
20+
"ans-sdk-agent-client",
21+
"ans-sdk-transparency"
22+
)
23+
1324
subprojects {
1425
apply(plugin = "java-library")
1526
apply(plugin = "checkstyle")
@@ -65,4 +76,77 @@ subprojects {
6576
}
6677
}
6778
}
79+
80+
// Apply publishing only to publishable modules
81+
if (name in publishableModules) {
82+
apply(plugin = "maven-publish")
83+
apply(plugin = "signing")
84+
85+
java {
86+
withSourcesJar()
87+
withJavadocJar()
88+
}
89+
90+
configure<PublishingExtension> {
91+
publications {
92+
create<MavenPublication>("mavenJava") {
93+
from(components["java"])
94+
95+
pom {
96+
name.set(project.name)
97+
description.set("ANS SDK - ${project.name}")
98+
url.set("https://github.com/godaddy/ans-sdk-java")
99+
100+
licenses {
101+
license {
102+
name.set("MIT License")
103+
url.set("https://opensource.org/licenses/MIT")
104+
}
105+
}
106+
107+
developers {
108+
developer {
109+
id.set("godaddy")
110+
name.set("GoDaddy")
111+
email.set("oswg@godaddy.com")
112+
}
113+
}
114+
115+
scm {
116+
connection.set("scm:git:git://github.com/godaddy/ans-sdk-java.git")
117+
developerConnection.set("scm:git:ssh://github.com/godaddy/ans-sdk-java.git")
118+
url.set("https://github.com/godaddy/ans-sdk-java")
119+
}
120+
}
121+
}
122+
}
123+
124+
repositories {
125+
// Maven Central via Sonatype Central Portal
126+
maven {
127+
name = "mavenCentral"
128+
url = uri("https://central.sonatype.com/api/v1/publisher/upload")
129+
130+
credentials {
131+
username = System.getenv("MAVEN_CENTRAL_USERNAME")
132+
?: project.findProperty("mavenCentralUsername") as String? ?: ""
133+
password = System.getenv("MAVEN_CENTRAL_PASSWORD")
134+
?: project.findProperty("mavenCentralPassword") as String? ?: ""
135+
}
136+
}
137+
}
138+
}
139+
140+
configure<SigningExtension> {
141+
// Only sign when publishing to Maven Central (skip for local testing)
142+
setRequired({
143+
gradle.taskGraph.hasTask("publishAllPublicationsToMavenCentralRepository")
144+
})
145+
146+
// Use GPG command (key imported by actions/setup-java)
147+
useGpgCmd()
148+
149+
sign(the<PublishingExtension>().publications["mavenJava"])
150+
}
151+
}
68152
}

0 commit comments

Comments
 (0)