diff --git a/.editorconfig b/.editorconfig
index 014c2383bd..449f446a3b 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,3 +10,13 @@ indent_style = space
[*.{md,yml,yaml,html,css,scss,js,cff}]
indent_size = 2
+
+# ignore python and markdown files
+[*.py]
+indent_style = unset
+
+[**/{CONTRIBUTING,README}.md]
+indent_style = unset
+
+[**/Makefile]
+indent_style = unset
diff --git a/.github/.coveragerc b/.github/.coveragerc
index 522a29eb62..24a419ae07 100644
--- a/.github/.coveragerc
+++ b/.github/.coveragerc
@@ -1,2 +1,5 @@
[run]
-omit = nf_core/pipeline-template/*
+omit = nf_core/*-template/*
+source = nf_core
+relative_files = True
+
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 75da414db6..04d327bd8c 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -35,45 +35,28 @@ pip install -e .
## Code formatting
-### Black
+### Ruff
-All Python code in nf-core/tools must be passed through the [Black Python code formatter](https://black.readthedocs.io/en/stable/).
+All Python code in nf-core/tools must be passed through the [Ruff code linter and formatter](https://github.com/astral-sh/ruff).
This ensures a harmonised code formatting style throughout the package, from all contributors.
-You can run Black on the command line (it's included in `requirements-dev.txt`) - eg. to run recursively on the whole repository:
+You can run Ruff on the command line (it's included in `requirements-dev.txt`) - eg. to run recursively on the whole repository:
```bash
-black .
+ruff format .
```
-Alternatively, Black has [integrations for most common editors](https://black.readthedocs.io/en/stable/editor_integration.html)
+Alternatively, Ruff has [integrations for most common editors](https://github.com/astral-sh/ruff-lsp) and VSCode(https://github.com/astral-sh/ruff-vscode)
to automatically format code when you hit save.
-You can also set it up to run when you [make a commit](https://black.readthedocs.io/en/stable/version_control_integration.html).
There is an automated CI check that runs when you open a pull-request to nf-core/tools that will fail if
-any code does not adhere to Black formatting.
+any code does not adhere to Ruff formatting.
-### isort
-
-All Python code must also be passed through [isort](https://pycqa.github.io/isort/index.html).
-This ensures a harmonised imports throughout the package, from all contributors.
-
-To run isort on the command line recursively on the whole repository you can use:
-
-```bash
-isort .
-```
-
-isort also has [plugins for most common editors](https://github.com/pycqa/isort/wiki/isort-Plugins)
-to automatically format code when you hit save.
-Or [version control integration](https://pycqa.github.io/isort/docs/configuration/pre-commit.html) to set it up to run when you make a commit.
-
-There is an automated CI check that runs when you open a pull-request to nf-core/tools that will fail if
-any code does not adhere to isort formatting.
+Ruff has been adopted for linting and formatting in replacement of Black, isort (for imports) and pyupgrade. It also includes Flake8.
### pre-commit hooks
-This repository comes with [pre-commit](https://pre-commit.com/) hooks for black, isort and Prettier. pre-commit automatically runs checks before a commit is committed into the git history. If all checks pass, the commit is made, if files are changed by the pre-commit hooks, the user is informed and has to stage the changes and attempt the commit again.
+This repository comes with [pre-commit](https://pre-commit.com/) hooks for ruff and Prettier. pre-commit automatically runs checks before a commit is committed into the git history. If all checks pass, the commit is made, if files are changed by the pre-commit hooks, the user is informed and has to stage the changes and attempt the commit again.
You can use the pre-commit hooks if you like, but you don't have to. The CI on Github will run the same checks as the tools installed with pre-commit. If the pre-commit checks pass, then the same checks in the CI will pass, too.
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index f9b377c615..8d123ab17a 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -1,5 +1,17 @@
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
extends: ["github>nf-core/ops//.github/renovate/default.json5"],
+ ignorePaths: ["**/nf_core/pipeline-template/modules/nf-core/**"],
baseBranches: ["dev"],
+ packageRules: [
+ {
+ matchDatasources: ["docker"],
+ matchPackageNames: ["python"],
+ versioning: "pep440",
+ },
+ {
+ matchDatasources: ["docker"],
+ registryUrls: ["docker.io"],
+ },
+ ],
}
diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml
index dd64ffa3e5..54dee6df16 100644
--- a/.github/workflows/branch.yml
+++ b/.github/workflows/branch.yml
@@ -18,7 +18,7 @@ jobs:
# If the above check failed, post a comment on the PR explaining the failure
- name: Post PR comment
if: failure()
- uses: mshick/add-pr-comment@v1
+ uses: mshick/add-pr-comment@v2
with:
message: |
## This PR is against the `master` branch :x:
diff --git a/.github/workflows/changelog.py b/.github/workflows/changelog.py
new file mode 100644
index 0000000000..eb56499c93
--- /dev/null
+++ b/.github/workflows/changelog.py
@@ -0,0 +1,228 @@
+"""
+Taken from https://github.com/MultiQC/MultiQC/blob/main/.github/workflows/changelog.py and updated for nf-core
+
+To be called by a CI action. Assumes the following environment variables are set:
+PR_TITLE, PR_NUMBER, GITHUB_WORKSPACE.
+
+Adds a line into the CHANGELOG.md:
+* Looks for the section to add the line to, based on the PR title, e.g. `Template:`, `Modules:`.
+* All other change will go under the "### General" section.
+* If an entry for the PR is already added, it will not run.
+
+Other assumptions:
+- CHANGELOG.md has a running section for an ongoing "dev" version
+(i.e. titled "## nf-core vX.Ydev").
+"""
+
+import os
+import re
+import sys
+from pathlib import Path
+from typing import List
+
+REPO_URL = "https://github.com/nf-core/tools"
+
+# Assumes the environment is set by the GitHub action.
+pr_title = os.environ["PR_TITLE"]
+pr_number = os.environ["PR_NUMBER"]
+comment = os.environ.get("COMMENT", "")
+workspace_path = Path(os.environ.get("GITHUB_WORKSPACE", ""))
+
+assert pr_title, pr_title
+assert pr_number, pr_number
+
+# Trim the PR number added when GitHub squashes commits, e.g. "Template: Updated (#2026)"
+pr_title = pr_title.removesuffix(f" (#{pr_number})")
+
+changelog_path = workspace_path / "CHANGELOG.md"
+
+if any(
+ line in pr_title.lower()
+ for line in [
+ "skip changelog",
+ "skip change log",
+ "no changelog",
+ "no change log",
+ "bump version",
+ ]
+):
+ print("Skipping changelog update")
+ sys.exit(0)
+
+
+def _determine_change_type(pr_title) -> tuple[str, str]:
+ """
+ Determine the type of the PR: Template, Download, Linting, Modules, Subworkflows, or General
+ Returns a tuple of the section name and the module info.
+ """
+ sections = {
+ "Template": "### Template",
+ "Download": "### Download",
+ "Linting": "### Linting",
+ "Modules": "### Modules",
+ "Subworkflows": "### Subworkflows",
+ }
+ current_section_header = "### General"
+ current_section = "General"
+
+ # Check if the PR in any of the sections.
+ for section, section_header in sections.items():
+ # check if the PR title contains any of the section headers, with some loose matching, e.g. removing plural and suffixes
+ if re.sub(r"s$", "", section.lower().replace("ing", "")) in pr_title.lower():
+ current_section_header = section_header
+ current_section = section
+ print(f"Detected section: {current_section}")
+ return current_section, current_section_header
+
+
+# Determine the type of the PR
+section, section_header = _determine_change_type(pr_title)
+
+# Remove section indicator from the PR title.
+pr_title = re.sub(rf"{section}[:\s]*", "", pr_title, flags=re.IGNORECASE)
+
+# Prepare the change log entry.
+pr_link = f"([#{pr_number}]({REPO_URL}/pull/{pr_number}))"
+
+# Handle manual changelog entries through comments.
+if comment := comment.removeprefix("@nf-core-bot changelog").strip():
+ print(f"Adding manual changelog entry: {comment}")
+ pr_title = comment
+new_lines = [
+ f"- {pr_title} {pr_link}\n",
+]
+
+print(f"Adding new lines into section '{section}':\n" + "".join(new_lines))
+
+# Finally, updating the changelog.
+# Read the current changelog lines. We will print them back as is, except for one new
+# entry, corresponding to this new PR.
+with changelog_path.open("r") as f:
+ orig_lines = f.readlines()
+updated_lines: List[str] = []
+
+
+def _skip_existing_entry_for_this_pr(line: str, same_section: bool = True) -> str:
+ if line.strip().endswith(pr_link):
+ print(f"Found existing entry for this pull request #{pr_number}:")
+ existing_lines = [line]
+ if new_lines and new_lines == existing_lines and same_section:
+ print(f"Found existing identical entry for this pull request #{pr_number} in the same section:")
+ print("".join(existing_lines))
+ sys.exit(0) # Just leaving the CHANGELOG intact
+ else:
+ print(
+ f"Found existing entry for this pull request #{pr_number}. It will be replaced and/or moved to proper section"
+ )
+ print("".join(existing_lines))
+ for _ in range(len(existing_lines)):
+ try:
+ line = orig_lines.pop(0)
+ except IndexError:
+ break
+ return line
+
+
+# Find the next line in the change log that matches the pattern "# nf-core/tools v.*dev"
+# If it doesn't exist, exist with code 1 (let's assume that a new section is added
+# manually or by CI when a release is pushed).
+# Else, find the next line that matches the `section` variable, and insert a new line
+# under it (we also assume that section headers are added already).
+inside_version_dev = False
+already_added_entry = False
+while orig_lines:
+ line = orig_lines.pop(0)
+
+ # If the line already contains a link to the PR, don't add it again.
+ line = _skip_existing_entry_for_this_pr(line, same_section=False)
+
+ if line.startswith("# ") and not line.strip() == "# nf-core/tools: Changelog": # Version header, e.g. "# v2.12dev"
+ print(f"Found version header: {line.strip()}")
+ updated_lines.append(line)
+
+ # Parse version from the line `# v2.12dev` or
+ # `# [v2.11.1 - Magnesium Dragon Patch](https://github.com/nf-core/tools/releases/tag/2.11) - [2023-12-20]` ...
+ if not (m := re.match(r".*(v\d+\.\d+(dev)?).*", line)):
+ print(f"Cannot parse version from line {line.strip()}.", file=sys.stderr)
+ sys.exit(1)
+ version = m.group(1)
+
+ if not inside_version_dev:
+ if not version.endswith("dev"):
+ print(
+ "Can't find a 'dev' version section in the changelog. Make sure "
+ "it's created, and all the required sections, e.g. `### Template` are created under it .",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+ inside_version_dev = True
+ else:
+ if version.endswith("dev"):
+ print(
+ f"Found another 'dev' version section in the changelog, make"
+ f"sure to change it to a 'release' stable version tag. "
+ f"Line: {line.strip()}",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+ # We are past the dev version, so just add back the rest of the lines and break.
+ while orig_lines:
+ line = orig_lines.pop(0)
+ line = _skip_existing_entry_for_this_pr(line, same_section=False)
+ if line:
+ updated_lines.append(line)
+ break
+ continue
+ print(f"Found line: {line.strip()}")
+ print(f"inside_version_dev: {inside_version_dev}")
+ print(f"section_header: {section_header}")
+ if inside_version_dev and line.lower().startswith(section_header.lower()): # Section of interest header
+ print(f"Found section header: {line.strip()}")
+ if already_added_entry:
+ print(
+ f"Already added new lines into section {section}, is the section duplicated?",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+ updated_lines.append(line)
+ # Collecting lines until the next section.
+ section_lines: List[str] = []
+ while True:
+ line = orig_lines.pop(0)
+ if line.startswith("#"):
+ print(f"Found the next section header: {line.strip()}")
+ # Found the next section header, so need to put all the lines we collected.
+ updated_lines.append("\n")
+ _updated_lines = [_l for _l in section_lines + new_lines if _l.strip()]
+ updated_lines.extend(_updated_lines)
+ updated_lines.append("\n")
+ if new_lines:
+ print(f"Updated {changelog_path} section '{section}' with lines:\n" + "".join(new_lines))
+ else:
+ print(f"Removed existing entry from {changelog_path} section '{section}'")
+ already_added_entry = True
+ # Pushing back the next section header line
+ orig_lines.insert(0, line)
+ break
+ # If the line already contains a link to the PR, don't add it again.
+ line = _skip_existing_entry_for_this_pr(line, same_section=True)
+ section_lines.append(line)
+ else:
+ updated_lines.append(line)
+
+
+def collapse_newlines(lines: List[str]) -> List[str]:
+ updated = []
+ for idx in range(len(lines)):
+ if idx != 0 and not lines[idx].strip() and not lines[idx - 1].strip():
+ continue
+ updated.append(lines[idx])
+ return updated
+
+
+updated_lines = collapse_newlines(updated_lines)
+
+
+# Finally, writing the updated lines back.
+with changelog_path.open("w") as f:
+ f.writelines(updated_lines)
diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml
new file mode 100644
index 0000000000..63dcf2e428
--- /dev/null
+++ b/.github/workflows/changelog.yml
@@ -0,0 +1,88 @@
+name: Update CHANGELOG.md
+on:
+ issue_comment:
+ types: [created]
+ pull_request_target:
+ types: [opened]
+
+jobs:
+ update_changelog:
+ runs-on: ubuntu-latest
+ # Run if comment is on a PR with the main repo, and if it contains the magic keywords.
+ # Or run on PR creation, unless asked otherwise in the title.
+ if: |
+ github.repository_owner == 'nf-core' && (
+ github.event_name == 'pull_request_target' ||
+ github.event.issue.pull_request && startsWith(github.event.comment.body, '@nf-core-bot changelog')
+ )
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }}
+
+ # Action runs on the issue comment, so we don't get the PR by default.
+ # Use the GitHub CLI to check out the PR:
+ - name: Checkout Pull Request
+ env:
+ GH_TOKEN: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }}
+ run: |
+ if [[ "${{ github.event_name }}" == "issue_comment" ]]; then
+ PR_NUMBER="${{ github.event.issue.number }}"
+ elif [[ "${{ github.event_name }}" == "pull_request_target" ]]; then
+ PR_NUMBER="${{ github.event.pull_request.number }}"
+ fi
+ gh pr checkout $PR_NUMBER
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
+
+ - name: Install packages
+ run: |
+ python -m pip install --upgrade pip
+ pip install pyyaml
+
+ - name: Update CHANGELOG.md from the PR title
+ env:
+ COMMENT: ${{ github.event.comment.body }}
+ GH_TOKEN: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }}
+ run: |
+ if [[ "${{ github.event_name }}" == "issue_comment" ]]; then
+ export PR_NUMBER='${{ github.event.issue.number }}'
+ export PR_TITLE='${{ github.event.issue.title }}'
+ elif [[ "${{ github.event_name }}" == "pull_request_target" ]]; then
+ export PR_NUMBER='${{ github.event.pull_request.number }}'
+ export PR_TITLE='${{ github.event.pull_request.title }}'
+ fi
+ python ${GITHUB_WORKSPACE}/.github/workflows/changelog.py
+
+ - name: Check if CHANGELOG.md actually changed
+ run: |
+ git diff --exit-code ${GITHUB_WORKSPACE}/CHANGELOG.md || echo "changed=YES" >> $GITHUB_ENV
+ echo "File changed: ${{ env.changed }}"
+
+ - name: Set up Python 3.11
+ uses: actions/setup-python@v5
+ with:
+ python-version: 3.11
+ cache: "pip"
+
+ - name: Install pre-commit
+ run: pip install pre-commit
+
+ - name: Run pre-commit checks
+ if: env.changed == 'YES'
+ run: |
+ pre-commit run --all-files
+
+ - name: Commit and push changes
+ if: env.changed == 'YES'
+ run: |
+ git config user.email "core@nf-co.re"
+ git config user.name "nf-core-bot"
+ git config push.default upstream
+ git add ${GITHUB_WORKSPACE}/CHANGELOG.md
+ git status
+ git commit -m "[automated] Update CHANGELOG.md"
+ git push
diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml
index 4b55c5e4aa..ff311f9df8 100644
--- a/.github/workflows/clean-up.yml
+++ b/.github/workflows/clean-up.yml
@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v7
+ - uses: actions/stale@v9
with:
stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days."
stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful."
diff --git a/.github/workflows/create-lint-wf.yml b/.github/workflows/create-lint-wf.yml
index 57dbe86d65..c4d0358982 100644
--- a/.github/workflows/create-lint-wf.yml
+++ b/.github/workflows/create-lint-wf.yml
@@ -6,6 +6,15 @@ on:
pull_request:
release:
types: [published]
+ workflow_dispatch:
+ inputs:
+ runners:
+ description: "Runners to test on"
+ type: choice
+ options:
+ - "ubuntu-latest"
+ - "self-hosted"
+ default: "self-hosted"
# Cancel if a newer run is started
concurrency:
@@ -17,7 +26,7 @@ env:
jobs:
MakeTestWorkflow:
- runs-on: self-hosted
+ runs-on: ${{ github.event.inputs.runners || 'self-hosted' }}
env:
NXF_ANSI_LOG: false
strategy:
@@ -26,15 +35,22 @@ jobs:
- "23.04.0"
- "latest-everything"
steps:
+ - name: go to subdirectory and change nextflow workdir
+ run: |
+ mkdir -p create-lint-wf
+ cd create-lint-wf
+ export NXF_WORK=$(pwd)
+
# Get the repo code
- uses: actions/checkout@v4
name: Check out source-code repository
# Set up nf-core/tools
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
+ cache: pip
- name: Install python dependencies
run: |
@@ -47,14 +63,6 @@ jobs:
with:
version: ${{ matrix.NXF_VER }}
- # Install the Prettier linting tools
- - uses: actions/setup-node@v4
- with:
- node-version: "20"
-
- - name: Install Prettier and editorconfig-checker
- run: npm install -g prettier editorconfig-checker
-
# Build a pipeline from the template
- name: nf-core create
run: |
@@ -73,11 +81,8 @@ jobs:
working-directory: create-lint-wf
# Run code style linting
- - name: Run Prettier --check
- run: prettier --check create-lint-wf/nf-core-testpipeline
-
- - name: Run ECLint check
- run: editorconfig-checker -exclude README.md $(find nf-core-testpipeline/.* -type f | grep -v '.git\|.py\|md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile')
+ - name: run pre-commit
+ run: pre-commit run --all-files
working-directory: create-lint-wf
# Update modules to the latest version
@@ -97,7 +102,7 @@ jobs:
# Run nf-core linting
- name: nf-core lint
- run: nf-core --log-file log.txt --hide-progress lint --dir nf-core-testpipeline --fail-ignored --fail-warned
+ run: nf-core --verbose --log-file log.txt --hide-progress lint --dir nf-core-testpipeline --fail-ignored --fail-warned
working-directory: create-lint-wf
# Run the other nf-core commands
@@ -142,7 +147,11 @@ jobs:
- name: Upload log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: nf-core-log-file
+ name: nf-core-log-file-${{ matrix.NXF_VER }}
path: create-lint-wf/log.txt
+
+ - name: Cleanup work directory
+ run: sudo rm -rf create-lint-wf
+ if: always()
diff --git a/.github/workflows/create-test-lint-wf-template.yml b/.github/workflows/create-test-lint-wf-template.yml
index 37cbf65c7d..7d586fc3d2 100644
--- a/.github/workflows/create-test-lint-wf-template.yml
+++ b/.github/workflows/create-test-lint-wf-template.yml
@@ -8,6 +8,15 @@ on:
pull_request:
release:
types: [published]
+ workflow_dispatch:
+ inputs:
+ runners:
+ description: "Runners to test on"
+ type: choice
+ options:
+ - "ubuntu-latest"
+ - "self-hosted"
+ default: "self-hosted"
# Cancel if a newer run is started
concurrency:
@@ -20,24 +29,39 @@ env:
jobs:
RunTestWorkflow:
- runs-on: ubuntu-latest
+ runs-on: ${{ matrix.runner }}
env:
NXF_ANSI_LOG: false
strategy:
matrix:
TEMPLATE:
- - "template_skip_all.yml"
- "template_skip_github_badges.yml"
- "template_skip_igenomes.yml"
- "template_skip_ci.yml"
- - "template_skip_nf_core_configs.yml"
+ runner:
+ - ${{ github.event.inputs.runners || 'self-hosted' }}
+ profile: ["self_hosted_runner"]
+ include:
+ - TEMPLATE: "template_skip_all.yml"
+ runner: ubuntu-latest
+ profile: "docker"
+ - TEMPLATE: "template_skip_nf_core_configs.yml"
+ runner: ubuntu-latest
+ profile: "docker"
+ fail-fast: false
steps:
+ - name: go to working directory
+ run: |
+ mkdir -p create-lint-wf-template
+ cd create-lint-wf-template
+ export NXF_WORK=$(pwd)
+
- uses: actions/checkout@v4
name: Check out source-code repository
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
@@ -51,18 +75,6 @@ jobs:
with:
version: latest-everything
- # Install the Prettier linting tools
- - uses: actions/setup-node@v4
- with:
- node-version: "20"
-
- - name: Install Prettier
- run: npm install -g prettier
-
- # Install the editorconfig linting tools
- - name: Install editorconfig-checker
- run: npm install -g editorconfig-checker
-
# Create template files
- name: Create template skip all (except github)
run: |
@@ -95,7 +107,7 @@ jobs:
- name: run the pipeline
run: |
cd create-test-lint-wf
- nextflow run my-prefix-testpipeline -profile test,docker --outdir ./results
+ nextflow run my-prefix-testpipeline -profile test,${{matrix.profile}} --outdir ./results
# Remove results folder before linting
- name: remove results folder
@@ -107,11 +119,8 @@ jobs:
run: nf-core --log-file log.txt sync --dir create-test-lint-wf/my-prefix-testpipeline/
# Run code style linting
- - name: Run Prettier --check
- run: prettier --check create-test-lint-wf/my-prefix-testpipeline
-
- - name: Run ECLint check
- run: editorconfig-checker -exclude README.md $(find my-prefix-testpipeline/.* -type f | grep -v '.git\|.py\|md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile')
+ - name: Run pre-commit
+ run: pre-commit run --all-files
working-directory: create-test-lint-wf
# Remove TODO statements
@@ -145,7 +154,11 @@ jobs:
- name: Upload log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: nf-core-log-file
+ name: nf-core-log-file-${{ matrix.TEMPLATE }}
path: create-test-lint-wf/artifact_files.tar
+
+ - name: Cleanup work directory
+ run: sudo rm -rf create-test-lint-wf
+ if: always()
diff --git a/.github/workflows/create-test-wf.yml b/.github/workflows/create-test-wf.yml
index 026b0a889b..9301d1224e 100644
--- a/.github/workflows/create-test-wf.yml
+++ b/.github/workflows/create-test-wf.yml
@@ -6,6 +6,15 @@ on:
pull_request:
release:
types: [published]
+ workflow_dispatch:
+ inputs:
+ runners:
+ description: "Runners to test on"
+ type: choice
+ options:
+ - "ubuntu-latest"
+ - "self-hosted"
+ default: "self-hosted"
# Cancel if a newer run is started
concurrency:
@@ -17,7 +26,7 @@ env:
jobs:
RunTestWorkflow:
- runs-on: ubuntu-latest
+ runs-on: ${{ github.event.inputs.runners || 'self-hosted' }}
env:
NXF_ANSI_LOG: false
strategy:
@@ -26,11 +35,17 @@ jobs:
- "23.04.0"
- "latest-everything"
steps:
+ - name: go to working directory
+ run: |
+ mkdir -p create-test-wf
+ cd create-test-wf
+ export NXF_WORK=$(pwd)
+
- uses: actions/checkout@v4
name: Check out source-code repository
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
@@ -49,11 +64,16 @@ jobs:
mkdir create-test-wf && cd create-test-wf
export NXF_WORK=$(pwd)
nf-core --log-file log.txt create -n testpipeline -d "This pipeline is for testing" -a "Testing McTestface" --plain
- nextflow run nf-core-testpipeline -profile test,docker --outdir ./results
+ nextflow run nf-core-testpipeline -profile test,self_hosted_runner --outdir ./results
- name: Upload log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: nf-core-log-file
+ name: nf-core-log-file-${{ matrix.NXF_VER }}
path: create-test-wf/log.txt
+
+ - name: Cleanup work directory
+ # cleanup work directory
+ run: sudo rm -rf create-test-wf
+ if: always()
diff --git a/.github/workflows/deploy-pypi.yml b/.github/workflows/deploy-pypi.yml
index 62c53508d8..8d3a154d80 100644
--- a/.github/workflows/deploy-pypi.yml
+++ b/.github/workflows/deploy-pypi.yml
@@ -17,7 +17,7 @@ jobs:
name: Check out source-code repository
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml
index 4184bc5e59..595fff66ae 100644
--- a/.github/workflows/fix-linting.yml
+++ b/.github/workflows/fix-linting.yml
@@ -4,19 +4,26 @@ on:
types: [created]
jobs:
- deploy:
+ fix-linting:
# Only run if comment is on a PR with the main repo, and if it contains the magic keywords
if: >
contains(github.event.comment.html_url, '/pull/') &&
contains(github.event.comment.body, '@nf-core-bot fix linting') &&
github.repository == 'nf-core/tools'
- runs-on: ubuntu-latest
+ runs-on: self-hosted
steps:
# Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@v4
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
token: ${{ secrets.nf_core_bot_auth_token }}
+ # indication that the linting is being fixed
+ - name: React on comment
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
+ with:
+ comment-id: ${{ github.event.comment.id }}
+ reactions: eyes
+
# Action runs on the issue comment, so we don't get the PR by default
# Use the gh cli to check out the PR
- name: Checkout Pull Request
@@ -24,33 +31,30 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
- - uses: actions/setup-node@v4
+ # Install and run pre-commit
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
with:
- node-version: "20"
+ python-version: 3.11
- - name: Install Prettier
- run: npm install -g prettier @prettier/plugin-php
+ - name: Install pre-commit
+ run: pip install pre-commit
- - name: Run 'prettier --write'
- run: prettier --write ${GITHUB_WORKSPACE}
+ - name: Run pre-commit
+ id: pre-commit
+ run: pre-commit run --all-files
+ continue-on-error: true
- - name: Run Black
- uses: psf/black@stable
- with:
- # Override to remove the default --check flag so that we make changes
- options: "--color"
-
- - name: Set up Python 3.11
- uses: actions/setup-python@v4
- with:
- python-version: 3.11
- - name: python-isort
- uses: isort/isort-action@v1.0.0
+ # indication that the linting has finished
+ - name: react if linting finished succesfully
+ if: steps.pre-commit.outcome == 'success'
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
- isortVersion: "latest"
- requirementsFiles: "requirements.txt requirements-dev.txt"
+ comment-id: ${{ github.event.comment.id }}
+ reactions: "+1"
- name: Commit & push changes
+ id: commit-and-push
+ if: steps.pre-commit.outcome == 'failure'
run: |
git config user.email "core@nf-co.re"
git config user.name "nf-core-bot"
@@ -59,3 +63,27 @@ jobs:
git status
git commit -m "[automated] Fix code linting"
git push
+
+ - name: react if linting errors were fixed
+ id: react-if-fixed
+ if: steps.commit-and-push.outcome == 'success'
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
+ with:
+ comment-id: ${{ github.event.comment.id }}
+ reactions: hooray
+
+ - name: react if linting errors were not fixed
+ if: steps.commit-and-push.outcome == 'failure'
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
+ with:
+ comment-id: ${{ github.event.comment.id }}
+ reactions: confused
+
+ - name: react if linting errors were not fixed
+ if: steps.commit-and-push.outcome == 'failure'
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
+ with:
+ issue-number: ${{ github.event.issue.number }}
+ body: |
+ @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually.
+ See [CI log](https://github.com/nf-core/tools/actions/runs/${{ github.run_id }}) for more details.
diff --git a/.github/workflows/lint-code.yml b/.github/workflows/lint-code.yml
index 23972c56f6..d9847dd365 100644
--- a/.github/workflows/lint-code.yml
+++ b/.github/workflows/lint-code.yml
@@ -13,119 +13,21 @@ concurrency:
cancel-in-progress: true
jobs:
- EditorConfig:
- runs-on: ["self-hosted"]
+ Pre-commit:
+ runs-on: ubuntu-latest
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: "20"
-
- - name: Install editorconfig-checker
- run: npm install -g editorconfig-checker
-
- # Run editor config check only on files not covered by a linter
- - name: Run ECLint check
- run: editorconfig-checker -exclude README.md $(git ls-files | grep -v 'test\|.py\|md\|json\|yml\|yaml\|html\|css\|Makefile')
-
- Prettier:
- runs-on: ["self-hosted"]
- steps:
- - uses: actions/checkout@v4
-
- - uses: actions/setup-node@v4
- with:
- node-version: "20"
-
- - name: Install Prettier
- run: npm install -g prettier
-
- - name: Run Prettier --check
- run: prettier --check ${GITHUB_WORKSPACE}
-
- PythonBlack:
- runs-on: ["self-hosted"]
- steps:
- - uses: actions/checkout@v4
-
- - name: Check code lints with Black
- uses: psf/black@stable
-
- # If the above check failed, post a comment on the PR explaining the failure
- - name: Post PR comment
- if: failure()
- uses: mshick/add-pr-comment@v1
- with:
- message: |
- ## Python linting (`black`) is failing
-
- To keep the code consistent with lots of contributors, we run automated code consistency checks.
- To fix this CI test, please run:
-
- * Install [`black`](https://black.readthedocs.io/en/stable/): `pip install black`
- * Fix formatting errors in your pipeline: `black .`
-
- Once you push these changes the test should pass, and you can hide this comment :+1:
-
- We highly recommend setting up Black in your code editor so that this formatting is done automatically on save. Ask about it on Slack for help!
-
- Thanks again for your contribution!
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- allow-repeats: false
-
- isort:
- runs-on: ["self-hosted"]
- steps:
- - name: Check out source-code repository
- uses: actions/checkout@v4
-
- name: Set up Python 3.11
- uses: actions/setup-python@v4
- with:
- python-version: 3.11
- - name: python-isort
- uses: isort/isort-action@v1.1.0
- with:
- isortVersion: "latest"
- requirementsFiles: "requirements.txt requirements-dev.txt"
-
- static-type-check:
- runs-on: ["self-hosted"]
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
cache: "pip"
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip -r requirements-dev.txt
- pip install -e .
+ - name: Install pre-commit
+ run: pip install pre-commit
- - name: Cache nf-test installation
- id: cache-software
- uses: actions/cache@v3
- with:
- path: |
- /usr/local/bin/nf-test
- /home/runner/.nf-test/nf-test.jar
- key: ${{ runner.os }}-${{ env.NFTEST_VER }}-nftest
-
- - name: Install nf-test
- if: steps.cache-software.outputs.cache-hit != 'true'
- run: |
- wget -qO- https://code.askimed.com/install/nf-test | bash
- sudo mv nf-test /usr/local/bin/
-
- - name: Get Python changed files
- id: changed-py-files
- uses: tj-actions/changed-files@v23
- with:
- files: |
- *.py
- **/*.py
- - name: Run if any of the listed files above is changed
- if: steps.changed-py-files.outputs.any_changed == 'true'
- run: mypy ${{ steps.changed-py-files.outputs.all_changed_files }}
+ - name: Run pre-commit
+ run: pre-commit run --all-files
diff --git a/.github/workflows/push_dockerhub_dev.yml b/.github/workflows/push_dockerhub_dev.yml
index 1230bfc9d3..169a917d83 100644
--- a/.github/workflows/push_dockerhub_dev.yml
+++ b/.github/workflows/push_dockerhub_dev.yml
@@ -13,7 +13,7 @@ concurrency:
jobs:
push_dockerhub:
name: Push new Docker image to Docker Hub (dev)
- runs-on: self-hosted
+ runs-on: ubuntu-latest
# Only run for the nf-core repo, for releases and merged PRs
if: ${{ github.repository == 'nf-core/tools' }}
env:
diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml
index b6f3592165..8a4afe9161 100644
--- a/.github/workflows/pytest.yml
+++ b/.github/workflows/pytest.yml
@@ -14,8 +14,17 @@ on:
- "CHANGELOG.md"
release:
types: [published]
+ workflow_dispatch:
+ inputs:
+ runners:
+ description: "Runners to test on"
+ type: choice
+ options:
+ - "ubuntu-latest"
+ - "self-hosted"
+ default: "self-hosted"
-# Cancel if a newer run is started
+# Cancel if a newer run with the same workflow name is queued
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
@@ -25,7 +34,7 @@ env:
jobs:
setup:
- runs-on: ["ubuntu-latest"]
+ runs-on: "ubuntu-latest"
strategy:
matrix:
python-version: ["3.8", "3.11"]
@@ -44,20 +53,45 @@ jobs:
runner: ${{ matrix.runner }}
run-tests: ${{ steps.conditions.outputs.run-tests }}
+ # create a test matrix based on all python files in /tests
+ list_tests:
+ name: Get test file matrix
+ runs-on: "ubuntu-latest"
+ steps:
+ - uses: actions/checkout@v4
+ name: Check out source-code repository
+
+ - name: List tests
+ id: list_tests
+ run: |
+ echo "tests=$(find tests/test_* | tac | sed 's/tests\///g' | jq -R -s -c '{test: (split("\n")[:-1])}')" >> $GITHUB_OUTPUT
+ outputs:
+ tests: ${{ steps.list_tests.outputs.tests }}
+
test:
- name: Test with Python ${{ needs.setup.outputs.python-version }} on ${{ needs.setup.outputs.runner }}
- needs: setup
- if: ${{ needs.setup.outputs.run-tests}}
- runs-on: ${{ needs.setup.outputs.runner }}
+ name: Run ${{matrix.test}} with Python ${{ needs.setup.outputs.python-version }} on ${{ needs.setup.outputs.runner }}
+ needs: [setup, list_tests]
+ if: ${{ needs.setup.outputs.run-tests }}
+ runs-on: ${{ github.event.inputs.runners || 'self-hosted' }}
+ strategy:
+ matrix: ${{ fromJson(needs.list_tests.outputs.tests) }}
+ fail-fast: false # run all tests even if one fails
steps:
- - uses: actions/checkout@v2
+ - name: go to subdirectory and change nextflow workdir
+ run: |
+ mkdir -p pytest
+ cd pytest
+ export NXF_WORK=$(pwd)
+
+ - uses: actions/checkout@v4
name: Check out source-code repository
- name: Set up Python ${{ needs.setup.outputs.python-version }}
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v5
with:
python-version: ${{ needs.setup.outputs.python-version }}
cache: "pip"
+ token: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: |
@@ -71,18 +105,27 @@ jobs:
sudo apt remove -y git git-man
sudo add-apt-repository --remove ppa:git-core/ppa
sudo apt install -y git
+
- name: Get current date
id: date
run: echo "date=$(date +'%Y-%m')" >> $GITHUB_ENV
- name: Install Nextflow
uses: nf-core/setup-nextflow@v1
- with:
- version: "latest-everything"
+
+ - name: Look if nf-test is already installed and write to env variable
+ id: check-nftest
+ run: |
+ if [ -f /usr/local/bin/nf-test ]; then
+ echo "nftest_installed=true" >> $GITHUB_ENV
+ else
+ echo "nftest_installed=false" >> $GITHUB_ENV
+ fi
- name: Cache nf-test installation
+ if: env.nftest_installed != 'true'
id: cache-software
- uses: actions/cache@v3
+ uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4
with:
path: |
/usr/local/bin/nf-test
@@ -90,16 +133,70 @@ jobs:
key: ${{ runner.os }}-nftest-${{ env.date }}
- name: Install nf-test
- if: steps.cache-software.outputs.cache-hit != 'true'
+ if: steps.cache-software.outputs.cache-hit != 'true' && env.nftest_installed != 'true'
run: |
wget -qO- https://code.askimed.com/install/nf-test | bash
sudo mv nf-test /usr/local/bin/
+ - name: move coveragerc file up
+ run: |
+ mv .github/.coveragerc .
+
- name: Test with pytest
- run: python3 -m pytest tests/ --color=yes --cov-report=xml --cov-config=.github/.coveragerc --cov=nf_core
+ run: |
+ python3 -m pytest tests/${{matrix.test}} --color=yes --cov --durations=0 && exit_code=0|| exit_code=$?
+ # don't fail if no tests were collected, e.g. for test_licence.py
+ if [ "${exit_code}" -eq 5 ]; then
+ echo "No tests were collected"
+ exit 0
+ elif [ "${exit_code}" -ne 0 ]; then
+ echo "Tests failed with exit code ${exit_code}"
+ exit 1
+ fi
+
+ - name: Upload coverage
+ uses: actions/upload-artifact@v4
+ with:
+ name: coverage_${{ matrix.test }}
+ path: .coverage
+
+ coverage:
+ needs: test
+ runs-on: ${{ github.event.inputs.runners || 'self-hosted' }}
+ steps:
+ - name: go to subdirectory
+ run: |
+ mkdir -p pytest
+ cd pytest
+
+ - uses: actions/checkout@v4
+ - name: Set up Python 3.11
+ uses: actions/setup-python@v5
+ env:
+ AGENT_TOOLSDIRECTORY: /opt/actions-runner/_work/tools/tools/
+ with:
+ python-version: 3.11
+ cache: "pip"
+
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip -r requirements-dev.txt
+ pip install -e .
+
+ - name: move coveragerc file up
+ run: |
+ mv .github/.coveragerc .
+
+ - name: Download all artifacts
+ uses: actions/download-artifact@v4
+ - name: Run coverage
+ run: |
+ coverage combine --keep coverage*/.coverage*
+ coverage report
+ coverage xml
- - uses: codecov/codecov-action@v1
- name: Upload code coverage report
+ - uses: codecov/codecov-action@v3
with:
- if: success()
- token: ${{ secrets.CODECOV_TOKEN }}
+ files: coverage.xml
+ env:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/rich-codex.yml b/.github/workflows/rich-codex.yml
index f5f289b73e..ecbae8ffec 100644
--- a/.github/workflows/rich-codex.yml
+++ b/.github/workflows/rich-codex.yml
@@ -8,7 +8,7 @@ jobs:
- name: Check out the repo
uses: actions/checkout@v4
- name: Set up Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.x
cache: pip
@@ -19,7 +19,7 @@ jobs:
- name: Cache nf-test installation
id: cache-software
- uses: actions/cache@v3
+ uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4
with:
path: |
/usr/local/bin/nf-test
diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml
index 94f8ee54e2..aeb24839f1 100644
--- a/.github/workflows/sync.yml
+++ b/.github/workflows/sync.yml
@@ -8,6 +8,13 @@ on:
type: boolean
description: Only run on nf-core/testpipeline?
required: true
+ runners:
+ description: "Runners to test on"
+ type: choice
+ options:
+ - "ubuntu-latest"
+ - "self-hosted"
+ default: "self-hosted"
# Cancel if a newer run is started
concurrency:
@@ -16,7 +23,7 @@ concurrency:
jobs:
get-pipelines:
- runs-on: ubuntu-latest
+ runs-on: ${{ github.event.inputs.runners || 'self-hosted' }}
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
@@ -31,7 +38,7 @@ jobs:
sync:
needs: get-pipelines
- runs-on: self-hosted
+ runs-on: ${{ github.event.inputs.runners || 'self-hosted' }}
strategy:
matrix: ${{fromJson(needs.get-pipelines.outputs.matrix)}}
fail-fast: false
@@ -49,7 +56,7 @@ jobs:
fetch-depth: "0"
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
@@ -78,7 +85,7 @@ jobs:
- name: Upload sync log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: sync_log_${{ matrix.pipeline }}
path: sync_log_${{ matrix.pipeline }}.txt
diff --git a/.github/workflows/tools-api-docs-dev.yml b/.github/workflows/tools-api-docs-dev.yml
index 51c25fa250..91396b2a25 100644
--- a/.github/workflows/tools-api-docs-dev.yml
+++ b/.github/workflows/tools-api-docs-dev.yml
@@ -20,14 +20,14 @@ concurrency:
jobs:
api-docs:
name: Build & push Sphinx API docs
- runs-on: self-hosted
+ runs-on: ubuntu-latest
steps:
- name: Check out source-code repository
uses: actions/checkout@v4
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
@@ -43,7 +43,7 @@ jobs:
- name: Sync dev docs
# Only sync with the website if it was a push from nf-core/tools dev branch
if: github.repository == 'nf-core/tools' && github.event_name == 'push' && github.event.ref == 'refs/heads/dev'
- uses: SamKirkland/FTP-Deploy-Action@4.0.0
+ uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.ftp_server }}
username: ${{ secrets.ftp_username}}
diff --git a/.github/workflows/tools-api-docs-release.yml b/.github/workflows/tools-api-docs-release.yml
index b0869190d9..2183db3fcf 100644
--- a/.github/workflows/tools-api-docs-release.yml
+++ b/.github/workflows/tools-api-docs-release.yml
@@ -22,7 +22,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python 3.11
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.11
@@ -37,7 +37,7 @@ jobs:
- name: Sync release docs
if: github.repository == 'nf-core/tools'
- uses: SamKirkland/FTP-Deploy-Action@4.0.0
+ uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.ftp_server }}
username: ${{ secrets.ftp_username}}
diff --git a/.gitpod.yml b/.gitpod.yml
index 899f58e556..a4f1c17169 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -9,6 +9,7 @@ tasks:
- name: unset JAVA_TOOL_OPTIONS
command: |
unset JAVA_TOOL_OPTIONS
+
vscode:
extensions: # based on nf-core.nf-core-extensionpack
- codezombiech.gitignore # Language support for .gitignore files
@@ -21,3 +22,4 @@ vscode:
# - nextflow.nextflow # Nextflow syntax highlighting
- oderwat.indent-rainbow # Highlight indentation level
- streetsidesoftware.code-spell-checker # Spelling checker for source code
+ - charliermarsh.ruff # Code linter Ruff
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ad23a3c895..d4eb6a721d 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,23 +1,23 @@
repos:
- - repo: https://github.com/psf/black
- rev: 23.1.0
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.1.14
hooks:
- - id: black
- - repo: https://github.com/pycqa/isort
- rev: 5.12.0
- hooks:
- - id: isort
+ - id: ruff # linter
+ args: [--fix, --exit-non-zero-on-fix] # sort imports and fix
+ - id: ruff-format # formatter
- repo: https://github.com/pre-commit/mirrors-prettier
- rev: "v2.7.1"
+ rev: "v3.1.0"
hooks:
- id: prettier
- - repo: https://github.com/asottile/pyupgrade
- rev: v3.15.0
+
+ - repo: https://github.com/editorconfig-checker/editorconfig-checker.python
+ rev: "2.7.3"
hooks:
- - id: pyupgrade
- args: [--py38-plus]
+ - id: editorconfig-checker
+ alias: ec
+
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: "v1.7.1" # Use the sha / tag you want to point at
+ rev: "v1.8.0"
hooks:
- id: mypy
additional_dependencies:
diff --git a/.prettierignore b/.prettierignore
index 344cafca6e..a55074abfb 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -6,3 +6,7 @@ testing
nf_core/module-template/meta.yml
nf_core/module-template/tests/tags.yml
nf_core/subworkflow-template/tests/tags.yml
+# don't run on things handled by ruff
+*.py
+*.pyc
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 28c02ea066..4ec71a8282 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,51 @@
# nf-core/tools: Changelog
+# [v2.12 - Aluminium Wolf](https://github.com/nf-core/tools/releases/tag/2.11) - [2024-01-29]
+
+### Template
+
+- Add a Github Action Workflow to the pipeline template that tests a successful download with 'nf-core download' ([#2618](https://github.com/nf-core/tools/pull/2618))
+- Use `pre-commit` to lint files in GitHub CI ([#2635](https://github.com/nf-core/tools/pull/2635))
+- Use pdiff also on gitpod for nf-test ([#2640](https://github.com/nf-core/tools/pull/2640))
+- switch to new image syntax in readme ([#2645](https://github.com/nf-core/tools/pull/2645))
+- Add conda channel order to nextflow.config ([#2094](https://github.com/nf-core/tools/pull/2094))
+- Fix tyop in pipeline nextflow.config ([#2664](https://github.com/nf-core/tools/pull/2664))
+- Remove `nfcore_external_java_deps.jar` from lib directory in pipeline template ([#2675](https://github.com/nf-core/tools/pull/2675))
+- Add function to check `-profile` is well formatted ([#2678](https://github.com/nf-core/tools/pull/2678))
+- Add new pipeline error message pointing to docs when 'requirement exceeds available memory' error message ([#2680](https://github.com/nf-core/tools/pull/2680))
+- add 👀👍🏻🎉😕 reactions to fix-linting-bot action ([#2692](https://github.com/nf-core/tools/pull/2692))
+
+### Linting
+
+- Fix linting of a pipeline with patched custom module ([#2669](https://github.com/nf-core/tools/pull/2669))
+- linting a pipeline also lints the installed subworkflows ([#2677](https://github.com/nf-core/tools/pull/2677))
+- environment.yml name must be lowercase ([#2676](https://github.com/nf-core/tools/pull/2676))
+- allow ignoring specific files when template_strings ([#2686](https://github.com/nf-core/tools/pull/2686))
+- lint `nextflow.config` default values match the ones specified in `nextflow_schema.json` ([#2684](https://github.com/nf-core/tools/pull/2684))
+
+### Modules
+
+- Fix empty json output for `nf-core list local` ([#2668](https://github.com/nf-core/tools/pull/2668))
+
+### General
+
+- Run CI-pytests for nf-core tools on self-hosted runners ([#2550](https://github.com/nf-core/tools/pull/2550))
+- Add Ruff linter and formatter replacing Black, isort and pyupgrade ([#2620](https://github.com/nf-core/tools/pull/2620))
+- Set pdiff as nf-test differ in Docker image for Gitpod ([#2642](https://github.com/nf-core/tools/pull/2642))
+- Fix Renovate Dockerfile updating issues ([#2648](https://github.com/nf-core/tools/pull/2648) and [#2651](https://github.com/nf-core/tools/pull/2651))
+- Add new subcommand `nf-core tui`, which launches a TUI (terminal user interface) to intuitively explore the command line flags, built using [Trogon](https://github.com/Textualize/trogon) ([#2655](https://github.com/nf-core/tools/pull/2655))
+- Add new subcommand: `nf-core logo-create` to output an nf-core logo for a pipeline (instead of going through the website) ([#2662](https://github.com/nf-core/tools/pull/2662))
+- Handle api redirects from the old site ([#2672](https://github.com/nf-core/tools/pull/2672))
+- Remove redundanct v in pipeline version for emails ([#2667](https://github.com/nf-core/tools/pull/2667))
+- add function to check `-profile` is well formatted ([#2678](https://github.com/nf-core/tools/pull/2678))
+- Update pre-commit hook astral-sh/ruff-pre-commit to v0.1.14 ([#2674](https://github.com/nf-core/tools/pull/2674))
+- Update pre-commit hook pre-commit/mirrors-mypy to v1.8.0 ([#2630](https://github.com/nf-core/tools/pull/2630))
+- Update mshick/add-pr-comment action to v2 ([#2632](https://github.com/nf-core/tools/pull/2632))
+- update python image version in docker file ([#2636](https://github.com/nf-core/tools/pull/2636))
+- Update actions/cache action to v4 ([#2666](https://github.com/nf-core/tools/pull/2666))
+- Update peter-evans/create-or-update-comment action to v4 ([#2683](https://github.com/nf-core/tools/pull/2683))
+- Update peter-evans/create-or-update-comment action to v4 ([#2695](https://github.com/nf-core/tools/pull/2695))
+
# [v2.11.1 - Magnesium Dragon Patch](https://github.com/nf-core/tools/releases/tag/2.11) - [2023-12-20]
### Template
diff --git a/Dockerfile b/Dockerfile
index 95d544b26f..9c9770c25f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11.5-slim
+FROM python:3.11-slim
LABEL authors="phil.ewels@scilifelab.se,erik.danielsson@scilifelab.se" \
description="Docker image containing requirements for the nfcore tools"
diff --git a/MANIFEST.in b/MANIFEST.in
index 7db3ca4353..5ec177b783 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -5,3 +5,7 @@ graft nf_core/pipeline-template
graft nf_core/subworkflow-template
include requirements.txt
include nf_core/.pre-commit-prettier-config.yaml
+include nf_core/assets/logo/nf-core-repo-logo-base-lightbg.png
+include nf_core/assets/logo/nf-core-repo-logo-base-darkbg.png
+include nf_core/assets/logo/placeholder_logo.svg
+include nf_core/assets/logo/MavenPro-Bold.ttf
diff --git a/README.md b/README.md
index 653f5295ea..0adf04d4c6 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,14 @@
-# ![nf-core/tools](docs/images/nfcore-tools_logo_light.png#gh-light-mode-only) ![nf-core/tools](docs/images/nfcore-tools_logo_dark.png#gh-dark-mode-only)
+
+
+
[![Python tests](https://github.com/nf-core/tools/workflows/Python%20tests/badge.svg?branch=master&event=push)](https://github.com/nf-core/tools/actions?query=workflow%3A%22Python+tests%22+branch%3Amaster)
[![codecov](https://codecov.io/gh/nf-core/tools/branch/master/graph/badge.svg)](https://codecov.io/gh/nf-core/tools)
-[![code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![code style: prettier](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
-[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
+[![code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)](https://github.com/charliermarsh/ruff)
[![install with Bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](https://bioconda.github.io/recipes/nf-core/README.html)
[![install with PyPI](https://img.shields.io/badge/install%20with-PyPI-blue.svg)](https://pypi.org/project/nf-core/)
@@ -28,6 +32,8 @@ A python package with helper tools for the nf-core community.
- [`nf-core schema` - Work with pipeline schema files](#pipeline-schema)
- [`nf-core bump-version` - Update nf-core pipeline version number](#bumping-a-pipeline-version-number)
- [`nf-core sync` - Synchronise pipeline TEMPLATE branches](#sync-a-pipeline-with-the-template)
+- [`nf-core create-logo` - Create an nf-core pipeline logo](#create-an-nf-core-pipeline-logo)
+- [`nf-core tui` - Explore the nf-core command line graphically](#tools-cli-tui)
- [`nf-core modules` - commands for dealing with DSL2 modules](#modules)
- [`modules list` - List available modules](#list-modules)
@@ -727,6 +733,29 @@ To create the pull request, a personal access token is required for API authenti
These can be created at [https://github.com/settings/tokens](https://github.com/settings/tokens).
Supply this using the `--auth-token` flag.
+## Create an nf-core pipeline logo
+
+The `nf-core create-logo` command creates a logo for your pipeline based on the nf-core template and the pipeline name. You can specify the width of the logo in pixels with the `--width` flag. Additionally, you can specify the output format to be either `png` or `svg` with the `--format` flag. The default format is `png`.
+
+Usage is `nf-core create-logo `, eg:
+
+
+
+![`nf-core create-logo nextbigthing`](docs/images/nf-core-create-logo.svg)
+
+## Tools CLI TUI
+
+_CLI:_ Command line interface
+_TUI:_ Terminal user interface
+
+The `nf-core` command line interface is fairly large, with a lot of commands and options.
+To make it easier to explore and use, run `nf-core tui` to launch a graphical terminal interface.
+
+This functionality works using [Textualize/trogon](https://github.com/Textualize/trogon)
+and is based on the underlying CLI implementation that uses [Click](https://click.palletsprojects.com/).
+
## Modules
With the advent of [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html), we are creating a centralised repository of modules.
diff --git a/codecov.yml b/codecov.yml
index 1ecf8960c0..11a63f8bbf 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -4,3 +4,6 @@ coverage:
default:
threshold: 5%
patch: off
+comment:
+ layout: "condensed_header, condensed_files, condensed_footer"
+ require_changes: true
diff --git a/docs/api/Makefile b/docs/api/Makefile
index f961e4ded1..ab30a5051e 100644
--- a/docs/api/Makefile
+++ b/docs/api/Makefile
@@ -16,4 +16,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/api/_src/conf.py b/docs/api/_src/conf.py
index 27eaf9bcb3..bfdbd7888d 100644
--- a/docs/api/_src/conf.py
+++ b/docs/api/_src/conf.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
@@ -16,9 +15,10 @@
import sys
from typing import Dict
-sys.path.insert(0, os.path.abspath("../../../nf_core"))
import nf_core
+sys.path.insert(0, os.path.abspath("../../../nf_core"))
+
# -- Project information -----------------------------------------------------
project = "nf-core/tools"
diff --git a/docs/images/nf-core-bump-version.svg b/docs/images/nf-core-bump-version.svg
index c57af953e3..602b18304d 100644
--- a/docs/images/nf-core-bump-version.svg
+++ b/docs/images/nf-core-bump-version.svg
@@ -19,122 +19,122 @@
font-weight: 700;
}
- .terminal-2993841204-matrix {
+ .terminal-760177622-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-2993841204-title {
+ .terminal-760177622-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-2993841204-r1 { fill: #c5c8c6 }
-.terminal-2993841204-r2 { fill: #98a84b }
-.terminal-2993841204-r3 { fill: #9a9b99 }
-.terminal-2993841204-r4 { fill: #608ab1 }
-.terminal-2993841204-r5 { fill: #d0b344 }
-.terminal-2993841204-r6 { fill: #cc555a }
+ .terminal-760177622-r1 { fill: #c5c8c6 }
+.terminal-760177622-r2 { fill: #98a84b }
+.terminal-760177622-r3 { fill: #9a9b99 }
+.terminal-760177622-r4 { fill: #608ab1 }
+.terminal-760177622-r5 { fill: #d0b344 }
+.terminal-760177622-r6 { fill: #cc555a }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -146,41 +146,41 @@
-
+
-
- $ nf-core bump-version 1.1
-
- ,--./,-.
- ___ __ __ __ ___ /,-._.--~\
- |\ | |__ __ / ` / \ |__) |__ } {
- | \| | \__, \__/ | \ |___ \`-._,-`-,
- `._,._,'
-
- nf-core/tools version 2.11.1 - https://nf-co.re
-
-
-INFO Changing version number from '1.0dev' to '1.1'
-INFO Updated version in 'nextflow.config'
- - version = '1.0dev'
- + version = '1.1'
-
-
-INFO Updated version in 'assets/multiqc_config.yml'
- - This report has been generated by the <a
-href="https://github.com/nf-core/nextbigthing/tree/dev" target="_blank">nf-core/nextbigthing</a>
- + This report has been generated by the <a
-href="https://github.com/nf-core/nextbigthing/releases/tag/1.1"
-target="_blank">nf-core/nextbigthing</a>
-
-
-INFO Updated version in 'assets/multiqc_config.yml'
- - <a href="https://nf-co.re/nextbigthing/dev/docs/output"
-target="_blank">documentation</a>.
- + <a href="https://nf-co.re/nextbigthing/1.1/docs/output"
-target="_blank">documentation</a>.
-
-
+
+ $ nf-core bump-version 1.1
+
+ ,--./,-.
+ ___ __ __ __ ___ /,-._.--~\
+ |\ | |__ __ / ` / \ |__) |__ } {
+ | \| | \__, \__/ | \ |___ \`-._,-`-,
+ `._,._,'
+
+ nf-core/tools version 2.12 - https://nf-co.re
+
+
+INFO Changing version number from '1.0dev' to '1.1'
+INFO Updated version in 'nextflow.config'
+ - version = '1.0dev'
+ + version = '1.1'
+
+
+INFO Updated version in 'assets/multiqc_config.yml'
+ - This report has been generated by the <a
+href="https://github.com/nf-core/nextbigthing/tree/dev" target="_blank">nf-core/nextbigthing</a>
+ + This report has been generated by the <a
+href="https://github.com/nf-core/nextbigthing/releases/tag/1.1"
+target="_blank">nf-core/nextbigthing</a>
+
+
+INFO Updated version in 'assets/multiqc_config.yml'
+ - <a href="https://nf-co.re/nextbigthing/dev/docs/output"
+target="_blank">documentation</a>.
+ + <a href="https://nf-co.re/nextbigthing/1.1/docs/output"
+target="_blank">documentation</a>.
+
+
diff --git a/docs/images/nf-core-create-logo.svg b/docs/images/nf-core-create-logo.svg
new file mode 100644
index 0000000000..b4d88480d9
--- /dev/null
+++ b/docs/images/nf-core-create-logo.svg
@@ -0,0 +1,108 @@
+
diff --git a/docs/images/nf-core-create.svg b/docs/images/nf-core-create.svg
index 99a7112fb4..79e349f4fc 100644
--- a/docs/images/nf-core-create.svg
+++ b/docs/images/nf-core-create.svg
@@ -19,104 +19,104 @@
font-weight: 700;
}
- .terminal-3963146934-matrix {
+ .terminal-1826411096-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-3963146934-title {
+ .terminal-1826411096-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-3963146934-r1 { fill: #c5c8c6 }
-.terminal-3963146934-r2 { fill: #98a84b }
-.terminal-3963146934-r3 { fill: #9a9b99 }
-.terminal-3963146934-r4 { fill: #608ab1 }
-.terminal-3963146934-r5 { fill: #d0b344 }
-.terminal-3963146934-r6 { fill: #98729f }
-.terminal-3963146934-r7 { fill: #ff2c7a }
-.terminal-3963146934-r8 { fill: #98a84b;font-weight: bold }
-.terminal-3963146934-r9 { fill: #1984e9;text-decoration: underline; }
+ .terminal-1826411096-r1 { fill: #c5c8c6 }
+.terminal-1826411096-r2 { fill: #98a84b }
+.terminal-1826411096-r3 { fill: #9a9b99 }
+.terminal-1826411096-r4 { fill: #608ab1 }
+.terminal-1826411096-r5 { fill: #d0b344 }
+.terminal-1826411096-r6 { fill: #98729f }
+.terminal-1826411096-r7 { fill: #ff2c7a }
+.terminal-1826411096-r8 { fill: #98a84b;font-weight: bold }
+.terminal-1826411096-r9 { fill: #1984e9;text-decoration: underline; }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -128,34 +128,34 @@
-
+
-
- $ nf-core create -n nextbigthing -d "This pipeline analyses data from the next big omics technique"
--a "Big Steve" --plain
-
- ,--./,-.
- ___ __ __ __ ___ /,-._.--~\
- |\ | |__ __ / ` / \ |__) |__ } {
- | \| | \__, \__/ | \ |___ \`-._,-`-,
- `._,._,'
-
- nf-core/tools version 2.11.1 - https://nf-co.re
-
-
-INFO Creating new nf-core pipeline: 'nf-core/nextbigthing'
-INFO Initialising pipeline git repository
-INFO Done. Remember to add a remote and push to GitHub:
- cd /home/runner/work/tools/tools/tmp/nf-core-nextbigthing
- git remote add origin git@github.com:USERNAME/REPO_NAME.git
- git push --all origin
-INFO This will also push your newly created dev branch and the TEMPLATE branch for syncing.
-INFO !!!!!! IMPORTANT !!!!!!
-
-If you are interested in adding your pipeline to the nf-core community,
-PLEASE COME AND TALK TO US IN THE NF-CORE SLACK BEFORE WRITING ANY CODE!
-
-Please read: https://nf-co.re/developers/adding_pipelines#join-the-community
+
+ $ nf-core create -n nextbigthing -d "This pipeline analyses data from the next big omics technique"
+-a "Big Steve" --plain
+
+ ,--./,-.
+ ___ __ __ __ ___ /,-._.--~\
+ |\ | |__ __ / ` / \ |__) |__ } {
+ | \| | \__, \__/ | \ |___ \`-._,-`-,
+ `._,._,'
+
+ nf-core/tools version 2.12 - https://nf-co.re
+
+
+INFO Creating new nf-core pipeline: 'nf-core/nextbigthing'
+INFO Initialising pipeline git repository
+INFO Done. Remember to add a remote and push to GitHub:
+ cd /home/runner/work/tools/tools/tmp/nf-core-nextbigthing
+ git remote add origin git@github.com:USERNAME/REPO_NAME.git
+ git push --all origin
+INFO This will also push your newly created dev branch and the TEMPLATE branch for syncing.
+INFO !!!!!! IMPORTANT !!!!!!
+
+If you are interested in adding your pipeline to the nf-core community,
+PLEASE COME AND TALK TO US IN THE NF-CORE SLACK BEFORE WRITING ANY CODE!
+
+Please read: https://nf-co.re/developers/adding_pipelines#join-the-community
diff --git a/docs/images/nf-core-download.svg b/docs/images/nf-core-download.svg
index cc6b17ebfd..05b7456fbd 100644
--- a/docs/images/nf-core-download.svg
+++ b/docs/images/nf-core-download.svg
@@ -19,86 +19,86 @@
font-weight: 700;
}
- .terminal-2599349710-matrix {
+ .terminal-1937960304-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-2599349710-title {
+ .terminal-1937960304-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-2599349710-r1 { fill: #c5c8c6 }
-.terminal-2599349710-r2 { fill: #98a84b }
-.terminal-2599349710-r3 { fill: #9a9b99 }
-.terminal-2599349710-r4 { fill: #608ab1 }
-.terminal-2599349710-r5 { fill: #d0b344 }
-.terminal-2599349710-r6 { fill: #cc555a }
+ .terminal-1937960304-r1 { fill: #c5c8c6 }
+.terminal-1937960304-r2 { fill: #98a84b }
+.terminal-1937960304-r3 { fill: #9a9b99 }
+.terminal-1937960304-r4 { fill: #608ab1 }
+.terminal-1937960304-r5 { fill: #d0b344 }
+.terminal-1937960304-r6 { fill: #cc555a }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -110,29 +110,29 @@
-
+
-
- $ nf-core download rnaseq -r 3.8 --outdir nf-core-rnaseq -x none -s none -d
-
- ,--./,-.
- ___ __ __ __ ___ /,-._.--~\
- |\ | |__ __ / ` / \ |__) |__ } {
- | \| | \__, \__/ | \ |___ \`-._,-`-,
- `._,._,'
-
- nf-core/tools version 2.11.1 - https://nf-co.re
-
-
-WARNING Could not find GitHub authentication token. Some API requests may fail.
-INFO Saving 'nf-core/rnaseq'
- Pipeline revision: '3.8'
- Use containers: 'none'
- Container library: 'quay.io'
- Output directory: 'nf-core-rnaseq'
- Include default institutional configuration: 'True'
-INFO Downloading centralised configs from GitHub
-INFO Downloading workflow files from GitHub
+
+ $ nf-core download rnaseq -r 3.8 --outdir nf-core-rnaseq -x none -s none -d
+
+ ,--./,-.
+ ___ __ __ __ ___ /,-._.--~\
+ |\ | |__ __ / ` / \ |__) |__ } {
+ | \| | \__, \__/ | \ |___ \`-._,-`-,
+ `._,._,'
+
+ nf-core/tools version 2.12 - https://nf-co.re
+
+
+WARNING Could not find GitHub authentication token. Some API requests may fail.
+INFO Saving 'nf-core/rnaseq'
+ Pipeline revision: '3.8'
+ Use containers: 'none'
+ Container library: 'quay.io'
+ Output directory: 'nf-core-rnaseq'
+ Include default institutional configuration: 'True'
+INFO Downloading centralised configs from GitHub
+INFO Downloading workflow files from GitHub
diff --git a/docs/images/nf-core-launch-rnaseq.svg b/docs/images/nf-core-launch-rnaseq.svg
index b76e4893c5..8956e15703 100644
--- a/docs/images/nf-core-launch-rnaseq.svg
+++ b/docs/images/nf-core-launch-rnaseq.svg
@@ -19,72 +19,72 @@
font-weight: 700;
}
- .terminal-3706564145-matrix {
+ .terminal-1862905299-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-3706564145-title {
+ .terminal-1862905299-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-3706564145-r1 { fill: #c5c8c6 }
-.terminal-3706564145-r2 { fill: #98a84b }
-.terminal-3706564145-r3 { fill: #9a9b99 }
-.terminal-3706564145-r4 { fill: #608ab1 }
-.terminal-3706564145-r5 { fill: #d0b344 }
-.terminal-3706564145-r6 { fill: #c5c8c6;font-weight: bold }
-.terminal-3706564145-r7 { fill: #68a0b3;font-weight: bold }
+ .terminal-1862905299-r1 { fill: #c5c8c6 }
+.terminal-1862905299-r2 { fill: #98a84b }
+.terminal-1862905299-r3 { fill: #9a9b99 }
+.terminal-1862905299-r4 { fill: #608ab1 }
+.terminal-1862905299-r5 { fill: #d0b344 }
+.terminal-1862905299-r6 { fill: #c5c8c6;font-weight: bold }
+.terminal-1862905299-r7 { fill: #68a0b3;font-weight: bold }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -96,24 +96,24 @@
-
+
-
- $ nf-core launch rnaseq -r 3.8.1
-
- ,--./,-.
- ___ __ __ __ ___ /,-._.--~\
- |\ | |__ __ / ` / \ |__) |__ } {
- | \| | \__, \__/ | \ |___ \`-._,-`-,
- `._,._,'
-
- nf-core/tools version 2.11.1 - https://nf-co.re
-
-
-INFO NOTE: This tool ignores any pipeline parameter defaults overwritten by Nextflow config
- files or profiles
-
-INFO Downloading workflow: nf-core/rnaseq (3.8.1)
+
+ $ nf-core launch rnaseq -r 3.8.1
+
+ ,--./,-.
+ ___ __ __ __ ___ /,-._.--~\
+ |\ | |__ __ / ` / \ |__) |__ } {
+ | \| | \__, \__/ | \ |___ \`-._,-`-,
+ `._,._,'
+
+ nf-core/tools version 2.12 - https://nf-co.re
+
+
+INFO NOTE: This tool ignores any pipeline parameter defaults overwritten by Nextflow config
+ files or profiles
+
+INFO Downloading workflow: nf-core/rnaseq (3.8.1)
diff --git a/docs/images/nf-core-licences.svg b/docs/images/nf-core-licences.svg
index 934458cf62..0512d5c954 100644
--- a/docs/images/nf-core-licences.svg
+++ b/docs/images/nf-core-licences.svg
@@ -1,4 +1,4 @@
-