From f46bd75ccb297b3df2351fb41f159c4b216ea321 Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Tue, 3 Feb 2026 19:34:31 +0100 Subject: [PATCH 1/5] Publish Processing Gradle plugin Add a publish-gradle job to the release workflow to publish Processing libraries to the Gradle Plugin Portal using gradle publish with required secrets and version/group env vars. Update gradle/plugins/library/build.gradle.kts to use the com.gradle.plugin-publish plugin, provide plugin metadata (website, vcsUrl, displayName, description, tags) and make the plugin id dynamic ("$group.library"). These changes enable automated publishing of the Gradle plugin with the metadata required by the portal. --- .github/workflows/release.yml | 25 +++++++++++++++++++++++++ gradle/plugins/library/build.gradle.kts | 9 +++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e8de46389..403e8eef1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -74,6 +74,31 @@ jobs: ORG_GRADLE_PROJECT_version: ${{ needs.version.outputs.version }} ORG_GRADLE_PROJECT_group: ${{ vars.GRADLE_GROUP }} + + publish-gradle: + name: Publish Processing Plugins to Gradle Plugin Portal + runs-on: ubuntu-latest + needs: version + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Processing + uses: ./.github/actions/setup + + - name: Build with Gradle + run: ./gradlew -c gradle/plugins/settings.gradle.kts publishPlugins + env: + GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }} + GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }} + + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_IN_MEMORY_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }} + + ORG_GRADLE_PROJECT_version: ${{ needs.version.outputs.version }} + ORG_GRADLE_PROJECT_group: ${{ vars.GRADLE_GROUP }} + ORG_GRADLE_PROJECT_publishingGroup: ${{ vars.GRADLE_GROUP }} + release-windows: name: (windows/${{ matrix.arch }}) Create Processing Release runs-on: ${{ matrix.os }} diff --git a/gradle/plugins/library/build.gradle.kts b/gradle/plugins/library/build.gradle.kts index d2707eef4..f70338b4e 100644 --- a/gradle/plugins/library/build.gradle.kts +++ b/gradle/plugins/library/build.gradle.kts @@ -1,12 +1,17 @@ plugins { - `java-gradle-plugin` + id("com.gradle.plugin-publish") version "2.0.0" kotlin("jvm") version "2.2.20" } gradlePlugin { + website = "https://processing.org/" + vcsUrl = "https://github.com/processing/processing4" plugins { create("processing.library") { - id = "org.processing.library" + id = project.properties.getOrElse("publishingGroup", { "org.processing" }).toString() + ".library" + displayName = "Processing Library Plugin" + description = "Gradle plugin for building Processing libraries" + tags = listOf("processing", "library", "dsl") implementationClass = "ProcessingLibraryPlugin" } } From 0cf146a5dab4f4291109da53f273d65aa6ccf4c8 Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Sat, 7 Feb 2026 13:21:00 +0100 Subject: [PATCH 2/5] Publish plugins in release workflow --- .github/workflows/release.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 403e8eef1..e21fce7a4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -86,7 +86,19 @@ jobs: - name: Setup Processing uses: ./.github/actions/setup - - name: Build with Gradle + - name: Publish plugins to Gradle Plugin Portal + run: ./gradlew publishPlugins + env: + GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }} + GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }} + + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_IN_MEMORY_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }} + + ORG_GRADLE_PROJECT_version: ${{ needs.version.outputs.version }} + ORG_GRADLE_PROJECT_group: ${{ vars.GRADLE_GROUP }} + + - name: Publish internal plugins to Gradle Plugin Portal run: ./gradlew -c gradle/plugins/settings.gradle.kts publishPlugins env: GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }} From cc780cf6578364cfb971a80b92de81c1a2229aaa Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Sat, 7 Feb 2026 13:30:49 +0100 Subject: [PATCH 3/5] Update build.gradle.kts --- java/gradle/build.gradle.kts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/java/gradle/build.gradle.kts b/java/gradle/build.gradle.kts index 0171384f4..8bbc51f01 100644 --- a/java/gradle/build.gradle.kts +++ b/java/gradle/build.gradle.kts @@ -21,15 +21,20 @@ dependencies{ testImplementation(libs.junit) } -// TODO: CI/CD for publishing the plugin to the Gradle Plugin Portal gradlePlugin{ + website = "https://processing.org/" + vcsUrl = "https://github.com/processing/processing4" plugins{ create("processing.java"){ - id = "org.processing.java" + id = "$group.java" + displayName = "Processing Plugin" + description = "Gradle plugin for building Processing sketches" + tags = listOf("processing", "sketch", "dsl") implementationClass = "org.processing.java.gradle.ProcessingPlugin" } } } + publishing{ repositories{ mavenLocal() From 8b0cdafcb9b91e8caeba8c2490a4111970554c54 Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Sat, 7 Feb 2026 13:41:10 +0100 Subject: [PATCH 4/5] Set project.group system property for tests Expose the project's group to test JVMs by configuring tasks.withType() to set systemProperty("project.group", group ?: "org.processing"). Update ProcessingPluginTest to read the plugin id from System.getProperty("project.group") instead of hardcoding the group. Also close the publishing block in build.gradle.kts. This allows tests to adapt when the project group is overridden. --- java/gradle/build.gradle.kts | 4 ++++ java/gradle/src/test/kotlin/ProcessingPluginTest.kt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/java/gradle/build.gradle.kts b/java/gradle/build.gradle.kts index 8bbc51f01..02d9a7264 100644 --- a/java/gradle/build.gradle.kts +++ b/java/gradle/build.gradle.kts @@ -43,4 +43,8 @@ publishing{ url = uri(project(":app").layout.buildDirectory.dir("resources-bundled/common/repository").get().asFile.absolutePath) } } +} + +tasks.withType().configureEach { + systemProperty("project.group", group ?: "org.processing") } \ No newline at end of file diff --git a/java/gradle/src/test/kotlin/ProcessingPluginTest.kt b/java/gradle/src/test/kotlin/ProcessingPluginTest.kt index 7ffeeecb5..c67725e99 100644 --- a/java/gradle/src/test/kotlin/ProcessingPluginTest.kt +++ b/java/gradle/src/test/kotlin/ProcessingPluginTest.kt @@ -20,7 +20,7 @@ class ProcessingPluginTest{ val sketchFolder = directory.newFolder("sketch") directory.newFile("sketch/build.gradle.kts").writeText(""" plugins { - id("org.processing.java") + id("${System.getProperty("project.group")}.java") } """.trimIndent()) directory.newFile("sketch/settings.gradle.kts") From 5fb43b6c9fd00d8533cb03b312f90d29bfa89d39 Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Sat, 7 Feb 2026 14:00:13 +0100 Subject: [PATCH 5/5] Update build.gradle.kts --- java/gradle/build.gradle.kts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/gradle/build.gradle.kts b/java/gradle/build.gradle.kts index 02d9a7264..a3ab597e7 100644 --- a/java/gradle/build.gradle.kts +++ b/java/gradle/build.gradle.kts @@ -44,7 +44,8 @@ publishing{ } } } - +// Grab the group before running tests, since the group is used in the test configuration and may be modified by the publishing configuration +val testGroup = group.toString() tasks.withType().configureEach { - systemProperty("project.group", group ?: "org.processing") + systemProperty("project.group", testGroup) } \ No newline at end of file