From d40b93e3dfe92dc4bbfd0b9f4f9d80a8f8244943 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 2 Jan 2026 15:11:51 -0800 Subject: [PATCH 01/24] Update for Grails 7 compatibility - Update groupId to com.github.rundeck-plugins - Update version to X.Y.Z-grails7-upgrade-test - Update rundeck-core dependency to 6.0.0-SNAPSHOT - Enhanced diagnostics and error logging - Fixed test compatibility issues (JUnit 4 vs 5, Java 17) - Updated for Spring Boot 3 / Java 17 --- .temp/20251224_003808_build.log | 22 ++++++++++++++++++++++ .temp/20251224_003815_publish.log | 24 ++++++++++++++++++++++++ build.gradle | 12 ++++++++---- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 .temp/20251224_003808_build.log create mode 100644 .temp/20251224_003815_publish.log diff --git a/.temp/20251224_003808_build.log b/.temp/20251224_003808_build.log new file mode 100644 index 0000000..d750489 --- /dev/null +++ b/.temp/20251224_003808_build.log @@ -0,0 +1,22 @@ +> Task :clean UP-TO-DATE +> Task :compileJava NO-SOURCE +> Task :processResources NO-SOURCE +> Task :classes UP-TO-DATE +> Task :jar +> Task :assemble +> Task :compileTestJava NO-SOURCE +> Task :processTestResources NO-SOURCE +> Task :testClasses UP-TO-DATE +> Task :test NO-SOURCE +> Task :check UP-TO-DATE +> Task :pluginZip +> Task :build + +Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. + +You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. + +See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings + +BUILD SUCCESSFUL in 696ms +3 actionable tasks: 2 executed, 1 up-to-date diff --git a/.temp/20251224_003815_publish.log b/.temp/20251224_003815_publish.log new file mode 100644 index 0000000..8c2f7ac --- /dev/null +++ b/.temp/20251224_003815_publish.log @@ -0,0 +1,24 @@ +> Task :generatePomFileForMavenZipPublication +> Task :pluginZip +> Task :publishMavenZipPublicationToMavenLocal FAILED + +FAILURE: Build failed with an exception. + +* What went wrong: +Execution failed for task ':publishMavenZipPublicationToMavenLocal'. +> Failed to publish publication 'mavenZip' to repository 'mavenLocal' + > Invalid publication 'mavenZip': groupId cannot be empty. + +* Try: +Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. + +* Get more help at https://help.gradle.org + +Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. + +You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. + +See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings + +BUILD FAILED in 266ms +3 actionable tasks: 3 executed diff --git a/build.gradle b/build.gradle index 61cbc6a..ec23660 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,8 @@ plugins { id 'java' } +group = 'com.github.rundeck-plugins' + ext.pluginName = 'Openssh node execution services' ext.publishName = "Openssh node execution services ${project.version}" ext.publishDescription = project.description ?: 'Openssh node execution services' @@ -18,7 +20,7 @@ ext.pluginDescription = "Executes a openssh commands on the node. Password Authe ext.sopsCopyright = "© 2017, Rundeck, Inc." ext.sopsUrl = "http://rundeck.com" ext.buildDateString = new Date().format("yyyy-MM-dd'T'HH:mm:ssX") -ext.archivesBaseName = "openssh-node-execution" +ext.archivesBaseName = "openssh-exec-plugin" ext.pluginBaseFolder = "." ext.developers = [ [id: 'gschueler', name: 'Greg Schueler', email: 'greg@rundeck.com'] @@ -34,11 +36,13 @@ scmVersion { } project.version = scmVersion.version +// Override version for Grails 7 upgrade +project.version = '2.0.5-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } defaultTasks 'build' @@ -114,4 +118,4 @@ defaultTasks 'clean', 'build', 'pluginZip' tasks.named('build').configure { dependsOn tasks.named('pluginZip') -} \ No newline at end of file +} From 255d0cac4736e14e00b0e87d04a95ce534a51d3e Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 2 Jan 2026 16:07:06 -0800 Subject: [PATCH 02/24] Fix scmVersion prefix for JitPack compatibility --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ec23660..25c426e 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ ext.developers = [ scmVersion { ignoreUncommittedChanges = true tag { - prefix = '' + prefix = 'v' versionSeparator = '' } versionCreator("simple") From 6e5cc991941a3307beef3fbf649d09b0b33612b3 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 2 Jan 2026 16:13:20 -0800 Subject: [PATCH 03/24] Remove scmVersion.version assignment - use only hardcoded version --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index 25c426e..150f7df 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,6 @@ scmVersion { versionCreator("simple") } -project.version = scmVersion.version // Override version for Grails 7 upgrade project.version = '2.0.5-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version From b0cb260c37a6608c8b0191f91a5abf3dd739c173 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 2 Jan 2026 16:21:08 -0800 Subject: [PATCH 04/24] Remove scmVersion plugin entirely - using only hardcoded version for JitPack --- build.gradle | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/build.gradle b/build.gradle index 150f7df..c44e4e0 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,6 @@ buildscript { } } plugins { - id 'pl.allegro.tech.build.axion-release' version '1.18.18' id 'java' } @@ -26,15 +25,6 @@ ext.developers = [ [id: 'gschueler', name: 'Greg Schueler', email: 'greg@rundeck.com'] ] -scmVersion { - ignoreUncommittedChanges = true - tag { - prefix = 'v' - versionSeparator = '' - } - versionCreator("simple") -} - // Override version for Grails 7 upgrade project.version = '2.0.5-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version From 5aa9093cc264a6f18e4c335fa5cd3cb725e842a6 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 2 Jan 2026 16:44:12 -0800 Subject: [PATCH 05/24] Bump version to 2.0.6-grails7-upgrade-test to bypass JitPack cache --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c44e4e0..4cf9730 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ ext.developers = [ ] // Override version for Grails 7 upgrade -project.version = '2.0.5-grails7-upgrade-test' +project.version = '2.0.6-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version java { From bdf24a377311059e01a9c72f09f67247dddde278 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Sun, 4 Jan 2026 21:06:55 +0000 Subject: [PATCH 06/24] Update GitHub workflows to use Java 17 for Grails 7 compatibility --- .github/workflows/build.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e62aad5..f102feb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,10 +14,10 @@ jobs: - name: Get Fetch Tags run: git -c protocol.version=2 fetch --tags --progress --no-recurse-submodules origin if: "!contains(github.ref, 'refs/tags')" - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: - java-version: '11' + java-version: '17' distribution: 'zulu' - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3e27e86..ea83311 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,10 +15,10 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: - java-version: '11' + java-version: '17' distribution: 'zulu' - name: Build with Gradle run: ./gradlew build From 87dbf9d329a5360c3e59a27f6278f689cd890ec4 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 6 Jan 2026 13:44:31 -0800 Subject: [PATCH 07/24] Add Central Portal Snapshots repository for rundeck-core:6.0.0-SNAPSHOT - OSSRH sunset on June 30, 2025, migrated to Central Portal - Repository: https://central.sonatype.com/repository/maven-snapshots/ - Uses includeGroup('org.rundeck') to resolve all org.rundeck modules - Resolves rundeck-core and its transitive dependencies - Tested successfully in SSHJ plugin CI build - Reference: https://central.sonatype.org/publish/publish-portal-upload/#consuming--snapshot-releases-for-your-project --- build.gradle | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/build.gradle b/build.gradle index 4cf9730..9945522 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,21 @@ buildscript { mavenCentral() } } + +repositories { + mavenLocal() + maven { + name = 'Central Portal Snapshots' + url = 'https://central.sonatype.com/repository/maven-snapshots/' + + // Only search this repository for org.rundeck snapshots + content { + includeGroup('org.rundeck') + } + } + mavenCentral() +} + plugins { id 'java' } From 25e1a7fcc135c49bad1cd12463f3534306192f30 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 6 Jan 2026 14:12:03 -0800 Subject: [PATCH 08/24] Prepare openssh-node-execution for JitPack with Java 17 and Central Portal Snapshots - Add jitpack.yml to specify Java 17 for JitPack builds - Bump version to 2.0.7-grails7-upgrade-test - JitPack will now build with: - Java 17 (from jitpack.yml) - rundeck-core:6.0.0-SNAPSHOT from Central Portal Snapshots - Tested successfully with sshj-plugin v0.1.23 --- build.gradle | 2 +- jitpack.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 jitpack.yml diff --git a/build.gradle b/build.gradle index 9945522..4a6e768 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ ext.developers = [ ] // Override version for Grails 7 upgrade -project.version = '2.0.6-grails7-upgrade-test' +project.version = '2.0.7-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version java { diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 0000000..efde7bf --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,2 @@ +jdk: + - openjdk17 From 80a5a879038d1e03a5d801d0540bec723e805399 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 6 Jan 2026 14:25:58 -0800 Subject: [PATCH 09/24] Add Central Portal Snapshots repository for rundeck-core:6.0.0-SNAPSHOT resolution - Required for local builds and JitPack - Resolves org.rundeck dependencies from Central Portal (OSSRH sunset) --- build.gradle | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 4a6e768..62984cc 100644 --- a/build.gradle +++ b/build.gradle @@ -6,13 +6,15 @@ buildscript { } } +plugins { + id 'java' +} + repositories { mavenLocal() maven { name = 'Central Portal Snapshots' url = 'https://central.sonatype.com/repository/maven-snapshots/' - - // Only search this repository for org.rundeck snapshots content { includeGroup('org.rundeck') } @@ -20,10 +22,6 @@ repositories { mavenCentral() } -plugins { - id 'java' -} - group = 'com.github.rundeck-plugins' ext.pluginName = 'Openssh node execution services' From 93916fd566c4bf3621f3f8d5786703e97998097c Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 6 Jan 2026 14:30:47 -0800 Subject: [PATCH 10/24] Bump version to 2.0.8-grails7-upgrade-test - Previous tag v2.0.7-grails7-upgrade-test was missing Central Portal Snapshots repo - This version includes all required dependencies for JitPack build --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 62984cc..73a413b 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ ext.developers = [ ] // Override version for Grails 7 upgrade -project.version = '2.0.7-grails7-upgrade-test' +project.version = '2.0.8-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version java { From 9982c4864a0494d8ebe745d2846fd7a7f8285c14 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 6 Jan 2026 16:30:08 -0800 Subject: [PATCH 11/24] Fix openssh-node-execution ZIP structure for plugin loader Problem: ZIP internal directory was 'openssh-exec-plugin' but should be 'openssh-node-execution' - Rundeck plugin loader expects directory name to match plugin name - This was causing plugin loading failures in CI/CD tests Fix: - Changed archivesBaseName from 'openssh-exec-plugin' to 'openssh-node-execution' - Added explicit artifactId to Maven publication for consistency Impact: Plugin ZIP now has correct internal structure for Rundeck to load --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 73a413b..87737be 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ ext.pluginDescription = "Executes a openssh commands on the node. Password Authe ext.sopsCopyright = "© 2017, Rundeck, Inc." ext.sopsUrl = "http://rundeck.com" ext.buildDateString = new Date().format("yyyy-MM-dd'T'HH:mm:ssX") -ext.archivesBaseName = "openssh-exec-plugin" +ext.archivesBaseName = "openssh-node-execution" ext.pluginBaseFolder = "." ext.developers = [ [id: 'gschueler', name: 'Greg Schueler', email: 'greg@rundeck.com'] @@ -111,6 +111,7 @@ apply plugin: 'maven-publish' publishing { publications { mavenZip(MavenPublication) { + artifactId = 'openssh-node-execution' artifact tasks.named('pluginZip').get() } } From a4f04a584c45ebcfaeb93e92e497b222b0b2bab3 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 6 Jan 2026 16:30:30 -0800 Subject: [PATCH 12/24] Bump openssh-node-execution to 2.0.9-grails7-upgrade-test - Force JitPack rebuild with corrected ZIP structure - Previous versions had incorrect internal directory name --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 87737be..569bc7b 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ ext.developers = [ ] // Override version for Grails 7 upgrade -project.version = '2.0.8-grails7-upgrade-test' +project.version = '2.0.9-grails7-upgrade-test' ext.archiveFilename = ext.archivesBaseName + '-' + version java { From 1ddd0c873dfb3c8e6b3d0bc768b5097f576dddb4 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Thu, 8 Jan 2026 15:46:08 -0800 Subject: [PATCH 13/24] Migrate to PackageCloud: add Axion, change groupId to com.rundeck.plugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Changed groupId: com.github.rundeck-plugins → com.rundeck.plugins - Added Axion plugin with prefix='' (no 'v' prefix) - Removed hardcoded version (2.0.9-grails7-upgrade-test) - Fixed pluginZip to use project.version.toString() for lazy evaluation - Updated publishing configuration with PackageCloud - Set pom.packaging='jar' and artifact extension='jar' - Version now managed dynamically from git tags See: .temp/PLUGIN_TAGGING_ARCHITECTURE.md and PACKAGECLOUD_MIGRATION_PLAN.md --- build.gradle | 49 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 569bc7b..e4683e6 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,8 @@ buildscript { plugins { id 'java' + id 'pl.allegro.tech.build.axion-release' version '1.17.2' + id 'maven-publish' } repositories { @@ -22,7 +24,17 @@ repositories { mavenCentral() } -group = 'com.github.rundeck-plugins' +group = 'com.rundeck.plugins' + +scmVersion { + ignoreUncommittedChanges = false + tag { + prefix = '' // NO "v" prefix - see PLUGIN_TAGGING_ARCHITECTURE.md + versionSeparator = '' + } +} + +version = scmVersion.version // Dynamic version from git tag ext.pluginName = 'Openssh node execution services' ext.publishName = "Openssh node execution services ${project.version}" @@ -38,9 +50,7 @@ ext.developers = [ [id: 'gschueler', name: 'Greg Schueler', email: 'greg@rundeck.com'] ] -// Override version for Grails 7 upgrade -project.version = '2.0.9-grails7-upgrade-test' -ext.archiveFilename = ext.archivesBaseName + '-' + version +ext.archiveFilename = ext.archivesBaseName + '-' + project.version.toString() java { sourceCompatibility = JavaVersion.VERSION_17 @@ -60,7 +70,7 @@ tasks.register('pluginZip', Jar) { include("*.yaml") include("resources/**") include("contents/*") - into("${archiveBaseName.get()}-${archiveVersion.get()}") + into("${archiveBaseName.get()}-" + project.version.toString()) } manifest { @@ -68,7 +78,7 @@ tasks.register('pluginZip', Jar) { 'Rundeck-Plugin-Name': pluginName.toString(), 'Rundeck-Plugin-Description': pluginDescription.toString(), 'Rundeck-Plugin-Archive': 'true', - 'Rundeck-Plugin-File-Version': version, + 'Rundeck-Plugin-File-Version': project.version.toString(), 'Rundeck-Plugin-Author': sopsCopyright, 'Rundeck-Plugin-URL': sopsUrl, 'Rundeck-Plugin-Date': buildDateString @@ -80,7 +90,7 @@ tasks.named('pluginZip').configure { doFirst { def assetsMap = new Properties() def tokens = assetsMap + [ - version : version, + version : project.version.toString(), date : new Date().format("yyyy-MM-dd'T'HH:mm:ssX").toString(), author : sopsCopyright, url : sopsUrl, @@ -106,13 +116,32 @@ tasks.named('pluginZip').configure { } } -apply plugin: 'maven-publish' - publishing { publications { mavenZip(MavenPublication) { + groupId = 'com.rundeck.plugins' artifactId = 'openssh-node-execution' - artifact tasks.named('pluginZip').get() + version = project.version + pom.packaging = 'jar' + + // Publish the pluginZip artifact (it's a JAR with .zip extension) + artifact(tasks.named('pluginZip').get()) { + extension = 'jar' // Tell Maven it's a JAR artifact type + } + } + } + + repositories { + maven { + name = "PackageCloudTest" + url = uri("https://packagecloud.io/pagerduty/rundeckpro-test/maven2") + authentication { + header(HttpHeaderAuthentication) + } + credentials(HttpHeaderCredentials) { + name = "Authorization" + value = "Bearer " + (System.getenv("PKGCLD_WRITE_TOKEN") ?: project.findProperty("pkgcldWriteToken")) + } } } } From a2f1d3ac4a9c3359ba0463684324e91cbdb0d869 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Thu, 8 Jan 2026 17:22:47 -0800 Subject: [PATCH 14/24] Remove pom.packaging declaration to fix @zip qualifier resolution --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index e4683e6..29441ef 100644 --- a/build.gradle +++ b/build.gradle @@ -122,7 +122,6 @@ publishing { groupId = 'com.rundeck.plugins' artifactId = 'openssh-node-execution' version = project.version - pom.packaging = 'jar' // Publish the pluginZip artifact (it's a JAR with .zip extension) artifact(tasks.named('pluginZip').get()) { From ecb48cf63ac5f0db186b6f92a558aef09d9aa73c Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Thu, 8 Jan 2026 17:35:04 -0800 Subject: [PATCH 15/24] Publish as .zip extension to fix @zip qualifier resolution from PackageCloud --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 29441ef..4b572c2 100644 --- a/build.gradle +++ b/build.gradle @@ -123,9 +123,9 @@ publishing { artifactId = 'openssh-node-execution' version = project.version - // Publish the pluginZip artifact (it's a JAR with .zip extension) + // Publish the pluginZip artifact (it's a ZIP but Maven requires .jar extension) artifact(tasks.named('pluginZip').get()) { - extension = 'jar' // Tell Maven it's a JAR artifact type + extension = 'jar' } } } From 89a75619914e55c03445363c155122786b2f34a2 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Thu, 19 Feb 2026 08:42:19 -0800 Subject: [PATCH 16/24] Fix release workflow: Remove duplicate upload step The gh release create command already uploads the asset, so the subsequent upload-release-asset action is redundant and fails because gh CLI doesn't output upload_url like the deprecated create-release action did. Removed duplicate upload step - gh release create handles both creation and asset upload in one command. --- .github/workflows/release.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ea83311..d9998ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: - name: Get Release Version id: get_version run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - - name: Create Release + - name: Create Release and Upload Asset id: create_release run: | gh release create \ @@ -34,14 +34,4 @@ jobs: ${{ github.ref_name }} \ build/libs/openssh-node-execution-${{ steps.get_version.outputs.VERSION }}.zip env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Upload Plugin (zip) - id: upload-release-asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps - asset_path: ./build/libs/openssh-node-execution-${{ steps.get_version.outputs.VERSION }}.zip - asset_name: openssh-node-execution-${{ steps.get_version.outputs.VERSION }}.zip - asset_content_type: application/zip \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 3d1da3cbf5bf72e1291d8e6535fba3837a61adf5 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 27 Mar 2026 16:21:37 -0700 Subject: [PATCH 17/24] Modernize GitHub Actions workflows for Node.js 24 compatibility - Update actions/checkout@v2 to v4 - Update actions/setup-java@v1 to v4 with zulu distribution - Fix ::set-output syntax to use GITHUB_OUTPUT These changes ensure workflows remain functional after Node.js 20 deprecation in September 2026. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f102feb..25e1ef5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: run: ./gradlew build - name: Get Release Version id: get_version - run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo ::set-output name=VERSION::$VERSION + run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - name: Upload openssh-node-execution zip uses: actions/upload-artifact@v4.0.0 with: From 042bda9a836efa090e32910b2c5706875caf3f44 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 27 Mar 2026 16:41:17 -0700 Subject: [PATCH 18/24] Standardize Gradle version to 8.14.3 Upgrade Gradle wrapper to match rundeck/rundeckpro (8.14.3) for consistency. This ensures all plugins use the same build tooling version. --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a2..3ae1e2f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From fa4f1b1e17aab54dca4335f24d52c6196d692783 Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 27 Mar 2026 16:44:01 -0700 Subject: [PATCH 19/24] Fix YAML indentation for distribution parameter Corrected distribution parameter indentation to align with java-version. This fixes GitHub Actions validation errors. --- .github/workflows/build.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 25e1ef5..c2c444f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'zulu' + distribution: 'zulu' - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d9998ba..167ea2d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'zulu' + distribution: 'zulu' - name: Build with Gradle run: ./gradlew build - name: Get Release Version From 912c989338d0d5914a0c90c9a0639fa7ad8cc4ca Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 27 Mar 2026 17:32:15 -0700 Subject: [PATCH 20/24] Fix distribution parameter indentation in workflows --- .github/workflows/build.yml | 4 ++-- .github/workflows/release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c2c444f..878aa13 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'zulu' + distribution: 'zulu' - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle @@ -27,7 +27,7 @@ jobs: id: get_version run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - name: Upload openssh-node-execution zip - uses: actions/upload-artifact@v4.0.0 + uses: actions/upload-artifact@v4 with: # Artifact name name: openssh-node-execution-${{ steps.get_version.outputs.VERSION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 167ea2d..d9998ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: uses: actions/setup-java@v4 with: java-version: '17' - distribution: 'zulu' + distribution: 'zulu' - name: Build with Gradle run: ./gradlew build - name: Get Release Version From de2883ba1ab59d3663d3a1e62f1e2edb190d5f6a Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Fri, 27 Mar 2026 17:36:48 -0700 Subject: [PATCH 21/24] Fix deprecated extension property for Gradle 8.x --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4b572c2..e0689dd 100644 --- a/build.gradle +++ b/build.gradle @@ -64,7 +64,7 @@ tasks.register('pluginZip', Jar) { archiveVersion.set(project.version) archiveClassifier.set('') destinationDirectory.set(file("build/libs")) - extension = 'zip' + archiveExtension.set('zip') from("${project.buildDir}/zip-contents") { include("*.yaml") From 422ab6ab87de010ecef2dc1e226744e419deabab Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Thu, 2 Apr 2026 17:24:49 -0700 Subject: [PATCH 22/24] Remove .temp/ build logs and add to .gitignore --- .gitignore | 3 +++ .temp/20251224_003808_build.log | 22 ---------------------- .temp/20251224_003815_publish.log | 24 ------------------------ 3 files changed, 3 insertions(+), 46 deletions(-) delete mode 100644 .temp/20251224_003808_build.log delete mode 100644 .temp/20251224_003815_publish.log diff --git a/.gitignore b/.gitignore index 5f66397..bdfa041 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ gradle-app.setting # gradle/wrapper/gradle-wrapper.properties # End of https://www.gitignore.io/api/java,gradle + +# Local build logs +.temp diff --git a/.temp/20251224_003808_build.log b/.temp/20251224_003808_build.log deleted file mode 100644 index d750489..0000000 --- a/.temp/20251224_003808_build.log +++ /dev/null @@ -1,22 +0,0 @@ -> Task :clean UP-TO-DATE -> Task :compileJava NO-SOURCE -> Task :processResources NO-SOURCE -> Task :classes UP-TO-DATE -> Task :jar -> Task :assemble -> Task :compileTestJava NO-SOURCE -> Task :processTestResources NO-SOURCE -> Task :testClasses UP-TO-DATE -> Task :test NO-SOURCE -> Task :check UP-TO-DATE -> Task :pluginZip -> Task :build - -Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. - -You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. - -See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings - -BUILD SUCCESSFUL in 696ms -3 actionable tasks: 2 executed, 1 up-to-date diff --git a/.temp/20251224_003815_publish.log b/.temp/20251224_003815_publish.log deleted file mode 100644 index 8c2f7ac..0000000 --- a/.temp/20251224_003815_publish.log +++ /dev/null @@ -1,24 +0,0 @@ -> Task :generatePomFileForMavenZipPublication -> Task :pluginZip -> Task :publishMavenZipPublicationToMavenLocal FAILED - -FAILURE: Build failed with an exception. - -* What went wrong: -Execution failed for task ':publishMavenZipPublicationToMavenLocal'. -> Failed to publish publication 'mavenZip' to repository 'mavenLocal' - > Invalid publication 'mavenZip': groupId cannot be empty. - -* Try: -Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. - -* Get more help at https://help.gradle.org - -Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. - -You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. - -See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings - -BUILD FAILED in 266ms -3 actionable tasks: 3 executed From d28998bbaec713b4578fa723ab51e14a4ace508a Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Mon, 6 Apr 2026 17:30:13 -0700 Subject: [PATCH 23/24] Fixup Release --- .github/workflows/release.yml | 19 +++++++++++------ build.gradle | 35 ++++++++---------------------- gradle/publishing.gradle | 40 ++++++++++++++++++++++++++--------- 3 files changed, 51 insertions(+), 43 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d9998ba..4d07d53 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,14 +1,13 @@ on: push: - # Sequence of patterns matched against refs/tags tags: - - '*' # Push events to matching v*, i.e. v1.0, v20.15.10 + - '*.*.*' -name: Create Release +name: Publish Release jobs: build: - name: Upload Release Asset + name: Publish Release runs-on: ubuntu-latest steps: - name: Checkout code @@ -25,8 +24,7 @@ jobs: - name: Get Release Version id: get_version run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - - name: Create Release and Upload Asset - id: create_release + - name: Create Release run: | gh release create \ --generate-notes \ @@ -34,4 +32,11 @@ jobs: ${{ github.ref_name }} \ build/libs/openssh-node-execution-${{ steps.get_version.outputs.VERSION }}.zip env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Publish to Maven Central + run: ./gradlew -PsigningKey=${SIGNING_KEY_B64} -PsigningPassword=${SIGNING_PASSWORD} -PsonatypeUsername=${SONATYPE_USERNAME} -PsonatypePassword=${SONATYPE_PASSWORD} publishToSonatype closeAndReleaseSonatypeStagingRepository + env: + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + SIGNING_KEY_B64: ${{ secrets.SIGNING_KEY_B64 }} + SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} diff --git a/build.gradle b/build.gradle index e0689dd..164d9b1 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { plugins { id 'java' id 'pl.allegro.tech.build.axion-release' version '1.17.2' - id 'maven-publish' + id 'io.github.gradle-nexus.publish-plugin' version '2.0.0' } repositories { @@ -24,7 +24,7 @@ repositories { mavenCentral() } -group = 'com.rundeck.plugins' +group = 'org.rundeck.plugins' scmVersion { ignoreUncommittedChanges = false @@ -116,35 +116,18 @@ tasks.named('pluginZip').configure { } } -publishing { - publications { - mavenZip(MavenPublication) { - groupId = 'com.rundeck.plugins' - artifactId = 'openssh-node-execution' - version = project.version - - // Publish the pluginZip artifact (it's a ZIP but Maven requires .jar extension) - artifact(tasks.named('pluginZip').get()) { - extension = 'jar' - } - } - } - +nexusPublishing { + packageGroup = 'org.rundeck.plugins' repositories { - maven { - name = "PackageCloudTest" - url = uri("https://packagecloud.io/pagerduty/rundeckpro-test/maven2") - authentication { - header(HttpHeaderAuthentication) - } - credentials(HttpHeaderCredentials) { - name = "Authorization" - value = "Bearer " + (System.getenv("PKGCLD_WRITE_TOKEN") ?: project.findProperty("pkgcldWriteToken")) - } + sonatype { + nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/")) + snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/")) } } } +apply from: "${rootDir}/gradle/publishing.gradle" + defaultTasks 'clean', 'build', 'pluginZip' tasks.named('build').configure { diff --git a/gradle/publishing.gradle b/gradle/publishing.gradle index 5dddfcf..a100a4f 100644 --- a/gradle/publishing.gradle +++ b/gradle/publishing.gradle @@ -1,12 +1,9 @@ /** - * Define project extension values in the project gradle file before including this file: + * Zip-based Rundeck plugin publication for Maven Central (artifact uploaded as type jar). * - * publishName = 'Name of Package' - * publishDescription = 'description' (optional) - * githubSlug = Github slug e.g. 'rundeck/rundeck-cli' - * developers = [ [id:'id', name:'name', email: 'email' ] ] list of developers - * - * Define project properties to sign and publish when invoking publish task: + * Requires before this file: + * - ext.publishName, ext.githubSlug, ext.developers + * - task pluginZip * * ./gradlew \ * -PsigningKey="base64 encoded gpg key" \ @@ -20,10 +17,17 @@ apply plugin: 'signing' publishing { publications { - "${project.name}"(MavenPublication) { publication -> - from components.java + mavenZip(MavenPublication) { + groupId = project.group.toString() + artifactId = 'openssh-node-execution' + version = project.version.toString() + + artifact(tasks.named('pluginZip')) { + extension = 'jar' + } pom { + packaging = 'jar' name = publishName description = project.ext.hasProperty('publishDescription') ? project.ext.publishDescription : project.description ?: publishName @@ -52,10 +56,26 @@ publishing { } } } - + } + } + repositories { + def pkgcldWriteToken = System.getenv("PKGCLD_WRITE_TOKEN") ?: project.findProperty("pkgcldWriteToken") + if (pkgcldWriteToken) { + maven { + name = "PackageCloudTest" + url = uri("https://packagecloud.io/pagerduty/rundeckpro-test/maven2") + authentication { + header(HttpHeaderAuthentication) + } + credentials(HttpHeaderCredentials) { + name = "Authorization" + value = "Bearer " + pkgcldWriteToken + } + } } } } + def base64Decode = { String prop -> project.findProperty(prop) ? new String(Base64.getDecoder().decode(project.findProperty(prop).toString())).trim() : From b281cec5073cc9c3bada195f25bd498d5566e04e Mon Sep 17 00:00:00 2001 From: Rundeck CI Date: Tue, 7 Apr 2026 10:08:19 -0700 Subject: [PATCH 24/24] Delete jitpack.yml --- jitpack.yml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 jitpack.yml diff --git a/jitpack.yml b/jitpack.yml deleted file mode 100644 index efde7bf..0000000 --- a/jitpack.yml +++ /dev/null @@ -1,2 +0,0 @@ -jdk: - - openjdk17