diff --git a/.github/workflows/github-packages.yml b/.github/workflows/github-packages.yml deleted file mode 100644 index 498be8115..000000000 --- a/.github/workflows/github-packages.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Publish to GitHub packages - -on: - push: - branches: - - develop - -jobs: - publish: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 11 - uses: actions/setup-java@v3 - with: - java-version: '11' - distribution: 'temurin' - - name: Publish package - uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 - with: - gradle-version: 7.6.1 - arguments: | - publish - -Pactor=${{ github.actor }} - -Ptoken=${{ secrets.GITHUB_TOKEN }} - -PrepoUrl=https://maven.pkg.github.com/UnitTestBot/jacodb diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml new file mode 100644 index 000000000..91a19a8cf --- /dev/null +++ b/.github/workflows/publish-snapshot.yml @@ -0,0 +1,54 @@ +name: Publish to GitHub packages + +on: + push: + branches: + - neo + workflow_dispatch: + +jobs: + publish-snapshot: + runs-on: ubuntu-24.04 + + permissions: + contents: read + packages: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Generate snapshot version + id: version + run: | + DATE=$(date +'%Y%m%d') + COMMIT_HASH=$(git rev-parse --short HEAD) + SNAPSHOT_VERSION="${DATE}+${COMMIT_HASH}" + echo "snapshot_version=${SNAPSHOT_VERSION}" >> $GITHUB_OUTPUT + echo "Generated snapshot version: ${SNAPSHOT_VERSION}" + echo "::notice title=Snapshot Version::${SNAPSHOT_VERSION}" + + - name: Publish snapshot + run: ./gradlew publish -Pversion=${{ steps.version.outputs.snapshot_version }} + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Write summary + run: | + echo "## 📦 Snapshot Published" >> $GITHUB_STEP_SUMMARY + echo "**Version:** \`${{ steps.version.outputs.snapshot_version }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Branch:** \`${{ github.ref_name }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Repository:** GitHub Packages" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index db9fb5075..0a2272d43 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,7 +30,7 @@ jobs: arguments: | publish -PincludeDokka=true - -PsemVer=${{inputs.semVer}} + -Pversion=${{inputs.semVer}} -Pactor=${{ secrets.MAVEN_CENTRAL_LOGIN }} -Ptoken=${{ secrets.MAVEN_CENTRAL_TOKEN }} -PgpgKey="${{ secrets.OSSRH_GPG_SECRET_KEY }}" diff --git a/build.gradle.kts b/build.gradle.kts index a6e5a724b..93cf513f7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,12 @@ import org.jetbrains.dokka.gradle.DokkaTaskPartial -val semVer: String? by project -val includeDokka: String? by project +// Use `-Pgroup=com.github.UnitTestBot` to emulate JitPack publishing. +val groupProp = providers.gradleProperty("group").orNull +// Use `-Pversion=1.5` to specify version for publishing. +val versionProp = providers.gradleProperty("version").orNull -group = "org.jacodb" -version = semVer ?: "1.4-SNAPSHOT" +group = groupProp ?: "org.jacodb" +version = versionProp ?: "1.4-SNAPSHOT" plugins { kotlin("jvm") version Versions.kotlin @@ -159,81 +161,77 @@ tasks.dokkaHtmlMultiModule { ) } -val repoUrl: String = project.properties["repoUrl"] as? String - ?: "https://maven.pkg.github.com/UnitTestBot/jacodb" - -if (!repoUrl.isNullOrEmpty()) { - configure( - listOf( - project(":jacodb-api-common"), - project(":jacodb-api-jvm"), - project(":jacodb-api-storage"), - project(":jacodb-core"), - project(":jacodb-storage"), - project(":jacodb-approximations"), - project(":jacodb-taint-configuration"), - project(":jacodb-ets"), - ) - ) { - tasks { - val dokkaJavadocJar by creating(Jar::class) { - dependsOn(dokkaJavadoc) - from(dokkaJavadoc.flatMap { it.outputDirectory }) - archiveClassifier.set("javadoc") - } +val includeDokka: String? by project - val sourcesJar by creating(Jar::class) { - archiveClassifier.set("sources") - from(sourceSets.getByName("main").kotlin.srcDirs) - } +configure( + listOf( + project(":jacodb-api-common"), + project(":jacodb-api-jvm"), + project(":jacodb-api-storage"), + project(":jacodb-core"), + project(":jacodb-storage"), + project(":jacodb-approximations"), + project(":jacodb-taint-configuration"), + project(":jacodb-ets"), + ) +) { + val sourcesJar by tasks.registering(Jar::class) { + archiveClassifier.set("sources") + from(sourceSets.getByName("main").kotlin.srcDirs) + } - artifacts { - archives(sourcesJar) - if (includeDokka != null) { - archives(dokkaJavadocJar) - } - } + val dokkaJavadocJar by tasks.registering(Jar::class) { + dependsOn(tasks.dokkaJavadoc) + from(tasks.dokkaJavadoc.flatMap { it.outputDirectory }) + archiveClassifier.set("javadoc") + } + artifacts { + archives(sourcesJar) + if (includeDokka != null) { + archives(dokkaJavadocJar) } - publishing { - publications { - register("jar") { - from(components["java"]) - setOf("apiElements", "runtimeElements") - .flatMap { configName -> configurations[configName].hierarchy } - .forEach { configuration -> - configuration.dependencies.removeIf { dependency -> - dependency.version.isNullOrBlank() - } + } + + publishing { + publications { + register("main") { + from(components["java"]) + setOf("apiElements", "runtimeElements") + .flatMap { configName -> configurations[configName].hierarchy } + .forEach { configuration -> + configuration.dependencies.removeIf { dependency -> + dependency.version.isNullOrBlank() } - artifact(tasks.named("sourcesJar")) - artifact(tasks.named("dokkaJavadocJar")) + } + artifact(sourcesJar) + artifact(dokkaJavadocJar) + addPom() + signPublication(this@configure) + } + } - groupId = "org.jacodb" - artifactId = project.name - addPom() - signPublication(this@configure) + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/UnitTestBot/jacodb") + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") } } - repositories { - maven { - name = "repo" - url = uri(repoUrl) - val actor: String? by project - val token: String? by project - - credentials { - username = actor - password = token - } - } + // Use `./gradlew publishAllPublicationsToBuildRepository -Pversion=1.5` + // to publish to `./build/repository` directory. + maven { + name = "Build" + url = uri(layout.buildDirectory.dir("repository")) } } } } -fun MavenPublication.signPublication(project: Project) = with(project) { +fun MavenPublication.signPublication(project: Project) { signing { val gpgKey: String? by project val gpgPassphrase: String? by project @@ -250,9 +248,9 @@ fun MavenPublication.signPublication(project: Project) = with(project) { fun MavenPublication.addPom() { pom { - packaging = "jar" - name.set("org.jacodb") - description.set("analyse JVM bytecode with pleasure") + name.set("JacoDB") + description.set("Analyse JVM bytecode with pleasure") + url = "https://www.jacodb.org" issueManagement { url.set("https://github.com/UnitTestBot/jacodb/issues") } @@ -261,7 +259,6 @@ fun MavenPublication.addPom() { developerConnection.set("scm:git:https://github.com/UnitTestBot/jacodb.git") url.set("https://www.jacodb.org") } - url.set("https://www.jacodb.org") licenses { license { name.set("The Apache License, Version 2.0")