From 0006337075ab00ede9af1981864a74b31300cc25 Mon Sep 17 00:00:00 2001 From: Denisia Enasescu Date: Tue, 10 Feb 2026 15:24:10 +0100 Subject: [PATCH 1/2] feat: update the group ID --- .../src/main/kotlin/GobleyGradleBuildExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt b/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt index d5d9eaa3..b268637b 100644 --- a/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt +++ b/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt @@ -66,7 +66,7 @@ private fun Project.configureProjectProperties( "../crates/gobley-uniffi-bindgen/Cargo.toml" ).asFile ) - group = "dev.gobley.gradle" + group = "com.nedap.healthcare.gobley" version = when { bindgenManifest.version.contains('-') -> bindgenManifest.version.substringBefore('-') + "-SNAPSHOT" else -> bindgenManifest.version From 1f6919c0de0b624025b940479c88dc5d89e86940 Mon Sep 17 00:00:00 2001 From: Denisia Enasescu Date: Tue, 10 Feb 2026 16:30:40 +0100 Subject: [PATCH 2/2] feat: publish plugin to jfrog --- .github/workflows/publish-jfrog.yml | 72 +++++++++++++++++++ build-logic/build.gradle.kts | 1 + .../gobley-gradle-build/build.gradle.kts | 1 + .../main/kotlin/GobleyGradleBuildExtension.kt | 32 +++++++++ gradle/libs.versions.toml | 2 + 5 files changed, 108 insertions(+) create mode 100644 .github/workflows/publish-jfrog.yml diff --git a/.github/workflows/publish-jfrog.yml b/.github/workflows/publish-jfrog.yml new file mode 100644 index 00000000..4e789d75 --- /dev/null +++ b/.github/workflows/publish-jfrog.yml @@ -0,0 +1,72 @@ +name: Publish Gobley Plugins to JFrog + +on: + push: + branches: + - develop + - main + paths: + - 'build-logic/**' + - 'crates/gobley-uniffi-bindgen/Cargo.toml' + - '.github/workflows/publish-jfrog.yml' + workflow_dispatch: + +jobs: + publish: + name: Publish Gobley Plugins to JFrog Artifactory + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: false + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build plugins + run: | + ./gradlew :build-logic:gobley-gradle-cargo:build \ + :build-logic:gobley-gradle-uniffi:build \ + :build-logic:gobley-gradle-rust:build \ + :build-logic:gobley-gradle:build \ + --no-daemon -x test \ + -Pgobley.projects.examples.app=false \ + -Pgobley.projects.examples.audioCppApp=false \ + -Pgobley.projects.examples.customTypes=false \ + -Pgobley.projects.examples.tokioBlake3App=false \ + -Pgobley.projects.examples.tokioBoringApp=false \ + -Pgobley.projects.gradleTests=false \ + -Pgobley.projects.uniffiTests=false \ + -Pgobley.projects.uniffiTests.extTypes=false \ + -Pgobley.projects.uniffiTests.extTypes=false + + - name: Publish to JFrog Artifactory + env: + ORG_GRADLE_PROJECT_artifactoryUser: ${{ secrets.HC_JFROG_USER }} + ORG_GRADLE_PROJECT_artifactoryPassword: ${{ secrets.HC_JFROG_PASSWORD }} + run: | + ./gradlew :build-logic:gobley-gradle-cargo:artifactoryPublish \ + :build-logic:gobley-gradle-uniffi:artifactoryPublish \ + :build-logic:gobley-gradle-rust:artifactoryPublish \ + :build-logic:gobley-gradle:artifactoryPublish \ + --no-daemon \ + -Pgobley.projects.examples.app=false \ + -Pgobley.projects.examples.audioCppApp=false \ + -Pgobley.projects.examples.customTypes=false \ + -Pgobley.projects.examples.tokioBlake3App=false \ + -Pgobley.projects.examples.tokioBoringApp=false \ + -Pgobley.projects.gradleTests=false \ + -Pgobley.projects.uniffiTests=false \ + -Pgobley.projects.uniffiTests.extTypes=false + + - name: Verify Publication + run: | + echo "✅ Published Gobley plugins to JFrog Artifactory" + echo "Check JFrog Artifactory to verify artifacts:" + echo "https://nedap.jfrog.io/nedap/webapp/#/artifacts/browse/tree/General/libs-releases-local/com/nedap/healthcare/gobley" diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index e89def78..49572821 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -4,5 +4,6 @@ plugins { alias(libs.plugins.buildconfig) apply false alias(libs.plugins.vanniktech.maven.publish) apply false alias(libs.plugins.kotlinx.binary.compatibility.validator) apply false + alias(libs.plugins.jfrog.artifactory) apply false id("gobley-gradle-build") apply false } \ No newline at end of file diff --git a/build-logic/gobley-gradle-build/build.gradle.kts b/build-logic/gobley-gradle-build/build.gradle.kts index 4639a281..146afa54 100644 --- a/build-logic/gobley-gradle-build/build.gradle.kts +++ b/build-logic/gobley-gradle-build/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { compileOnly(gradleKotlinDsl()) compileOnly(plugin(libs.plugins.kotlin.jvm)) compileOnly(plugin(libs.plugins.vanniktech.maven.publish)) + implementation("org.jfrog.buildinfo:build-info-extractor-gradle:${libs.versions.jfrog.artifactory.get()}") implementation(libs.kotlinx.serialization.core) implementation(libs.tomlkt) } diff --git a/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt b/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt index b268637b..6e62d9dc 100644 --- a/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt +++ b/build-logic/gobley-gradle-build/src/main/kotlin/GobleyGradleBuildExtension.kt @@ -13,8 +13,10 @@ import com.vanniktech.maven.publish.MavenPublishBaseExtension import com.vanniktech.maven.publish.SonatypeHost import org.gradle.api.Project import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention abstract class GobleyGradleBuildExtension(private val project: Project) { val uniffiBindgenManifest = CargoManifest.fromFile( @@ -56,6 +58,7 @@ private fun Project.configureGobleyGradleProject( } } configureMavenCentralPublishing(gradlePlugin, signing) + configureJfrogPublishing() } private fun Project.configureProjectProperties( @@ -131,6 +134,35 @@ private fun Project.configureMavenCentralPublishing(gradlePlugin: Boolean, signi } } +private fun Project.configureJfrogPublishing() { + plugins.apply("com.jfrog.artifactory") + + afterEvaluate { + val artifactoryCredentials = getArtifactoryCredentials() + val isSnapshot = version.toString().contains("-SNAPSHOT") || version.toString().contains("-") + val repositoryPath = if (isSnapshot) "libs-snapshots-local" else "libs-releases-local" + + extensions.configure { + setContextUrl("https://nedap.jfrog.io/nedap") + publish { + repository { + repoKey = repositoryPath + username = artifactoryCredentials.first + password = artifactoryCredentials.second + } + defaults { + publications("ALL_PUBLICATIONS") + } + } + } + } +} + +private fun Project.getArtifactoryCredentials(): Pair { + return findProperty("artifactoryUser") as String? to + findProperty("artifactoryPassword") as String? +} + private fun Project.propertyOrEnv(propertyName: String, envName: String = propertyName): String? { return findProperty(propertyName)?.toString() ?: rootProject.findProperty(propertyName)?.toString() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 441eaf0f..2805edcb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,6 +5,7 @@ agp = "8.7.3" buildconfig = "5.5.1" vanniktech-maven-publish = "0.31.0" +jfrog-artifactory = "6.0.2" kotlinx-serialization = "1.7.3" kotlinx-coroutines = "1.9.0" @@ -46,6 +47,7 @@ kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", versi kotlinx-binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinx-binary-compatibility-validator" } buildconfig = { id = "com.github.gmazzo.buildconfig", version.ref = "buildconfig" } vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech-maven-publish" } +jfrog-artifactory = { id = "com.jfrog.artifactory", version.ref = "jfrog-artifactory" } [libraries]