Skip to content

Commit 081adc2

Browse files
authored
Improve publication workflow (#335)
1 parent 5c8f0eb commit 081adc2

File tree

4 files changed

+121
-99
lines changed

4 files changed

+121
-99
lines changed

.github/workflows/github-packages.yml

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Publish to GitHub packages
2+
3+
on:
4+
push:
5+
branches:
6+
- neo
7+
workflow_dispatch:
8+
9+
jobs:
10+
publish-snapshot:
11+
runs-on: ubuntu-24.04
12+
13+
permissions:
14+
contents: read
15+
packages: write
16+
17+
steps:
18+
- name: Checkout code
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 0
22+
23+
- name: Set up Java
24+
uses: actions/setup-java@v4
25+
with:
26+
java-version: '21'
27+
distribution: 'temurin'
28+
29+
- name: Set up Gradle
30+
uses: gradle/actions/setup-gradle@v4
31+
32+
- name: Generate snapshot version
33+
id: version
34+
run: |
35+
DATE=$(date +'%Y%m%d')
36+
COMMIT_HASH=$(git rev-parse --short HEAD)
37+
SNAPSHOT_VERSION="${DATE}+${COMMIT_HASH}"
38+
echo "snapshot_version=${SNAPSHOT_VERSION}" >> $GITHUB_OUTPUT
39+
echo "Generated snapshot version: ${SNAPSHOT_VERSION}"
40+
echo "::notice title=Snapshot Version::${SNAPSHOT_VERSION}"
41+
42+
- name: Publish snapshot
43+
run: ./gradlew publish -Pversion=${{ steps.version.outputs.snapshot_version }}
44+
env:
45+
GITHUB_ACTOR: ${{ github.actor }}
46+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47+
48+
- name: Write summary
49+
run: |
50+
echo "## 📦 Snapshot Published" >> $GITHUB_STEP_SUMMARY
51+
echo "**Version:** \`${{ steps.version.outputs.snapshot_version }}\`" >> $GITHUB_STEP_SUMMARY
52+
echo "**Branch:** \`${{ github.ref_name }}\`" >> $GITHUB_STEP_SUMMARY
53+
echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY
54+
echo "**Repository:** GitHub Packages" >> $GITHUB_STEP_SUMMARY

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
arguments: |
3131
publish
3232
-PincludeDokka=true
33-
-PsemVer=${{inputs.semVer}}
33+
-Pversion=${{inputs.semVer}}
3434
-Pactor=${{ secrets.MAVEN_CENTRAL_LOGIN }}
3535
-Ptoken=${{ secrets.MAVEN_CENTRAL_TOKEN }}
3636
-PgpgKey="${{ secrets.OSSRH_GPG_SECRET_KEY }}"

build.gradle.kts

Lines changed: 66 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import org.jetbrains.dokka.gradle.DokkaTaskPartial
22

3-
val semVer: String? by project
4-
val includeDokka: String? by project
3+
// Use `-Pgroup=com.github.UnitTestBot` to emulate JitPack publishing.
4+
val groupProp = providers.gradleProperty("group").orNull
5+
// Use `-Pversion=1.5` to specify version for publishing.
6+
val versionProp = providers.gradleProperty("version").orNull
57

6-
group = "org.jacodb"
7-
version = semVer ?: "1.4-SNAPSHOT"
8+
group = groupProp ?: "org.jacodb"
9+
version = versionProp ?: "1.4-SNAPSHOT"
810

911
plugins {
1012
kotlin("jvm") version Versions.kotlin
@@ -159,81 +161,77 @@ tasks.dokkaHtmlMultiModule {
159161
)
160162
}
161163

162-
val repoUrl: String = project.properties["repoUrl"] as? String
163-
?: "https://maven.pkg.github.com/UnitTestBot/jacodb"
164-
165-
if (!repoUrl.isNullOrEmpty()) {
166-
configure(
167-
listOf(
168-
project(":jacodb-api-common"),
169-
project(":jacodb-api-jvm"),
170-
project(":jacodb-api-storage"),
171-
project(":jacodb-core"),
172-
project(":jacodb-storage"),
173-
project(":jacodb-approximations"),
174-
project(":jacodb-taint-configuration"),
175-
project(":jacodb-ets"),
176-
)
177-
) {
178-
tasks {
179-
val dokkaJavadocJar by creating(Jar::class) {
180-
dependsOn(dokkaJavadoc)
181-
from(dokkaJavadoc.flatMap { it.outputDirectory })
182-
archiveClassifier.set("javadoc")
183-
}
164+
val includeDokka: String? by project
184165

185-
val sourcesJar by creating(Jar::class) {
186-
archiveClassifier.set("sources")
187-
from(sourceSets.getByName("main").kotlin.srcDirs)
188-
}
166+
configure(
167+
listOf(
168+
project(":jacodb-api-common"),
169+
project(":jacodb-api-jvm"),
170+
project(":jacodb-api-storage"),
171+
project(":jacodb-core"),
172+
project(":jacodb-storage"),
173+
project(":jacodb-approximations"),
174+
project(":jacodb-taint-configuration"),
175+
project(":jacodb-ets"),
176+
)
177+
) {
178+
val sourcesJar by tasks.registering(Jar::class) {
179+
archiveClassifier.set("sources")
180+
from(sourceSets.getByName("main").kotlin.srcDirs)
181+
}
189182

190-
artifacts {
191-
archives(sourcesJar)
192-
if (includeDokka != null) {
193-
archives(dokkaJavadocJar)
194-
}
195-
}
183+
val dokkaJavadocJar by tasks.registering(Jar::class) {
184+
dependsOn(tasks.dokkaJavadoc)
185+
from(tasks.dokkaJavadoc.flatMap { it.outputDirectory })
186+
archiveClassifier.set("javadoc")
187+
}
196188

189+
artifacts {
190+
archives(sourcesJar)
191+
if (includeDokka != null) {
192+
archives(dokkaJavadocJar)
197193
}
198-
publishing {
199-
publications {
200-
register<MavenPublication>("jar") {
201-
from(components["java"])
202-
setOf("apiElements", "runtimeElements")
203-
.flatMap { configName -> configurations[configName].hierarchy }
204-
.forEach { configuration ->
205-
configuration.dependencies.removeIf { dependency ->
206-
dependency.version.isNullOrBlank()
207-
}
194+
}
195+
196+
publishing {
197+
publications {
198+
register<MavenPublication>("main") {
199+
from(components["java"])
200+
setOf("apiElements", "runtimeElements")
201+
.flatMap { configName -> configurations[configName].hierarchy }
202+
.forEach { configuration ->
203+
configuration.dependencies.removeIf { dependency ->
204+
dependency.version.isNullOrBlank()
208205
}
209-
artifact(tasks.named("sourcesJar"))
210-
artifact(tasks.named("dokkaJavadocJar"))
206+
}
207+
artifact(sourcesJar)
208+
artifact(dokkaJavadocJar)
209+
addPom()
210+
signPublication(this@configure)
211+
}
212+
}
211213

212-
groupId = "org.jacodb"
213-
artifactId = project.name
214-
addPom()
215-
signPublication(this@configure)
214+
repositories {
215+
maven {
216+
name = "GitHubPackages"
217+
url = uri("https://maven.pkg.github.com/UnitTestBot/jacodb")
218+
credentials {
219+
username = System.getenv("GITHUB_ACTOR")
220+
password = System.getenv("GITHUB_TOKEN")
216221
}
217222
}
218223

219-
repositories {
220-
maven {
221-
name = "repo"
222-
url = uri(repoUrl)
223-
val actor: String? by project
224-
val token: String? by project
225-
226-
credentials {
227-
username = actor
228-
password = token
229-
}
230-
}
224+
// Use `./gradlew publishAllPublicationsToBuildRepository -Pversion=1.5`
225+
// to publish to `./build/repository` directory.
226+
maven {
227+
name = "Build"
228+
url = uri(layout.buildDirectory.dir("repository"))
231229
}
232230
}
233231
}
234232
}
235233

236-
fun MavenPublication.signPublication(project: Project) = with(project) {
234+
fun MavenPublication.signPublication(project: Project) {
237235
signing {
238236
val gpgKey: String? by project
239237
val gpgPassphrase: String? by project
@@ -250,9 +248,9 @@ fun MavenPublication.signPublication(project: Project) = with(project) {
250248

251249
fun MavenPublication.addPom() {
252250
pom {
253-
packaging = "jar"
254-
name.set("org.jacodb")
255-
description.set("analyse JVM bytecode with pleasure")
251+
name.set("JacoDB")
252+
description.set("Analyse JVM bytecode with pleasure")
253+
url = "https://www.jacodb.org"
256254
issueManagement {
257255
url.set("https://github.com/UnitTestBot/jacodb/issues")
258256
}
@@ -261,7 +259,6 @@ fun MavenPublication.addPom() {
261259
developerConnection.set("scm:git:https://github.com/UnitTestBot/jacodb.git")
262260
url.set("https://www.jacodb.org")
263261
}
264-
url.set("https://www.jacodb.org")
265262
licenses {
266263
license {
267264
name.set("The Apache License, Version 2.0")

0 commit comments

Comments
 (0)