Skip to content

Publish core plugins bundle with each dev build - #2

Merged
ewels merged 5 commits into
masterfrom
claude/dev-builds-plugins-bundle-yuhrwt
Jul 19, 2026
Merged

Publish core plugins bundle with each dev build#2
ewels merged 5 commits into
masterfrom
claude/dev-builds-plugins-bundle-yuhrwt

Conversation

@ewels

@ewels ewels commented Jul 19, 2026

Copy link
Copy Markdown
Member

What

Every dev build now also produces and publishes a core plugins bundle as a release asset:

nextflow-<version>-plugins.tar.gz

Its top-level entries are the unpacked core plugin directories, named <pluginId>-<pluginVersion>/ (e.g. nf-amazon-3.10.1/) — exactly the layout Nextflow keeps in its plugins cache ($NXF_HOME/plugins), each in the pf4j expanded-plugin form (classes/ incl. META-INF/MANIFEST.MF, lib/). The asset is included in checksums.sha256 like the other assets.

Why

nextflow-io/nextflow#7219 adds NXF_DEV=master / NXF_DEV=pr-<n> support to the bash launcher. As of commit ee5ff50ca on that PR, the launcher downloads this bundle for each dev build and uses it as NXF_PLUGINS_DIR, so core plugins compiled from the PR/master source are used instead of the released plugin versions. Previously, PRs modifying core plugins were silently tested against released plugin code. If the asset is missing (releases published before this change), the launcher warns and falls back — so this is backward-compatible in both directions.

How

  • The build job (which already compiles the source) additionally runs the installPlugin gradle task with NXF_PLUGINS_DIR=$PWD/build/plugins, the same recipe as Nextflow's own e2e CI (test-e2e/run.sh). The task unpacks each plugin's distribution zip into <pluginId>-<pluginVersion>/ under that directory.
  • The staging step tars build/plugins into the asset (capturing the member listing in the same pass) and sanity-checks the layout: top-level entries must be nf-*/ directories and plugin manifests (classes/META-INF/MANIFEST.MF) must be present.
  • The security split is preserved: the tarball is produced inside the existing unprivileged build job (read-only token, runs PR code) and handed to the publish job as a workflow artifact like the other assets; the publish job still never executes checked-out source.
  • Drive-by fix: publish-releases.sh now locates builds by their meta.json in both artifact layouts. actions/download-artifact unpacks a single artifact directly into the artifacts directory (no per-artifact sub-directory), so runs that built exactly one version — e.g. a manual dispatch of one PR — silently published nothing.
  • README: documents the new asset, its layout, that NXF_DEV uses it automatically, that the plain NXF_BASE+NXF_VER form does not (released plugins apply), and updates the plugin-testing caveat.

Verification

Dispatched this workflow (from this branch) with pr=7219: run 29679556936 published v26.07.0-edge-pr-7219-ee5ff50 including the 181 MB plugins bundle. Checked:

  • tar -tzf shows exactly the 10 core plugin dirs (nf-amazon-3.10.1/nf-wave-1.21.1/), each with classes/META-INF/MANIFEST.MF and lib/; checksums.sha256 entry matches the downloaded asset.
  • End-to-end with the launcher from Add NXF_DEV launcher support for automated dev builds nextflow#7219 (NXF_DEV=pr-7219, pinned NXF_VER=26.07.0-edge-pr-7219-ee5ff50): the bundle is downloaded and unpacked to $NXF_HOME/framework/<version>/plugins (all nf-* dirs present) and info runs without the "Cannot download the bundled plugins" warning.

Note: the latest/pr-7219 pointer commit that the verification run's publish job pushed to this branch was dropped from the PR history — pointer updates belong to runs on master.

🤖 Generated with Claude Code

https://claude.ai/code/session_018o1Eyego1ijQSea5894993

claude added 5 commits July 19, 2026 07:58
Build the core plugins alongside the fat jar (gradle installPlugin,
honoring NXF_PLUGINS_DIR) and attach them to each release as
nextflow-<version>-plugins.tar.gz, whose top-level entries are the
unpacked <pluginId>-<pluginVersion>/ directories — the layout the
launcher keeps in $NXF_HOME/plugins. The NXF_DEV launcher mode
(nextflow-io/nextflow#7219) downloads the bundle and uses it as
NXF_PLUGINS_DIR, so core plugin changes in a PR are actually tested.

The tarball is produced inside the unprivileged build job and handed
to the publish job as a workflow artifact, preserving the split
between compiling PR code and publishing.
The unpacked plugin layout keeps the manifest at
<pluginId>-<pluginVersion>/classes/META-INF/MANIFEST.MF (the pf4j
expanded-plugin layout), not at the plugin directory root.
grep -q exits at the first match, which kills the tar feeding the
pipe and makes the pipeline fail under pipefail even on success.
List the tarball once and grep the captured listing instead.
actions/download-artifact unpacks a lone artifact directly into the
artifacts directory instead of a per-artifact sub-directory, so runs
that built exactly one version (e.g. a manual dispatch of one PR)
silently published nothing. Locate builds by their meta.json in both
layouts.
tar -czv emits the member listing while writing the archive, so the
layout checks no longer need a second full decompression with tar -tz.
@ewels
ewels force-pushed the claude/dev-builds-plugins-bundle-yuhrwt branch from a598016 to 92bffda Compare July 19, 2026 08:21
@ewels
ewels merged commit 6527351 into master Jul 19, 2026
@ewels
ewels deleted the claude/dev-builds-plugins-bundle-yuhrwt branch July 19, 2026 08:46
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.

2 participants