Skip to content

INTERNAL-2043 Add GitHub release actions to open-source plugin repos#1

Merged
bin-xnatworks merged 6 commits into
developfrom
xnat-8763
Jul 10, 2026
Merged

INTERNAL-2043 Add GitHub release actions to open-source plugin repos#1
bin-xnatworks merged 6 commits into
developfrom
xnat-8763

Conversation

@bin-xnatworks

@bin-xnatworks bin-xnatworks commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator
  1. Java 21
  2. Gradle 9.4.1, monorepo 1.10.1-SNAPSHOT
  3. Add CI workflows: build-publish.yml / release-cut-rc.yml / release-promote.yml (thin callers of NrgXnat/xnat-ci-workflows@v1)

Following monorepo's docs/plugin-migration-guide.md and ad-hoc fixes
for transitive deps not in the published org.nrg:parent BOM.

build.gradle:
- vXnat: 1.9.0 → 1.10.1-SNAPSHOT (monorepo target)
- Java: VERSION_1_8 → VERSION_21 (source/targetCompatibility)
- Add io.spring.dependency-management 1.1.7 plugin (guide §1)
- Add dependencyManagement.imports mavenBom 'org.nrg:parent' (guide §1)
- Lombok: hardcode version 1.18.34 + sha256 (guide §2 — importedProperties
  returns null under java-platform BOM)
- Drop org.nrg.xnat:xnat-data-models dependency (merged into :web; guide §3)
- velocity / javax.servlet-api: implementation → compileOnly (guide §4)
- turbine:turbine: add excludes for velocity:texen + jamon:jamon
  (transitive deps no longer in any reachable repo)
- configurations.all: exclude 5 legacy artifacts brought in by log4j 1.x
  (com.sun.jdmk:jmxtools, com.sun.jmx:jmxri, javax.jms:jms,
   javax.sql:jdbc-stdext, javax.transaction:jta — Sun commercial /
   pre-2007 jars not in maven central)

gradle/wrapper/gradle-wrapper.properties:
- 8.10.2-all → 9.4.1-all (matches monorepo wrapper)

Requires monorepo branch NrgXnat/xnat#data-builder-src-restore for the
xnat-data-builder plugin jar to contain its implementation class.

Verified: ./gradlew clean build → BUILD SUCCESSFUL, produces
mfa-plugin-1.6.0-SNAPSHOT.jar (89K).
3 workflows under .github/workflows/ for plugin CI, mirroring monorepo
NrgXnat/xnat with plugin-specific simplifications:

- build-publish.yml: thin caller around the shared reusable workflow in
  NrgXnat/xnat-ci-workflows. JFrog only (publish-ghcr left at reusable's
  default false; no Docker image for plugins). Triggers on push to
  main / develop / releases/*; workflow_dispatch with publish_jfrog input.

- release-cut-rc.yml: cuts releases/<release>-rc from develop, bumps
  source_branch to next dev version, dispatches build-publish on both.
  Plugin variant: no dicom-edit6 bump; version sed pattern adapted to
  build.gradle Groovy DSL (^version "..."$).

- release-promote.yml: finalizes RC, merges into target_main (default
  main) with --no-ff, tags, dispatches build-publish. Plugin variant:
  no target_develop / no dicom-edit6 sync step.

actionlint pass on all three.
@bin-xnatworks bin-xnatworks changed the title XNAT-8763: Java 21 + Gradle 9.4.1 + monorepo 1.10.1-SNAPSHOT (pilot) XNAT-8763: Java 21 + Gradle 9.4.1 + monorepo 1.10.1-SNAPSHOT Jun 23, 2026
…nvention

Read artifactoryUser/Token via project.findProperty (matches CI workflow's
ORG_GRADLE_PROJECT_artifactoryUser/Token env-var mapping), with
ARTIFACTORY_USER/TOKEN env-var fallback. Standardize URL to -local repos.
Mirrors monorepo's buildSrc/buildlogic.java-common-conventions.gradle pattern.
…tern

Replace 187-line + 165-line inline workflows with ~37-line callers that
delegate to NrgXnat/xnat-ci-workflows reusable workflows:
  - gradle-release-cut-rc.yml@v1
  - gradle-release-promote.yml@v1

Total YAML saved per plugin: ~278 lines. Behavior unchanged — the
reusable workflows were extracted verbatim from the previous inline scripts.
The shared reusable workflow gradle-build-publish.yml@v1 has a
publish-ghcr job declaring 'permissions: contents: read, packages: write'.
Even though that job is gated by 'if: inputs.publish-ghcr' (default false),
GitHub Actions parses the permissions at workflow startup. If the caller
doesn't grant 'packages: write', the run fails with startup_failure
before any job runs.

Validated by dispatching build-publish on mfa-plugin/fake-develop:
- Without packages: write → startup_failure in 2s
- With packages: write → reaches Stage 1 Gradle build

Mirrors xnat monorepo's build-publish.yml caller pattern.
The plugin was never actually configured (no `mavenSettings { }` block) and
publishing credentials now flow via findProperty + ARTIFACTORY_USER/TOKEN env
vars (§7.2 standardization), so linguica is dead code.

On CI it actively breaks: linguica 0.5 reads ~/.m2/settings.xml at Gradle
configure time and crashes with "Unable to decrypt local Maven settings
credentials" when the runner-preinstalled settings.xml has encrypted server
entries without matching settings-security.xml.

Same root cause as monorepo linguica removal (2026-05-03,
linguica-removal-via-filter-repo.md), variant symptom on CI runner.
@bin-xnatworks bin-xnatworks changed the title XNAT-8763: Java 21 + Gradle 9.4.1 + monorepo 1.10.1-SNAPSHOT INTERNAL-2043 Add GitHub release actions to open-source plugin repos Jun 29, 2026
@bin-xnatworks bin-xnatworks merged commit 59c2d37 into develop Jul 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants