Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d40b93e
Update for Grails 7 compatibility
fdevans Jan 2, 2026
255d0ca
Fix scmVersion prefix for JitPack compatibility
fdevans Jan 3, 2026
6e5cc99
Remove scmVersion.version assignment - use only hardcoded version
fdevans Jan 3, 2026
b0cb260
Remove scmVersion plugin entirely - using only hardcoded version for …
fdevans Jan 3, 2026
5aa9093
Bump version to 2.0.6-grails7-upgrade-test to bypass JitPack cache
fdevans Jan 3, 2026
bdf24a3
Update GitHub workflows to use Java 17 for Grails 7 compatibility
fdevans Jan 4, 2026
87dbf9d
Add Central Portal Snapshots repository for rundeck-core:6.0.0-SNAPSHOT
fdevans Jan 6, 2026
25e1a7f
Prepare openssh-node-execution for JitPack with Java 17 and Central P…
fdevans Jan 6, 2026
80a5a87
Add Central Portal Snapshots repository for rundeck-core:6.0.0-SNAPSH…
fdevans Jan 6, 2026
93916fd
Bump version to 2.0.8-grails7-upgrade-test
fdevans Jan 6, 2026
9982c48
Fix openssh-node-execution ZIP structure for plugin loader
fdevans Jan 7, 2026
a4f04a5
Bump openssh-node-execution to 2.0.9-grails7-upgrade-test
fdevans Jan 7, 2026
1ddd0c8
Migrate to PackageCloud: add Axion, change groupId to com.rundeck.plu…
fdevans Jan 8, 2026
a2f1d3a
Remove pom.packaging declaration to fix @zip qualifier resolution
fdevans Jan 9, 2026
ecb48cf
Publish as .zip extension to fix @zip qualifier resolution from Packa…
fdevans Jan 9, 2026
89a7561
Fix release workflow: Remove duplicate upload step
fdevans Feb 19, 2026
3d1da3c
Modernize GitHub Actions workflows for Node.js 24 compatibility
fdevans Mar 27, 2026
042bda9
Standardize Gradle version to 8.14.3
fdevans Mar 27, 2026
fa4f1b1
Fix YAML indentation for distribution parameter
fdevans Mar 27, 2026
912c989
Fix distribution parameter indentation in workflows
fdevans Mar 28, 2026
de2883b
Fix deprecated extension property for Gradle 8.x
fdevans Mar 28, 2026
422ab6a
Remove .temp/ build logs and add to .gitignore
fdevans Apr 3, 2026
d28998b
Fixup Release
fdevans Apr 7, 2026
b281cec
Delete jitpack.yml
fdevans Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,20 @@ 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
- name: Build with Gradle
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
uses: actions/upload-artifact@v4
with:
# Artifact name
name: openssh-node-execution-${{ steps.get_version.outputs.VERSION }}
Expand Down
27 changes: 11 additions & 16 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,30 @@
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
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
- name: Get Release Version
id: get_version
run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Create Release
id: create_release
run: |
gh release create \
--generate-notes \
Expand All @@ -35,13 +33,10 @@ jobs:
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
- name: Publish to Maven Central
run: ./gradlew -PsigningKey=${SIGNING_KEY_B64} -PsigningPassword=${SIGNING_PASSWORD} -PsonatypeUsername=${SONATYPE_USERNAME} -PsonatypePassword=${SONATYPE_PASSWORD} publishToSonatype closeAndReleaseSonatypeStagingRepository
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
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SIGNING_KEY_B64: ${{ secrets.SIGNING_KEY_B64 }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
68 changes: 43 additions & 25 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,37 @@ buildscript {
mavenCentral()
}
}

plugins {
id 'pl.allegro.tech.build.axion-release' version '1.18.18'
id 'java'
id 'pl.allegro.tech.build.axion-release' version '1.17.2'
id 'io.github.gradle-nexus.publish-plugin' version '2.0.0'
}

repositories {
mavenLocal()
maven {
name = 'Central Portal Snapshots'
url = 'https://central.sonatype.com/repository/maven-snapshots/'
content {
includeGroup('org.rundeck')
}
}
mavenCentral()
}

group = 'org.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}"
ext.publishDescription = project.description ?: 'Openssh node execution services'
Expand All @@ -24,21 +50,11 @@ ext.developers = [
[id: 'gschueler', name: 'Greg Schueler', email: 'greg@rundeck.com']
]

scmVersion {
ignoreUncommittedChanges = true
tag {
prefix = ''
versionSeparator = ''
}
versionCreator("simple")
}

project.version = scmVersion.version
ext.archiveFilename = ext.archivesBaseName + '-' + version
ext.archiveFilename = ext.archivesBaseName + '-' + project.version.toString()

java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

defaultTasks 'build'
Expand All @@ -48,21 +64,21 @@ 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")
include("resources/**")
include("contents/*")
into("${archiveBaseName.get()}-${archiveVersion.get()}")
into("${archiveBaseName.get()}-" + project.version.toString())
}

manifest {
attributes(
'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
Expand All @@ -74,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,
Expand All @@ -100,18 +116,20 @@ tasks.named('pluginZip').configure {
}
}

apply plugin: 'maven-publish'

publishing {
publications {
mavenZip(MavenPublication) {
artifact tasks.named('pluginZip').get()
nexusPublishing {
packageGroup = 'org.rundeck.plugins'
repositories {
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 {
dependsOn tasks.named('pluginZip')
}
}
40 changes: 30 additions & 10 deletions gradle/publishing.gradle
Original file line number Diff line number Diff line change
@@ -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" \
Expand All @@ -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
Expand Down Expand Up @@ -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() :
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
Loading