Development Guide
Contributor-oriented setup and day-to-day commands for working on nf-bids. This
page replaces the legacy Markdown development notes from the retired docs/
directory with pointers to the current Antora guides that reflect the
repository’s actual build, test, and documentation flow.
First-time setup
Start with Building & Installation for cloning, submodule initialisation, assembly, and local plugin installation. That guide also covers prerequisite versions for Java, Nextflow, Node.js, npm, and Graphviz.
For documentation-specific tooling, see Contributing to the Documentation.
Project map
The source tree is documented in detail in Source Tree Map. The most important contributor areas are:
| Path | Role |
|---|---|
|
Plugin implementation: channel factory, config loading, parsing, grouping, operators, utilities |
|
Unit tests (Spock / JUnit) |
|
Integration and regression suites (nf-test + snapshots) |
|
Edge-case suites and stress scenarios |
|
Benchmark workflows and benchmark result generation |
|
Antora site source, build scripts, diagrams, and UI overrides |
|
Vendored parser submodule used at runtime |
Daily command set
From the repository root:
./gradlew assemble # compile and package the plugin
./gradlew test # run unit tests
cd test/validation && bash test_datasets.sh && cd ../.. # run integration / validation suites
./gradlew install # install into the local Nextflow plugin cache
./gradlew docs # build the Antora documentation site
Equivalent convenience targets exist in Makefile for assemble, test,
install, docs, and docs-serve.
Testing workflow
Use the Testing Guide as the authoritative reference. In practice, contributors usually work in this order:
-
Run
./gradlew testfor fast feedback on unit-level changes. -
Run targeted
nf-testsuites while iterating on behaviour. -
Run
cd test/validation && bash test_datasets.sh && cd ../..before merging behaviour changes. -
Rebuild docs with
./gradlew docswhen public APIs, diagrams, or docs change.
The testing guide also documents snapshot updates, edge-case workflows, and benchmark expectations.
Documentation responsibilities
Any public API, runtime behaviour, release step, or validation change should be mirrored in the relevant Antora page during the same pull request.
Use these pages as your documentation maintenance checklist:
Debugging and inspection
Useful places to inspect while iterating:
-
build/reports/tests/test/index.html— unit-test report output. -
.nf-test/— nf-test work directory and logs. -
documentation/build/site/— rendered Antora site after./gradlew docs. -
build/libs/— assembled plugin JARs.
When a documentation build fails, check both the Gradle task output and the
helper scripts in documentation/bin/.
Running GitHub Actions Locally with act
Use act to reproduce CI jobs locally before pushing. This is the fastest way
to catch workflow-level issues (tool bootstrap, path handling, snapshot
discrepancies) that do not always appear in direct local runs.
Installation and prerequisites
1) Install Docker and verify daemon access
act runs jobs in Docker containers.
docker version
docker info
Validation workflow (snapshot-aware)
Before running CI validation locally, refresh snapshots when behaviour changed:
cd test/validation
bash test_datasets.sh --update-snapshots
cd ../..
Run the validation job exactly as CI does:
act pull_request -W .github/workflows/validation.yml -j validation
Tips:
-
The workflow sets
NFT_DIFF=pdiff, so snapshot mismatches show unified diffs. -
Save output for review with
| tee act-validation.log.
Edge-case workflow
Run the edge-case CI job:
act pull_request -W .github/workflows/validation.yml -j edge_cases
This executes test/edge_cases/run_all_tests.sh inside the workflow job.
Benchmark workflow
The benchmark workflow triggers on push and workflow_dispatch (not
pull_request). Use workflow_dispatch with act:
act workflow_dispatch -W .github/workflows/benchmark.yml -j benchmark
Tips:
-
Save output for review with
| tee act-benchmark.log. -
In local
actmode, commit/push benchmark artifact steps are intentionally skipped by workflow guards.