Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
982f0c4
Update for Grails 7 compatibility
fdevans Jan 2, 2026
64b5297
Update GitHub workflow to use Java 17 for Grails 7 compatibility
fdevans Jan 4, 2026
f2b9915
Update rundeck-core dependency to 6.0.0-SNAPSHOT for Grails 7 compati…
fdevans Jan 4, 2026
1486f38
Add Central Portal Snapshots repository for rundeck-core:6.0.0-SNAPSHOT
fdevans Jan 6, 2026
f332ca6
Prepare http-step for JitPack with Java 17 and Central Portal Snapshots
fdevans Jan 6, 2026
ffb0cfe
Add Central Portal Snapshots repository for rundeck-core:6.0.0-SNAPSH…
fdevans Jan 6, 2026
65669cb
Bump version to 1.1.11-grails7-upgrade-test
fdevans Jan 6, 2026
5b91557
Fix jitpack.yml to use Java 17 instead of Java 11
fdevans Jan 6, 2026
b5feebc
Bump version to 1.1.12-grails7-upgrade-test
fdevans Jan 6, 2026
a3be07b
Fix commons-lang3 version conflict
fdevans Jan 7, 2026
95365bb
Standardize on commons-lang3:3.18.0
fdevans Jan 7, 2026
2708fd3
Downgrade commons-lang3 to 3.17.0 for Grails 7 compatibility
fdevans Jan 7, 2026
fbc5801
Bump version to 1.1.16 due to JitPack build timeout
fdevans Jan 7, 2026
cad5419
Bump version to 1.1.17-grails7-upgrade-test
fdevans Jan 7, 2026
bfbf9b7
Modernize build.gradle and bump to 1.1.18-grails7-upgrade-test
fdevans Jan 7, 2026
e8f6ba0
Migrate to PackageCloud: restore Axion, change groupId to com.rundeck…
fdevans Jan 8, 2026
069f623
Merge remote-tracking branch 'origin/master' into grails7-upgrade
fdevans Feb 17, 2026
1a0d7f2
Fix CVE-2025-48924: Update commons-lang3 to 3.18.0
fdevans Mar 27, 2026
a6482ed
Modernize CI workflows for Java 17 and Node.js 24
fdevans Mar 27, 2026
2d02ec3
Modernize GitHub Actions workflows for Node.js 24 compatibility
fdevans Mar 27, 2026
46ab011
Standardize Gradle version to 8.14.3
fdevans Mar 27, 2026
1b88fdd
Fix YAML indentation for distribution parameter
fdevans Mar 27, 2026
5b7f8bf
Update Gradle wrapper scripts to 8.14.3
fdevans Mar 27, 2026
81a56c0
Fix distribution parameter indentation in workflows
fdevans Mar 28, 2026
6d9d77b
Update commons-lang3 to 3.20.0 to match rundeck core
fdevans Apr 2, 2026
34cc393
Add Maven Publishing
fdevans Apr 6, 2026
7d041f4
Update build.gradle
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
11 changes: 6 additions & 5 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,24 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
fetch-depth: 0
- 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 1.8
uses: actions/setup-java@v1
- 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 plugin jar
uses: actions/upload-artifact@v4
with:
Expand Down
46 changes: 21 additions & 25 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,42 @@
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- '*' # Push events to matching v*, i.e. v1.0, v20.15.10
- '*.*.*'

name: Upload Release Asset
name: Publish Release

jobs:
build:
name: Upload Release Asset
name: Publish Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: set up JDK 1.8
uses: actions/setup-java@v1
- 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 ::set-output name=VERSION::$VERSION
run: VERSION=$(./gradlew currentVersion -q -Prelease.quiet) && echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Create Release
id: create_release
uses: actions/create-release@v1.0.0
run: |
gh release create \
--generate-notes \
--title 'Release ${{ steps.get_version.outputs.VERSION }}' \
${{ github.ref_name }} \
build/libs/http-step-${{ steps.get_version.outputs.VERSION }}.jar
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ steps.get_version.outputs.VERSION }}
draft: false
prerelease: false
- name: Upload Release Asset (jar)
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 }}
asset_path: build/libs/http-step-${{ steps.get_version.outputs.VERSION }}.jar
asset_name: http-step-${{ steps.get_version.outputs.VERSION }}.jar
asset_content_type: application/octet-stream
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SIGNING_KEY_B64: ${{ secrets.SIGNING_KEY_B64 }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
91 changes: 64 additions & 27 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,30 +1,55 @@
plugins {
id 'pl.allegro.tech.build.axion-release' version '1.17.2'
id 'java'
id 'maven-publish'
id 'io.github.gradle-nexus.publish-plugin' version '2.0.0'
}

apply plugin: 'java'

sourceCompatibility = 1.11
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
withSourcesJar()
withJavadocJar()
}
ext.rundeckPluginVersion = '1.2'
ext.pluginClassNames='edu.ohio.ais.rundeck.HttpWorkflowStepPlugin,edu.ohio.ais.rundeck.HttpWorkflowNodeStepPlugin'
ext.pluginName = 'Rundeck Http Step'
ext.pluginDescription = 'A workflow plugin that makes HTTP requests'
group = 'com.github.rundeck-plugins'
group = 'org.rundeck.plugins'

ext.publishName = "Rundeck Http Step ${project.version}"
ext.githubSlug = 'rundeck-plugins/http-step'
ext.developers = [
[id: 'gschueler', name: 'Greg Schueler', email: 'greg@rundeck.com']
]

scmVersion {
ignoreUncommittedChanges = true
ignoreUncommittedChanges = false
tag {
prefix = ''
prefix = '' // NO "v" prefix - see PLUGIN_TAGGING_ARCHITECTURE.md
versionSeparator = ''
}
}
project.version = scmVersion.version

version = scmVersion.version // Dynamic version from git tag

repositories {
mavenLocal()
maven {
name = 'Central Portal Snapshots'
url = 'https://central.sonatype.com/repository/maven-snapshots/'
content {
includeGroup('org.rundeck')
}
}
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()
}

Expand All @@ -39,16 +64,18 @@ configurations{
}

dependencies {
implementation 'org.rundeck:rundeck-core:5.14.0-rc1-20250722'
compileOnly 'org.rundeck:rundeck-core:6.0.0-alpha1-20260407'
testImplementation 'org.rundeck:rundeck-core:6.0.0-alpha1-20260407'

// Add secure commons-lang3 to provide alternative to vulnerable commons-lang 2.6
implementation 'org.apache.commons:commons-lang3:3.18.0'
// Version 3.20.0 fixes CVE-2025-48924 (StackOverflowError in ClassUtils)
pluginLibs 'org.apache.commons:commons-lang3:3.20.0'

pluginLibs group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.14'
pluginLibs group: 'com.google.code.gson', name: 'gson', version:'2.10.1'

testImplementation group: 'com.github.tomakehurst', name: 'wiremock-standalone', version:'2.23.2'
testImplementation group: 'junit', name: 'junit', version:'4.13.1'
testImplementation group: 'junit', name: 'junit', version:'4.13.2'

testImplementation (
'org.mockito:mockito-all:1.9.5',
Expand All @@ -60,22 +87,32 @@ dependencies {
configurations.all {
resolutionStrategy {
// Replace vulnerable commons-lang with secure commons-lang3
// Version 3.18.0 fixes CVE-2025-48924 (StackOverflowError in ClassUtils)
dependencySubstitution {
substitute module('commons-lang:commons-lang') using module('org.apache.commons:commons-lang3:3.18.0')
}
}
}


// task to copy plugin libs to output/lib dir
task copyToLib(type: Copy) {
into "$buildDir/output/lib"
from configurations.pluginLibs
test {
useJUnit()

// Java 17+ module access for reflection/mocking
jvmArgs = [
'--add-opens=java.base/java.lang=ALL-UNNAMED',
'--add-opens=java.base/java.util=ALL-UNNAMED',
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED',
'--add-opens=java.base/java.net=ALL-UNNAMED'
]
}


jar {
from "$buildDir/output"
// Include plugin dependencies in lib/ directory
into('lib') {
from configurations.pluginLibs
}

manifest {
def libList = configurations.pluginLibs.collect{'lib/'+it.name}.join(' ')

Expand All @@ -86,22 +123,22 @@ jar {
attributes 'Rundeck-Plugin-Rundeck-Compatibility-Version': '3.x'
attributes 'Rundeck-Plugin-Tags': 'java,WorkflowStep'
attributes 'Rundeck-Plugin-License': 'Apache 2.0'
attributes 'Rundeck-Plugin-Source-Link': 'https://github.com/rundeck-plugins/http-notification'
attributes 'Rundeck-Plugin-Source-Link': 'https://github.com/rundeck-plugins/http-step'
attributes 'Rundeck-Plugin-Target-Host-Compatibility': 'all'
attributes 'Rundeck-Plugin-Version': rundeckPluginVersion
attributes 'Rundeck-Plugin-Archive': 'true'
attributes 'Rundeck-Plugin-Libs': "${libList}"

}
dependsOn(copyToLib)

}

publishing {
publications {
maven(MavenPublication) {
artifactId = 'http-step'
from components.java
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"
86 changes: 86 additions & 0 deletions gradle/publishing.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/**
* Define project extension values in the project gradle file before including this file:
*
* 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:
*
* ./gradlew \
* -PsigningKey="base64 encoded gpg key" \
* -PsigningPassword="password for key" \
* -PsonatypeUsername="sonatype token user" \
* -PsonatypePassword="sonatype token password" \
* publishToSonatype closeAndReleaseSonatypeStagingRepository
*/
apply plugin: 'maven-publish'
apply plugin: 'signing'

publishing {
publications {
"${project.name}"(MavenPublication) { publication ->
from components.java

pom {
name = publishName
description = project.ext.hasProperty('publishDescription') ? project.ext.publishDescription :
project.description ?: publishName
url = "https://github.com/${githubSlug}"
licenses {
license {
name = 'The Apache Software License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution = 'repo'
}
}
scm {
url = "https://github.com/${githubSlug}"
connection = "scm:git:git@github.com/${githubSlug}.git"
developerConnection = "scm:git:git@github.com:${githubSlug}.git"
}
if (project.ext.developers) {
developers {
project.ext.developers.each { dev ->
developer {
id = dev.id
name = dev.name
email = dev.email
}
}
}
}
}

}
}
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() :
null
}

if (project.hasProperty('signingKey') && project.hasProperty('signingPassword')) {
signing {
useInMemoryPgpKeys(base64Decode("signingKey"), project.signingPassword)
sign(publishing.publications)
}
}
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
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.4.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider pinning the wrapper distribution with distributionSha256Sum for supply-chain integrity. Right now the wrapper will download gradle-8.14.3-bin.zip without checksum verification, which weakens defenses against tampering.

Suggested change
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
distributionSha256Sum=<official-sha256-for-gradle-8.14.3-bin.zip>

Copilot uses AI. Check for mistakes.
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading
Loading