Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
36f9cf8
Update CHANGELOG
Mar 3, 2024
e00fca2
Merge branch 'releases/3.4.3-rc'
Mar 3, 2024
e40bd6c
Update to version 3.4.3 and parent version 1.8.10
Mar 3, 2024
02e2654
CS-968 Add more detail to changelog about docker library switch
johnflavin-fw May 31, 2024
e22f1ec
Update version to 3.5.0-RC-SNAPSHOT
johnflavin-fw May 31, 2024
a700f3b
CS-966 Store k8s node id on updates
willhortonfw Aug 19, 2024
fe0ecf3
Update changelog and build version for 3.5.0
willhortonfw Aug 20, 2024
b3029ca
update version to 3.5.0
binzhang7101 Aug 21, 2024
38155fd
Update to version 3.6.0-RC-SNAPSHOT
Sep 9, 2024
439b24f
Merge branch 'releases/3.6.0-rc'
Sep 25, 2024
027b0fb
Update to version 3.6.0 and parent version 1.9.0
Sep 25, 2024
55014c3
Update changelog for CS 3.6.0 release
willhortonfw Sep 26, 2024
84104c8
Merge remote-tracking branch 'origin/master' into releases/3.6.1-rc
binzhang7101 Nov 19, 2024
f8fc227
Update to version 3.6.1
Nov 19, 2024
9cd11df
Update to version 3.6.2-RC-SNAPSHOT
Dec 5, 2024
7f83e57
CS-968 Add more detail to changelog about docker library switch
johnflavin-fw May 31, 2024
ba4d26e
Update changelog and build version for 3.5.0
willhortonfw Aug 20, 2024
2048821
CS-975 Merged fixes/cs-975-misqueue from dev
Dec 6, 2024
4fd7701
Merge branch 'master' into releases/3.6.2-rc
Dec 6, 2024
05ce5b1
Update to version 3.6.2 and parent version 1.9.1
Dec 9, 2024
d05c3cf
Update version to 3.6.3
xnatworks-tim Mar 15, 2025
915158c
CS-989 properly track submitting finalization jobs to the active mq (…
kathrynalpert Mar 3, 2025
c1b736a
Merged in rc/3.6.3-edits (pull request #136)
willhorton-xw Mar 24, 2025
cc3ae03
fix version number
bin-xnatworks Mar 26, 2025
c9803b1
Update to version 3.6.3
Mar 26, 2025
00fb1bc
Update to version 3.7.0-RC-SNAPSHOT
Jun 11, 2025
222df46
Merge branch 'releases/3.7.0-rc'
Jun 13, 2025
4e3c234
Update to version 3.7.0
Jun 13, 2025
32c2480
Updated to 1.9.2 release and version 3.7.1-RC-SNAPSHOT
rherrick Jun 26, 2025
f1c06e2
Merged in fixes/cs-1036 (pull request #159)
rherrick Jun 27, 2025
5056223
Update to version 3.7.1
Jun 30, 2025
07214f1
Update changelog for 3.7.1 release
willhorton-xw Jun 30, 2025
95aae10
Update to version 3.7.1-java21-RC-SNAPSHOT
bin-xnatworks Jul 23, 2025
3a5dd7c
Update to version 3.7.2-RC-SNAPSHOT
Aug 19, 2025
0e5595e
Merge branch 'releases/3.7.2-rc'
Aug 19, 2025
3adb55b
Update to version 3.7.2
Aug 19, 2025
49947a9
Update to version 3.7.3-RC-SNAPSHOT
Nov 21, 2025
4ffe540
Merge branch 'releases/3.7.3-rc'
Nov 21, 2025
8590cb6
Update to version 3.7.3 and parent version 1.9.3
Nov 21, 2025
1f68296
Update version to 3.7.3-java21-RC-SNAPSHOT
bin-xnatworks Jan 6, 2026
1873ed3
Merge origin/master into releases/3.7.3-java21-rc
bin-xnatworks Jan 6, 2026
a7891e6
fix unitTest
bin-xnatworks Jan 6, 2026
a91b116
Update to version 3.8.0-RC-SNAPSHOT
Mar 19, 2026
65318d7
Merge branch 'releases/3.8.0-rc'
Mar 20, 2026
665e7f7
Update to version 3.8.0
Mar 20, 2026
a0edfc1
Merge origin/master (v3.8.0) into releases/3.8.0-java21-rc
bin-xnatworks Mar 20, 2026
4c94465
Force docker-java on 3.4.0.1 version
bin-xnatworks Mar 23, 2026
907f32f
Fix unitTest
bin-xnatworks Mar 23, 2026
a2ae71d
Fix compile issue for 1.10.1-SNAPSHOT monorepo
bin-xnatworks Jun 2, 2026
71195a4
Merge remote-tracking branch 'origin/using-monorepo' into xnat-8763
bin-xnatworks Jun 23, 2026
0126ecd
xnat-8763: bump to Gradle 9.4.1 + Gradle 9 manifest API
bin-xnatworks Jun 23, 2026
ef39cf3
xnat-8763: add CI workflows (build-publish + cut-rc + promote)
bin-xnatworks Jun 23, 2026
d44c77b
xnat-8763: align publishing.repositories credentials with monorepo co…
bin-xnatworks Jun 24, 2026
c7bf42a
xnat-8763: switch release-cut-rc + release-promote to thin caller pat…
bin-xnatworks Jun 25, 2026
dccfd34
xnat-8763: add 'packages: write' to build-publish.yml caller permissions
bin-xnatworks Jun 26, 2026
83e3c4e
xnat-8763: remove vestigial net.linguica.maven-settings plugin
bin-xnatworks Jun 28, 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
40 changes: 40 additions & 0 deletions .github/workflows/build-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Build and Publish

# Thin caller around the shared reusable workflow in
# NrgXnat/xnat-ci-workflows. Plugin variant — no GHCR Docker image
# (plugins ship a jar to JFrog only).

on:
push:
branches:
- main
- dev # container-service uses 'dev' instead of 'develop'
- 'releases/*' # RC / release branches, e.g. releases/1.6.0-rc
workflow_dispatch:
inputs:
publish_jfrog:
description: 'Publish jar to JFrog Artifactory (nrgxnat)'
type: boolean
default: false

permissions:
contents: read
packages: write # required by reusable workflow's publish-ghcr job (gated by if: inputs.publish-ghcr but parsed at startup)

jobs:
build-publish:
uses: NrgXnat/xnat-ci-workflows/.github/workflows/gradle-build-publish.yml@v1
with:
# ──── Artifact ────
artifact-glob: 'build/libs/*.jar'
artifact-name: 'container-service-jar'

# ──── JFrog ────
# On any push to a triggered branch: publish. On dispatch: only when publish_jfrog ticked.
publish-jfrog: ${{ github.event_name == 'push' || inputs.publish_jfrog }}

# publish-ghcr deliberately omitted — defaults to false in the reusable workflow.

# secrets: inherit passes XNAT_ARTIFACTORY_USER/TOKEN (org-level) and
# the auto-injected GITHUB_TOKEN through to the reusable workflow.
secrets: inherit
37 changes: 37 additions & 0 deletions .github/workflows/release-cut-rc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Release - Cut RC Branch

# Thin caller around the shared reusable workflow in NrgXnat/xnat-ci-workflows.
# Cuts a `releases/<release>-rc` branch from source_branch and bumps
# source_branch to the next dev version. All release-cut logic lives in the
# reusable workflow; this file only defines our triggers + inputs.

on:
workflow_dispatch:
inputs:
next_dev_version:
description: 'Next dev SNAPSHOT version (e.g. 1.7.0-SNAPSHOT)'
type: string
required: true
source_branch:
description: 'Branch to cut from (default: dev)'
type: string
required: false
default: dev
trigger_build:
description: 'After cut, dispatch build/publish on RC and source_branch'
type: boolean
required: false
default: true

permissions:
contents: write
actions: write # dispatch build-publish workflow

jobs:
cut-rc:
uses: NrgXnat/xnat-ci-workflows/.github/workflows/gradle-release-cut-rc.yml@v1
with:
next_dev_version: ${{ inputs.next_dev_version }}
source_branch: ${{ inputs.source_branch }}
trigger_build: ${{ inputs.trigger_build }}
secrets: inherit
37 changes: 37 additions & 0 deletions .github/workflows/release-promote.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Release - Promote RC to Main

# Thin caller around the shared reusable workflow in NrgXnat/xnat-ci-workflows.
# Promotes a stabilized RC branch to a tagged release on target_main. All
# release-promote logic lives in the reusable workflow; this file only defines
# our triggers + inputs.

on:
workflow_dispatch:
inputs:
rc_branch:
description: 'RC branch to promote (e.g. releases/1.6.0-rc)'
type: string
required: true
target_main:
description: 'Branch to merge into (default main)'
type: string
required: false
default: main
trigger_build:
description: 'After promote, dispatch build/publish on target_main'
type: boolean
required: false
default: true

permissions:
contents: write # push RC/main + create tag
actions: write # dispatch build-publish workflow

jobs:
promote:
uses: NrgXnat/xnat-ci-workflows/.github/workflows/gradle-release-promote.yml@v1
with:
rc_branch: ${{ inputs.rc_branch }}
target_main: ${{ inputs.target_main }}
trigger_build: ${{ inputs.trigger_build }}
secrets: inherit
121 changes: 69 additions & 52 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
buildscript {
ext {
vXnat = "1.9.3"
vXnat = "1.10.1-SNAPSHOT"
pluginAppName = "XNAT Container Service"
}
}
Expand All @@ -12,18 +12,17 @@ plugins {
id "com.palantir.git-version" version "3.3.0"
id "io.spring.dependency-management" version "1.1.7"
id "io.franzbecker.gradle-lombok" version "5.0.0"
id "net.linguica.maven-settings" version "0.5"
}

group "org.nrg.xnatx.plugins"
version "3.9.0-SNAPSHOT"

java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = 21
targetCompatibility = 21
}

def vMockito = "1.10.19"
def vMockito = "5.7.0"
def vJavassist = "3.21.0-GA"
def vAwaitility = "2.0.0"

Expand All @@ -38,32 +37,40 @@ dependencyManagement {
imports {
mavenBom("org.nrg:parent:${vXnat}") {
bomProperties([
"mockito.version": vMockito,
"javassist.version": vJavassist
])
}
}
}

def vDockerJava = "3.4.0.1"
def vAutoValue = "1.3"
def vAutoValue = "1.5.4"
def vKubernetesClient = "15.0.+"
def vPowerMock = "1.7.0"
def vGson = dependencyManagement.importedProperties["gson.version"]
def vJackson = dependencyManagement.importedProperties["jackson.version"]
def vSpringSecurity = dependencyManagement.importedProperties["spring-security.version"]
def vActiveMQ = dependencyManagement.importedProperties["activemq.version"]
def vPowerMock = "2.0.9"
// importedProperties not available from Gradle java-platform BOM — versions managed by BOM directly

// Use this configuration to put dependencies into the fat jar
configurations {
implementation.extendsFrom(implementAndInclude)
all {
resolutionStrategy.force "org.mockito:mockito-core:${vMockito}"
resolutionStrategy.force "com.github.docker-java:docker-java-api:${vDockerJava}"

exclude group: "org.bouncycastle"
}
}

tasks.withType(Test).configureEach {
// jvmArgs("--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED")
jvmArgs("--add-opens", "java.xml/jdk.xml.internal=ALL-UNNAMED")
jvmArgs("--add-opens", "java.base/java.lang=ALL-UNNAMED")
}

lombok {
version = "1.18.34"
sha256 = "1ea5ad6c6afcff902d75072b2aaa6695585aebee9f12127e15c0036ba95d2918"
}

dependencies {
annotationProcessor "org.nrg:framework"
annotationProcessor "com.google.auto.value:auto-value:${vAutoValue}"
Expand Down Expand Up @@ -105,9 +112,7 @@ dependencies {
implementation ("org.nrg.xdat:core") {
transitive = false
}
implementation ("org.nrg.xnat:xnat-data-models") {
transitive = false
}
// xnat-data-models merged into org.nrg.xnat:web in monorepo — no longer a separate artifact
implementation "org.nrg:prefs"
implementation ("org.nrg:notify") {
exclude group: "cglib"
Expand All @@ -131,8 +136,8 @@ dependencies {
implementation "org.springframework:spring-webmvc"
implementation "org.springframework:spring-jms"
implementation "org.springframework:spring-messaging"
implementation "javax.jms:javax.jms-api:2.0.1"
implementation "org.apache.activemq:activemq-all:${vActiveMQ}"
implementation "javax.jms:javax.jms-api"
implementation "org.apache.activemq:activemq-all"
implementation "org.aspectj:aspectjweaver"

implementation "io.springfox:springfox-swagger2"
Expand All @@ -144,8 +149,8 @@ dependencies {
implementation "com.fasterxml.jackson.core:jackson-annotations"
implementation "com.fasterxml.jackson.core:jackson-core"
implementation "com.fasterxml.jackson.core:jackson-databind"
implementation "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:${vJackson}"
implementation "com.fasterxml.jackson.datatype:jackson-datatype-guava:${vJackson}"
implementation "com.fasterxml.jackson.module:jackson-module-jaxb-annotations"
implementation "com.fasterxml.jackson.datatype:jackson-datatype-guava"

implementation "com.jayway.jsonpath:json-path"

Expand All @@ -163,7 +168,7 @@ dependencies {
implementation ("org.apache.velocity:velocity") {
transitive = false
}
implementation ("xalan:xalan") {
implementation ("xalan:xalan:2.7.2") {
transitive = false
}

Expand All @@ -174,39 +179,47 @@ dependencies {
runtimeOnly "org.apache.commons:commons-compress"
runtimeOnly "org.apache.commons:commons-lang3"
runtimeOnly "org.apache.httpcomponents:httpclient"
runtimeOnly "com.google.code.gson:gson:${vGson}"
runtimeOnly "com.google.code.gson:gson"
runtimeOnly "com.google.code.findbugs:jsr305"
runtimeOnly "org.yaml:snakeyaml:1.15+"

testImplementation "junit:junit"
testImplementation "junit:junit:4.13.2"
testImplementation(platform('org.junit:junit-bom:5.10.2'))
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation "org.hamcrest:hamcrest-library"
testImplementation "org.springframework:spring-test"
testImplementation "org.springframework.security:spring-security-test:${vSpringSecurity}"
testImplementation "org.springframework.security:spring-security-test"
testImplementation "org.springframework.security:spring-security-config"
testImplementation "org.mockito:mockito-core"
testImplementation "org.mockito:mockito-core:${vMockito}"
testImplementation 'org.mockito:mockito-junit-jupiter:5.0.0' // JUnit 5 integration for Mockito

testImplementation "javax.servlet:javax.servlet-api"
testImplementation "com.h2database:h2"
testImplementation "org.springframework:spring-jdbc"
testImplementation "org.springframework:spring-orm"
testImplementation "org.apache.commons:commons-dbcp2"
testImplementation "commons-net:commons-net"
testImplementation "org.powermock:powermock-module-junit4:${vPowerMock}"
testImplementation "org.powermock:powermock-api-mockito:${vPowerMock}"
testImplementation "org.awaitility:awaitility:${vAwaitility}"
testImplementation "org.testcontainers:junit-jupiter:1.19.0"
testImplementation "org.testcontainers:postgresql:1.19.0"
}

test {
useJUnitPlatform()
systemProperty "integration", System.getProperty('integration') == "true"
}

tasks.register ( 'unitTest', Test ) {
useJUnitPlatform()

systemProperties['integration'] = "false"
test
}

tasks.register ( 'integrationTest', Test ) {
useJUnitPlatform()
systemProperties['integration'] = "true"
test
}
Expand Down Expand Up @@ -236,23 +249,23 @@ try {
isCleanTag = false
}

ext.gitManifest = manifest {
attributes "Application-Name": pluginAppName,
"Build-Date": buildDate,
"Build-Number": buildNumber,
"Implementation-Version": project.version,
"Implementation-Sha": gitHash,
"Implementation-Sha-Full": gitHashFull,
"Implementation-Commit": commitDistance,
"Implementation-LastTag": lastTag,
"Implementation-Branch": branchName,
"Implementation-CleanTag": isCleanTag,
"Implementation-Dirty": isDirty
}
ext.gitManifestAttrs = [
"Application-Name" : pluginAppName,
"Build-Date" : buildDate,
"Build-Number" : buildNumber,
"Implementation-Version" : project.version,
"Implementation-Sha" : gitHash,
"Implementation-Sha-Full" : gitHashFull,
"Implementation-Commit" : commitDistance,
"Implementation-LastTag" : lastTag,
"Implementation-Branch" : branchName,
"Implementation-CleanTag" : isCleanTag,
"Implementation-Dirty" : isDirty
]

task fatJar(type: Jar) {
zip64 true
classifier = "fat"
archiveClassifier.set("fat")
from {
configurations.implementAndInclude.collect { it.isDirectory() ? it : zipTree(it) }
} {
Expand All @@ -262,7 +275,7 @@ task fatJar(type: Jar) {
}
duplicatesStrategy "exclude"
manifest {
from gitManifest
attributes gitManifestAttrs
}
with jar
}
Expand All @@ -274,7 +287,7 @@ sourceSets.main.java {

jar{
manifest {
from gitManifest
attributes gitManifestAttrs
}
doLast {
if (!gradle.taskGraph.hasTask(":fatJar")) {
Expand All @@ -284,17 +297,17 @@ jar{
}

task sourceJar(type: Jar, dependsOn: classes) {
classifier = "sources"
archiveClassifier.set("sources")
manifest {
from gitManifest
attributes gitManifestAttrs
}
from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = "javadoc"
archiveClassifier.set("javadoc")
manifest {
from gitManifest
attributes gitManifestAttrs
}
from javadoc.destinationDir
}
Expand Down Expand Up @@ -345,13 +358,17 @@ publishing {
}
repositories {
maven {
if (project.version.endsWith("-SNAPSHOT")) {
url "https://nrgxnat.jfrog.io/nrgxnat/libs-snapshot-local"
} else {
url "https://nrgxnat.jfrog.io/nrgxnat/libs-release-local"
}
// The value for name must match <id> in ~/.m2/settings.xml
name = "XNAT_Artifactory"
url = project.version.toString().endsWith("-SNAPSHOT")
? "https://nrgxnat.jfrog.io/nrgxnat/libs-snapshot-local"
: "https://nrgxnat.jfrog.io/nrgxnat/libs-release-local"
// CI injects ORG_GRADLE_PROJECT_artifactoryUser/Token env vars (Gradle maps
// these to project properties). Local devs can set artifactoryUser/Token in
// ~/.gradle/gradle.properties. Mirrors monorepo's buildSrc convention.
credentials {
username = (project.findProperty("artifactoryUser") ?: System.getenv("ARTIFACTORY_USER")) ?: ""
password = (project.findProperty("artifactoryToken") ?: System.getenv("ARTIFACTORY_TOKEN")) ?: ""
}
}
}
}
Expand Down
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.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading
Loading