- name
- install-nextflow
- description
- Install or upgrade Nextflow on the user's machine. Use when the user wants to install Nextflow, check their current Nextflow version, upgrade Nextflow, or set up the prerequisites (Java 17+) needed to run Nextflow.
- allowed-tools
- Bash, Read
# Install or Upgrade Nextflow
Install Nextflow (or upgrade an existing installation) and ensure the Java prerequisite is in place. The plugin requires **Nextflow 26.04.0 or later**.
## Step 1: Check Whether Nextflow Is Installed
```bash
command -v nextflow && nextflow -version
```
- **If installed**, parse the version from the output and proceed to Step 2.
- **If not installed**, skip to Step 3.
## Step 2: Check for Upgrades (Existing Install)
If Nextflow is already installed:
1. Read the installed version from `nextflow -version`.
2. If the installed version is **older than 26.04.0**, the user MUST upgrade — this plugin's skills depend on it.
3. Otherwise, propose an upgrade only if a newer version is available.
Run a self-update (it checks the latest release and updates if newer):
```bash
nextflow self-update
```
Confirm with the user before running it. After the update, re-run `nextflow -version` to verify.
If the install is already up to date, stop here.
## Step 3: Verify Java 17+ (Required for Installing Nextflow)
Nextflow requires Java 17 or later. Check the installed Java version:
```bash
java -version
```
Note: `java -version` writes to **stderr**, not stdout. Capture both streams when parsing:
```bash
java -version 2>&1 | head -1
```
- If Java 17+ is present, proceed to Step 4.
- If Java is missing or older than 17, install Java 21 using SDKMAN (Step 3a).
### Step 3a: Install Java 21 via SDKMAN
First, check whether SDKMAN is installed:
```bash
[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ] && echo "SDKMAN present" || echo "SDKMAN missing"
```
If SDKMAN is missing, install it:
```bash
curl -s "https://get.sdkman.io" | bash
```
Then load SDKMAN into the current shell session and install Java 21:
```bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 21-tem
```
After installation, verify:
```bash
java -version
```
## Step 4: Install Nextflow
Prefer `curl`; fall back to `wget` if `curl` is unavailable.
Detect which downloader is available:
```bash
command -v curl >/dev/null && echo "curl" || (command -v wget >/dev/null && echo "wget" || echo "none")
```
**Using curl:**
```bash
curl -fsSL https://get.nextflow.io | bash
```
**Using wget (if curl is missing):**
```bash
wget -qO- https://get.nextflow.io | bash
```
If neither `curl` nor `wget` is available, stop and ask the user to install one of them.
The installer drops a `nextflow` launcher in the current directory. Move it onto the user's `PATH` (confirm the destination with the user first):
```bash
chmod +x nextflow
mv nextflow ~/.local/bin/
```
Common alternatives are `/usr/local/bin/` (may need `sudo`) or any directory already on `PATH` (`echo $PATH`).
## Step 5: Verify the Installation
```bash
nextflow -version
```
Confirm the reported version is **26.04.0 or later**. Present the version to the user.
## Nextflow Versioning
### Calendar versioning
Stable Nextflow releases use **calendar versioning** in the form `YY.MM.PATCH`:
- `25.10.1` — patch 1 of the October 2025 release
- `26.04.0` — first release of April 2026
Compare versions as calendar dates, not semver — `26.04.0` is newer than `25.10.1`.
### Edge releases
Edge (preview) releases append the `-edge` suffix, e.g. `26.05.0-edge`. They include unreleased features and are not recommended for production.
Switch the active channel via the `NXF_EDGE` environment variable:
```bash
export NXF_EDGE=1 # use edge releases
export NXF_EDGE=0 # back to stable releases (default)
```
This affects which release `nextflow self-update` and the launcher resolve to.
### Pinning a specific version
Pin any version (stable or edge) with `NXF_VER`. The launcher will download and use that exact version on the next run:
```bash
export NXF_VER=25.10.1 # pin a stable release
export NXF_VER=26.05.0-edge # pin an edge release
```
Unset `NXF_VER` (`unset NXF_VER`) to return to the latest version of the active channel.
When the user asks to install or run a specific version, set `NXF_VER` rather than reinstalling.
## Critical Rules
1. **CHECK FIRST** — always run `nextflow -version` before deciding to install or upgrade.
2. **REQUIRE 26.04.0+** — the plugin's other skills depend on `nextflow module`, `nextflow auth`, and `nextflow launch`, which require this version.
3. **VERIFY JAVA 17+** before installing Nextflow — install Java 21 via SDKMAN if missing or too old.
4. **CONFIRM destructive actions** — ask the user before running `nextflow self-update`, installing SDKMAN, or moving the `nextflow` launcher to a system directory.
5. **PREFER curl, FALL BACK to wget** — if neither is available, stop and ask the user to install one.
6. **REMEMBER stderr** — `java -version` writes to stderr; redirect with `2>&1` when parsing.
7. **VERIFY at the end** — always run `nextflow -version` after install/upgrade to confirm the result.
8. **USE NXF_VER for pinning** — when the user asks for a specific Nextflow version, set `NXF_VER` instead of reinstalling.
9. **TREAT versions as calendar dates** — Nextflow uses `YY.MM.PATCH`, not semver, so `26.04.0` is newer than `25.10.1`.
عرض على GitHub