Commit 9125116
## Summary
Migrates the build from the legacy `buildSrc` / `launch.sh` /
`plugins/build.gradle` layout to the new `io.nextflow.nextflow-plugin`
Gradle plugin, per the [Seqera migration
guide](https://docs.seqera.io/nextflow/guides/migrate-plugin). This
combines PR steps 1+2 from the issue breakdown — they're interdependent
(deleting the old build files without a replacement breaks CI), so
they're shipped together.
Refs #323.
## What changed
- **Deleted** `buildSrc/`, `launch.sh`, `plugins/build.gradle`,
`plugins/nf-quilt/build.gradle`, `groovysh-task.gradle`,
`gradle-groovysh-init.gradle`, and the now-redundant
`plugins/nf-quilt/src/resources/META-INF/{MANIFEST.MF,extensions.idx}`
(the Gradle plugin generates these).
- **Moved** sources to the standard layout the new plugin expects:
- `plugins/nf-quilt/src/main` → `src/main/groovy`
- `plugins/nf-quilt/src/test` → `src/test/groovy`
- `plugins/nf-quilt/src/resources` → `src/main/resources`
- **`settings.gradle`** reduced to `rootProject.name = 'nf-quilt'`.
- **New root `build.gradle`** applies `io.nextflow.nextflow-plugin`
1.0.0-beta.6, declares `quiltcore`, `jackson-databind`,
`jackson-datatype-jsr310`, `commons-io` as runtime deps, and configures
`nextflowPlugin {}` with `className = 'nextflow.quilt.QuiltPlugin'`,
provider `Quilt Data`, and three extension points
(`QuiltObserverFactory`, `QuiltPathFactory`, `QuiltPathSerializer`).
Plugin version is inlined as `0.9.2` (unchanged).
- **`Makefile`** rewritten around `assemble` / `installPlugin` /
`releasePlugin`. The legacy `pkg-test`, `dyn-test`, `s3-*` integration
targets are preserved but now use `nextflow` directly (the `launch.sh`
shim is gone) and depend on `installPlugin` to seed
`~/.nextflow/plugins/`.
- **`.github/workflows/test.yml`** artifact paths updated from
`plugins/nf-quilt/build/reports/` to `build/reports/`.
- **Tests:** `QuiltSpecification` and `QuiltPkgTest` now read the
generated `MANIFEST.MF` from `build/tmp/jar/` (where the new plugin
emits it), with the legacy paths kept as fallbacks. The `test` task gets
the standard `--add-opens` JVM args and `dependsOn 'jar'` so the
manifest exists before tests run.
- **`gradle.properties`** cleared (legacy Groovy/JDK toolchain keys are
no longer needed — the Gradle plugin handles all of that).
## Deviations from the migration guide
- **MANIFEST.MF retained as a build artifact only.** The guide assumes
you'd just instantiate factories directly in tests. Our
`QuiltSpecification` does a full `Plugins.init` round-trip, which needs
`MANIFEST.MF` on disk. Rather than rewrite all 200+ tests, I pointed the
`TestPluginDescriptorFinder` at the generated manifest and added
`tasks.named('test') { dependsOn 'jar' }`.
- **Plugin version inlined** in `build.gradle` rather than read from a
now-deleted `MANIFEST.MF` source file. This matches the migration
guide's example.
- **JaCoCo coverage** is no longer wired up — the legacy
`verifyCoverage` task is dropped from `make test`. The new Gradle plugin
doesn't apply JaCoCo, and reapplying it cleanly is out of scope. Worth a
follow-up if we want the 70% gate back.
## Test plan
- [x] `./gradlew assemble` — succeeds (produces
`build/libs/nf-quilt-0.9.2-meta.json` + `nf-quilt-0.9.2.zip`)
- [x] `./gradlew test` — 226 tests, 222 passing, 14 skipped, 0 failing
(locally on JDK 21)
- [x] `make test` — green
- [ ] CI matrix (ubuntu/macos/windows × JDK 17/19/21) — pending
- [ ] Spot-check `make pkg-test WRITE_BUCKET=udp-spec` against real S3
(out of scope for this PR; the existing `nf-quilt/dest-0.9.2` package on
`udp-spec` should still satisfy `QuiltPkgTest`)
## Deferred to subsequent PRs
- Doc rewrites: `README.md`, `README-DEV.md`, `CHANGELOG.md`. This PR
only touches the build layer; references to `plugins/nf-quilt/...` paths
in docs were left alone where they aren't actively broken.
- Bumping `Plugin-Version` to `1.0.0` and the actual registry release.
- Reinstating JaCoCo coverage (if desired).
- Validating `releasePlugin` against the registry (no `--dry-run` option
exists; needs an API key).
<!-- greptile_comment -->
<h3>Greptile Summary</h3>
This PR migrates the nf-quilt plugin build from the legacy
`buildSrc`/`launch.sh`/nested-`build.gradle` layout to the
`io.nextflow.nextflow-plugin` Gradle plugin, moving sources to the
standard flat layout the new plugin expects and updating the Makefile
and CI artifact paths accordingly.
- **P1 – `logback-test.xml` in `src/main/resources/`**: this file will
be packaged into the production JAR and force `<root level="DEBUG">`
logging for every user of the plugin; it must move to
`src/test/resources/`.
- **P1 – Broken `make coverage` and `make update` targets**: the
`jacocoTestReport` and `dependencyUpdates` Gradle tasks referenced by
these targets no longer exist in the new `build.gradle`, causing both
targets to fail.
- **P2 – `s3-test` target missing `-plugins` flag**: unlike all other
integration targets, `s3-test` does not pass `-plugins
$(PROJECT)@$(VERSION)`, so Nextflow will resolve from the registry
instead of the locally installed build.
<h3>Confidence Score: 3/5</h3>
Not safe to merge as-is: the logback-test.xml placement will pollute
production logging for all plugin users, and two Makefile targets will
fail at runtime.
Two P1s: (1) logback-test.xml in src/main/resources/ ships DEBUG root
logging into the production JAR, and (2) `make coverage` and `make
update` reference Gradle tasks removed from the new build, causing hard
failures. The core Gradle migration and source-move appear correct, but
these issues must be fixed before merging.
src/main/resources/logback-test.xml (wrong directory — must be
src/test/resources/); Makefile (coverage and update targets broken,
s3-test missing -plugins flag)
<h3>Important Files Changed</h3>
| Filename | Overview |
|----------|----------|
| build.gradle | Root build.gradle rewritten to use
io.nextflow.nextflow-plugin 1.0.0-beta.6; declares runtime deps and
configures nextflowPlugin block cleanly |
| Makefile | Rewritten around assemble/installPlugin/releasePlugin;
three P1/P2 issues: `make coverage` calls a removed jacocoTestReport
task, `make update` calls a removed dependencyUpdates task, and
`s3-test` is missing the `-plugins` flag |
| src/main/resources/logback-test.xml | P1: logback-test.xml placed in
src/main/resources/ instead of src/test/resources/; will be packaged
into the production JAR and force DEBUG root logging for all plugin
users |
| src/test/groovy/nextflow/quilt/QuiltSpecification.groovy | Base test
spec updated to read MANIFEST.MF from build/tmp/jar/ with legacy
fallback paths; correct use of TestPluginDescriptorFinder override |
| src/test/groovy/nextflow/quilt/QuiltPkgTest.groovy | New test class
with manifestVersion() helper; minor P2: FileInputStream not closed in
try block |
| settings.gradle | Simplified to single rootProject.name line; legacy
multi-project include and foojay toolchain resolver removed |
| .github/workflows/test.yml | Artifact upload paths updated from
plugins/nf-quilt/build/reports/ to build/reports/ for both Windows and
Linux/macOS runners |
| gradle.properties | Legacy JVM toolchain keys (groovyVersion,
jdkVersion, javaLangVersion) removed; now only a comment explaining the
new plugin handles these |
</details>
<h3>Flowchart</h3>
```mermaid
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[./gradlew assemble] --> B[build/libs/nf-quilt-0.9.2.zip]
A --> C[build/tmp/jar/MANIFEST.MF]
C --> D[QuiltSpecification.setupSpec\nreads MANIFEST.MF]
D --> E[Plugins.init / startIfMissing]
E --> F[Test suite runs\n226 tests]
G[make install] --> H[./gradlew installPlugin]
H --> I[~/.nextflow/plugins/nf-quilt-0.9.2/]
I --> J[nextflow run ... -plugins nf-quilt@0.9.2]
K[make release] --> L[./gradlew releasePlugin]
L --> M[Seqera Plugin Registry]
style C fill:#f9f,stroke:#c0c
style D fill:#f9f,stroke:#c0c
```
<!-- greptile_failed_comments -->
<details open><summary><h3>Comments Outside Diff (1)</h3></summary>
1. `src/main/resources/logback-test.xml`, line 1-31
([link](https://github.com/quiltdata/nf-quilt/blob/2ad1400b7a52acc759cd005bb8df0a66066562f0/src/main/resources/logback-test.xml#L1-L31))
<a href="#"><img alt="P1"
src="https://greptile-static-assets.s3.amazonaws.com/badges/p1.svg?v=7"
align="top"></a> **Test-only logback config packaged into production
JAR**
`logback-test.xml` belongs in `src/test/resources/`, not
`src/main/resources/`. By living in `src/main/resources/` it will be
included in the production plugin ZIP/JAR. Logback resolves
`logback-test.xml` over `logback.xml`, so every Nextflow user who loads
this plugin will inherit the `<root level="DEBUG">` configuration,
flooding their console with debug output from all loggers at runtime.
</details>
<!-- /greptile_failed_comments -->
<sub>Reviews (1): Last reviewed commit: ["Migrate to new Nextflow plugin
build
sys..."](2ad1400)
| [Re-trigger
Greptile](https://app.greptile.com/api/retrigger?id=30247721)</sub>
> Greptile also left **4 inline comments** on this PR.
<!-- /greptile_comment -->
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent abfdd28 commit 9125116
49 files changed
Lines changed: 142 additions & 881 deletions
File tree
- .github/workflows
- buildSrc
- src/main/groovy
- plugins
- nf-quilt
- src/resources/META-INF
- src
- main
- groovy/nextflow/quilt
- jep
- nio
- resources
- test/groovy/nextflow/quilt
- jep
- nio
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
| 63 | + | |
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
71 | | - | |
| 71 | + | |
72 | 72 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | 5 | | |
10 | | - | |
| 6 | + | |
11 | 7 | | |
12 | 8 | | |
13 | 9 | | |
14 | | - | |
15 | | - | |
| 10 | + | |
16 | 11 | | |
17 | | - | |
| 12 | + | |
18 | 13 | | |
19 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
20 | 36 | | |
21 | 37 | | |
22 | 38 | | |
23 | 39 | | |
24 | 40 | | |
25 | 41 | | |
| 42 | + | |
26 | 43 | | |
27 | 44 | | |
28 | 45 | | |
29 | 46 | | |
30 | | - | |
| 47 | + | |
31 | 48 | | |
32 | 49 | | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | 50 | | |
43 | 51 | | |
44 | 52 | | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
| 53 | + | |
65 | 54 | | |
66 | | - | |
67 | | - | |
68 | | - | |
| 55 | + | |
| 56 | + | |
69 | 57 | | |
70 | | - | |
71 | | - | |
| 58 | + | |
| 59 | + | |
72 | 60 | | |
73 | | - | |
74 | | - | |
| 61 | + | |
| 62 | + | |
75 | 63 | | |
76 | 64 | | |
77 | | - | |
| 65 | + | |
| 66 | + | |
78 | 67 | | |
79 | 68 | | |
80 | | - | |
| 69 | + | |
81 | 70 | | |
82 | | - | |
| 71 | + | |
83 | 72 | | |
84 | | - | |
85 | | - | |
| 73 | + | |
| 74 | + | |
86 | 75 | | |
87 | | - | |
88 | | - | |
| 76 | + | |
| 77 | + | |
89 | 78 | | |
90 | | - | |
91 | | - | |
| 79 | + | |
| 80 | + | |
92 | 81 | | |
93 | | - | |
94 | | - | |
| 82 | + | |
| 83 | + | |
95 | 84 | | |
96 | | - | |
97 | | - | |
| 85 | + | |
| 86 | + | |
98 | 87 | | |
99 | | - | |
| 88 | + | |
100 | 89 | | |
101 | | - | |
| 90 | + | |
102 | 91 | | |
103 | | - | |
| 92 | + | |
104 | 93 | | |
105 | 94 | | |
106 | 95 | | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
| 96 | + | |
125 | 97 | | |
126 | 98 | | |
127 | 99 | | |
128 | 100 | | |
129 | 101 | | |
130 | 102 | | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
| 103 | + | |
136 | 104 | | |
137 | 105 | | |
138 | 106 | | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
0 commit comments