From fe825fb2aa52a4ffe49ce09691d328a908cf4843 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Thu, 16 Oct 2025 13:38:35 +0000 Subject: [PATCH 1/7] Template update for nf-core/tools version 3.4.1 --- .devcontainer/devcontainer.json | 28 ++++---- .devcontainer/setup.sh | 13 ++++ .github/actions/nf-test/action.yml | 6 +- .github/workflows/awsfulltest.yml | 12 ++-- .github/workflows/awstest.yml | 12 ++-- .github/workflows/clean-up.yml | 2 +- .github/workflows/download_pipeline.yml | 6 +- .github/workflows/fix_linting.yml | 16 ++--- .github/workflows/linting.yml | 14 ++-- .github/workflows/linting_comment.yml | 2 +- .github/workflows/nf-test.yml | 9 +-- .github/workflows/release-announcements.yml | 7 ++ .../workflows/template-version-comment.yml | 2 +- .gitpod.yml | 10 --- .nf-core.yml | 7 +- .pre-commit-config.yaml | 2 +- .prettierignore | 1 + README.md | 5 +- docs/usage.md | 2 +- main.nf | 5 +- modules.json | 8 +-- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 18 +++--- modules/nf-core/multiqc/tests/tags.yml | 2 - nextflow.config | 64 ++++++------------- nextflow_schema.json | 12 ++++ ro-crate-metadata.json | 16 ++--- .../local/utils_nfcore_eager_pipeline/main.nf | 31 ++++++++- .../utils_nextflow_pipeline/tests/tags.yml | 2 - .../utils_nfcore_pipeline/tests/tags.yml | 2 - .../nf-core/utils_nfschema_plugin/main.nf | 40 ++++++++++-- .../utils_nfschema_plugin/tests/main.nf.test | 56 ++++++++++++++++ .../tests/nextflow.config | 4 +- tests/.nftignore | 3 +- tests/default.nf.test | 2 - 36 files changed, 269 insertions(+), 158 deletions(-) create mode 100755 .devcontainer/setup.sh delete mode 100644 .gitpod.yml delete mode 100644 modules/nf-core/multiqc/tests/tags.yml delete mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml delete mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b290e0901..97c8c97fe 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,20 @@ { "name": "nfcore", - "image": "nfcore/gitpod:latest", - "remoteUser": "gitpod", - "runArgs": ["--privileged"], + "image": "nfcore/devcontainer:latest", - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "python.defaultInterpreterPath": "/opt/conda/bin/python" - }, + "remoteUser": "root", + "privileged": true, - // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } + "remoteEnv": { + // Workspace path on the host for mounting with docker-outside-of-docker + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + + "onCreateCommand": "./.devcontainer/setup.sh", + + "hostRequirements": { + "cpus": 4, + "memory": "16gb", + "storage": "32gb" } } diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 000000000..8f457aa3f --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Customise the terminal command prompt +echo "export PROMPT_DIRTRIM=2" >> $HOME/.bashrc +echo "export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '" >> $HOME/.bashrc +export PROMPT_DIRTRIM=2 +export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] ' + +# Update Nextflow +nextflow self-update + +# Update welcome message +echo "Welcome to the nf-core/eager devcontainer!" > /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml index bf44d9612..3b9724c76 100644 --- a/.github/actions/nf-test/action.yml +++ b/.github/actions/nf-test/action.yml @@ -25,9 +25,9 @@ runs: version: "${{ env.NXF_VERSION }}" - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" - name: Install nf-test uses: nf-core/setup-nf-test@v1 @@ -52,6 +52,8 @@ runs: with: auto-update-conda: true conda-solver: libmamba + channels: conda-forge + channel-priority: strict conda-remove-defaults: true - name: Run nf-test diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index f5b9004bb..df5466ae6 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -28,15 +28,15 @@ jobs: # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} revision: ${{ steps.revision.outputs.revision }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/eager/work-${{ steps.revision.outputs.revision }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/eager/work-${{ steps.revision.outputs.revision }} parameters: | { "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/eager/results-${{ steps.revision.outputs.revision }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/eager/results-${{ steps.revision.outputs.revision }}" } profiles: test_full @@ -44,5 +44,5 @@ jobs: with: name: Seqera Platform debug log file path: | - seqera_platform_action_*.log - seqera_platform_action_*.json + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 833984a5c..16a92af62 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -14,14 +14,14 @@ jobs: - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/eager/work-${{ github.sha }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/eager/work-${{ github.sha }} parameters: | { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/eager/results-test-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/eager/results-test-${{ github.sha }}" } profiles: test @@ -29,5 +29,5 @@ jobs: with: name: Seqera Platform debug log file path: | - seqera_platform_action_*.log - seqera_platform_action_*.json + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index ac030fd58..6adb0fff4 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@5bef64f19d7facfb25b37b414482c7164d639639 # v9 + - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10 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/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 999bcc382..6d94bcbf9 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -44,9 +44,9 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" architecture: "x64" - name: Setup Apptainer @@ -57,7 +57,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install git+https://github.com/nf-core/tools.git@dev + pip install git+https://github.com/nf-core/tools.git - name: Make a cache directory for the container images run: | diff --git a/.github/workflows/fix_linting.yml b/.github/workflows/fix_linting.yml index 55366639e..db20f337b 100644 --- a/.github/workflows/fix_linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 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 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: eyes @@ -32,9 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" - name: Install pre-commit run: pip install pre-commit @@ -47,7 +47,7 @@ jobs: # 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 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: "+1" @@ -67,21 +67,21 @@ jobs: - 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 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 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 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 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 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: issue-number: ${{ github.event.issue.number }} body: | diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 8b0f88c36..30e66026f 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -11,12 +11,12 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - - name: Set up Python 3.13 - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - name: Set up Python 3.14 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" - name: Install pre-commit run: pip install pre-commit @@ -28,14 +28,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Install Nextflow uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" architecture: "x64" - name: read .nf-core.yml diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index d43797d9d..e6e9bc269 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -21,7 +21,7 @@ jobs: run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT - name: Post PR comment - uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2 + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index e7b58449b..e20bf6d0c 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -18,7 +18,7 @@ concurrency: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NFT_VER: "0.9.2" + NFT_VER: "0.9.3" NFT_WORKDIR: "~" NXF_ANSI_LOG: false NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity @@ -40,7 +40,7 @@ jobs: rm -rf ./* || true rm -rf ./.??* || true ls -la ./ - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: fetch-depth: 0 @@ -78,14 +78,14 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "24.10.5" + - "25.04.0" - "latest-everything" env: NXF_ANSI_LOG: false TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: fetch-depth: 0 @@ -95,6 +95,7 @@ jobs: continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} env: NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + NXF_VERSION: ${{ matrix.NXF_VER }} with: profile: ${{ matrix.profile }} shard: ${{ matrix.shard }} diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 0f7324956..e64cebd6a 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -14,6 +14,11 @@ jobs: run: | echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT + - name: get description + id: get_topics + run: | + echo "description=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .description' >> $GITHUB_OUTPUT + - uses: rzr/fediverse-action@master with: access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} @@ -23,6 +28,8 @@ jobs: message: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! + ${{ steps.get_topics.outputs.description }} + Please see the changelog: ${{ github.event.release.html_url }} ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml index beb5c77fb..c5988af90 100644 --- a/.github/workflows/template-version-comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 83599f633..000000000 --- a/.gitpod.yml +++ /dev/null @@ -1,10 +0,0 @@ -image: nfcore/gitpod:latest -tasks: - - name: Update Nextflow and setup pre-commit - command: | - pre-commit install --install-hooks - nextflow self-update - -vscode: - extensions: - - nf-core.nf-core-extensionpack # https://github.com/nf-core/vscode-extensionpack diff --git a/.nf-core.yml b/.nf-core.yml index ca010029d..d0fa8067f 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,8 +1,7 @@ lint: - nextflow_config: - - config_defaults: - - params.contamination_estimation_angsd_hapmap -nf_core_version: 3.3.2 + nextflow_config: false + schema_params: false +nf_core_version: 3.4.1 repository_type: pipeline template: author: The nf-core/eager community diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bb41beec1..d06777a8f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: additional_dependencies: - prettier@3.6.2 - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: trailing-whitespace args: [--markdown-linebreak-ext=md] diff --git a/.prettierignore b/.prettierignore index edd29f01e..2255e3e36 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,4 +10,5 @@ testing/ testing* *.pyc bin/ +.nf-test/ ro-crate-metadata.json diff --git a/README.md b/README.md index 757323c6b..ab5fd6d5b 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,13 @@ +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-core/eager) [![GitHub Actions CI Status](https://github.com/nf-core/eager/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/nf-test.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/eager/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/eager/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) -[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.4.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.4.1) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) diff --git a/docs/usage.md b/docs/usage.md index e0aadb7d7..fee5c8732 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -149,7 +149,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `shifter` - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` diff --git a/main.nf b/main.nf index b81969752..a183cb25e 100644 --- a/main.nf +++ b/main.nf @@ -74,7 +74,10 @@ workflow { params.monochrome_logs, args, params.outdir, - params.input + params.input, + params.help, + params.help_full, + params.show_hidden ) // diff --git a/modules.json b/modules.json index adb349772..70f752103 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e10b76ca0c66213581bec2833e30d31f239dec0b", "installed_by": ["modules"] } } @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", + "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 812fc4c5e..dd513cbd1 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.29 + - bioconda::multiqc=1.31 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 0ac3c3699..5288f5ccf 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.29--pyhdfd78af_0' : - 'biocontainers/multiqc:1.29--pyhdfd78af_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ef/eff0eafe78d5f3b65a6639265a16b89fdca88d06d18894f90fcdb50142004329/data' : + 'community.wave.seqera.io/library/multiqc:1.31--1efbafd542a23882' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 88e90571c..17881d15c 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1" + "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-05-22T11:50:41.182332996" + "timestamp": "2025-09-08T20:57:36.139055243" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1" + "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-05-22T11:51:22.448739369" + "timestamp": "2025-09-08T20:59:15.142230631" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1" + "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-05-22T11:51:06.198928424" + "timestamp": "2025-09-08T20:58:29.629087066" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d37..000000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/nextflow.config b/nextflow.config index 9cb91e673..d6aa55048 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,13 +32,15 @@ params { email_on_fail = null plaintext_email = false monochrome_logs = false - hook_url = null + hook_url = System.getenv('HOOK_URL') help = false help_full = false show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')// Config options + trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') + + // Config options config_profile_name = null config_profile_description = null @@ -91,7 +93,18 @@ profiles { apptainer.enabled = false docker.runOptions = '-u $(id -u):$(id -g)' } - arm { + arm64 { + process.arch = 'arm64' + // TODO https://github.com/nf-core/modules/issues/6694 + // For now if you're using arm64 you have to use wave for the sake of the maintainers + // wave profile + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' + } + emulate_amd64 { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -148,18 +161,6 @@ profiles { wave.freeze = true wave.strategy = 'conda,container' } - gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB - process { - resourceLimits = [ - memory: 8.GB, - cpus : 4, - time : 1.h - ] - } - } gpu { docker.runOptions = '-u $(id -u):$(id -g) --gpus all' apptainer.runOptions = '--nv' @@ -169,6 +170,8 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } +// Set AWS client to anonymous when using the default igenomes_base +aws.client.anonymous = !params.igenomes_ignore && params.igenomes_base?.startsWith('s3://ngi-igenomes/igenomes/') ?: false // Load nf-core custom profiles from different institutions // If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. @@ -250,46 +253,19 @@ manifest { description = """A fully reproducible and state-of-the-art ancient DNA analysis pipeline""" mainScript = 'main.nf' defaultBranch = 'master' - nextflowVersion = '!>=24.10.5' + nextflowVersion = '!>=25.04.0' version = '3.0.0dev' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.4.2' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { defaultIgnoreParams = ["genomes"] monochromeLogs = params.monochrome_logs - help { - enabled = true - command = "nextflow run nf-core/eager -profile --input samplesheet.csv --outdir " - fullParameter = "help_full" - showHiddenParameter = "show_hidden" - beforeText = """ --\033[2m----------------------------------------------------\033[0m- - \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m -\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m -\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m -\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m - \033[0;32m`._,._,\'\033[0m -\033[0;35m nf-core/eager ${manifest.version}\033[0m --\033[2m----------------------------------------------------\033[0m- -""" - afterText = """${manifest.doi ? "\n* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} -* The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x - -* Software dependencies - https://github.com/nf-core/eager/blob/master/CITATIONS.md -""" - } - summary { - beforeText = validation.help.beforeText - afterText = validation.help.afterText - } } // Load modules.config for DSL2 module specific options diff --git a/nextflow_schema.json b/nextflow_schema.json index 1602a3aa1..cafbf703b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -224,6 +224,18 @@ "fa_icon": "far calendar", "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", "hidden": true + }, + "help": { + "type": ["boolean", "string"], + "description": "Display the help message." + }, + "help_full": { + "type": "boolean", + "description": "Display the full detailed help message." + }, + "show_hidden": { + "type": "boolean", + "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)." } } } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index eb1c8c703..e9c7f07a6 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-07-08T11:38:38+00:00", - "description": "

\n \n \n \"nf-core/eager\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/eager/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/eager/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/eager/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/eager)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23eager-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/eager)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/eager** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/eager \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/eager/usage) and the [parameter documentation](https://nf-co.re/eager/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/eager/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/eager/output).\n\n## Credits\n\nnf-core/eager was originally written by The nf-core/eager community.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#eager` channel](https://nfcore.slack.com/channels/eager) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2025-10-16T13:38:29+00:00", + "description": "

\n \n \n \"nf-core/eager\"\n \n

\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-core/eager)\n[![GitHub Actions CI Status](https://github.com/nf-core/eager/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/eager/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/eager/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.4.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/eager)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23eager-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/eager)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/eager** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/eager \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/eager/usage) and the [parameter documentation](https://nf-co.re/eager/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/eager/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/eager/output).\n\n## Credits\n\nnf-core/eager was originally written by The nf-core/eager community.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#eager` channel](https://nfcore.slack.com/channels/eager) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#93e6d0ad-6011-4883-93ce-089e47f87194" + "@id": "#f4e2f95c-91c5-4ed1-b668-d8cd39474b03" } ], "name": "nf-core/eager" @@ -131,7 +131,7 @@ } ], "dateCreated": "", - "dateModified": "2025-07-08T11:38:38Z", + "dateModified": "2025-10-16T13:38:29Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -165,14 +165,14 @@ "url": { "@id": "https://www.nextflow.io/" }, - "version": "!>=24.10.5" + "version": "!>=25.04.0" }, { - "@id": "#93e6d0ad-6011-4883-93ce-089e47f87194", + "@id": "#f4e2f95c-91c5-4ed1-b668-d8cd39474b03", "@type": "TestSuite", "instance": [ { - "@id": "#efc454c8-9218-4d24-9733-da7bf2e66a1c" + "@id": "#47b8ec23-3a47-477c-9077-c4c12a788d7c" } ], "mainEntity": { @@ -181,7 +181,7 @@ "name": "Test suite for nf-core/eager" }, { - "@id": "#efc454c8-9218-4d24-9733-da7bf2e66a1c", + "@id": "#47b8ec23-3a47-477c-9077-c4c12a788d7c", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/eager", "resource": "repos/nf-core/eager/actions/workflows/nf-test.yml", diff --git a/subworkflows/local/utils_nfcore_eager_pipeline/main.nf b/subworkflows/local/utils_nfcore_eager_pipeline/main.nf index cbdbc28e3..66c10c025 100644 --- a/subworkflows/local/utils_nfcore_eager_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_eager_pipeline/main.nf @@ -11,6 +11,7 @@ include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' include { paramsSummaryMap } from 'plugin/nf-schema' include { samplesheetToList } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' @@ -32,6 +33,9 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved input // string: Path to input samplesheet + help // boolean: Display help message and exit + help_full // boolean: Show the full help message + show_hidden // boolean: Show hidden parameters in the help message main: @@ -50,10 +54,35 @@ workflow PIPELINE_INITIALISATION { // // Validate parameters and generate parameter summary to stdout // + before_text = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m nf-core/eager ${workflow.manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${workflow.manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/nf-core/eager/blob/master/CITATIONS.md +""" + command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " + UTILS_NFSCHEMA_PLUGIN ( workflow, validate_params, - null + null, + help, + help_full, + show_hidden, + before_text, + after_text, + command ) // diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml deleted file mode 100644 index f84761125..000000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nextflow_pipeline: - - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml deleted file mode 100644 index ac8523c9a..000000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfcore_pipeline: - - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf index 4994303ea..ee4738c8d 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -4,6 +4,7 @@ include { paramsSummaryLog } from 'plugin/nf-schema' include { validateParameters } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' workflow UTILS_NFSCHEMA_PLUGIN { @@ -15,29 +16,56 @@ workflow UTILS_NFSCHEMA_PLUGIN { // when this input is empty it will automatically use the configured schema or // "${projectDir}/nextflow_schema.json" as default. This input should not be empty // for meta pipelines + help // boolean: show help message + help_full // boolean: show full help message + show_hidden // boolean: show hidden parameters in help message + before_text // string: text to show before the help message and parameters summary + after_text // string: text to show after the help message and parameters summary + command // string: an example command of the pipeline main: + if(help || help_full) { + help_options = [ + beforeText: before_text, + afterText: after_text, + command: command, + showHidden: show_hidden, + fullHelp: help_full, + ] + if(parameters_schema) { + help_options << [parametersSchema: parameters_schema] + } + log.info paramsHelp( + help_options, + params.help instanceof String ? params.help : "", + ) + exit 0 + } + // // Print parameter summary to stdout. This will display the parameters // that differ from the default given in the JSON schema // + + summary_options = [:] if(parameters_schema) { - log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) - } else { - log.info paramsSummaryLog(input_workflow) + summary_options << [parametersSchema: parameters_schema] } + log.info before_text + log.info paramsSummaryLog(summary_options, input_workflow) + log.info after_text // // Validate the parameters using nextflow_schema.json or the schema // given via the validation.parametersSchema configuration option // if(validate_params) { + validateOptions = [:] if(parameters_schema) { - validateParameters(parameters_schema:parameters_schema) - } else { - validateParameters() + validateOptions << [parametersSchema: parameters_schema] } + validateParameters(validateOptions) } emit: diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 8fb301648..c977917aa 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -25,6 +25,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -51,6 +57,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -77,6 +89,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -103,6 +121,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -114,4 +138,36 @@ nextflow_workflow { ) } } + + test("Should create a help message") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = true + input[4] = false + input[5] = false + input[6] = "Before" + input[7] = "After" + input[8] = "nextflow run test/test" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 09ef842ae..8d8c73718 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -1,8 +1,8 @@ plugins { - id "nf-schema@2.4.2" + id "nf-schema@2.5.1" } validation { parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" monochromeLogs = true -} \ No newline at end of file +} diff --git a/tests/.nftignore b/tests/.nftignore index 158c83c59..e128a1284 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -1,10 +1,11 @@ .DS_Store multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt -multiqc/multiqc_data/BETA-multiqc.parquet +multiqc/multiqc_data/multiqc.parquet multiqc/multiqc_data/multiqc.log multiqc/multiqc_data/multiqc_data.json multiqc/multiqc_data/multiqc_sources.txt multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_data/llms-full.txt multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} multiqc/multiqc_report.html fastqc/*_fastqc.{html,zip} diff --git a/tests/default.nf.test b/tests/default.nf.test index 0dab9f088..4aa660470 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -20,8 +20,6 @@ nextflow_pipeline { assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml"), // All stable path name, with a relative path From 9d5c07d0ae0fd760f4fc48349b757c06d0716a45 Mon Sep 17 00:00:00 2001 From: Ian Light-Maka <86308592+ilight1542@users.noreply.github.com> Date: Fri, 24 Oct 2025 10:09:01 +0000 Subject: [PATCH 2/7] initial generation of snapshot, assertions not checked fully for modern data --- tests/test_modern.nf.test | 130 +++++++++++ tests/test_modern.nf.test.snap | 383 +++++++++++++++++++++++++++++++++ 2 files changed, 513 insertions(+) create mode 100644 tests/test_modern.nf.test create mode 100644 tests/test_modern.nf.test.snap diff --git a/tests/test_modern.nf.test b/tests/test_modern.nf.test new file mode 100644 index 000000000..16af0849f --- /dev/null +++ b/tests/test_modern.nf.test @@ -0,0 +1,130 @@ +nextflow_pipeline { + + name "Test pipeline: NFCORE_EAGER" + script "main.nf" + tag "pipeline" + tag "nfcore_eager" + tag "test_modern" + profile "test_modern" + + test("Test `test_modern` profile:") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + + /////////////////// + // DOCUMENTATION // + /////////////////// + + // The contents of each top level results directory should be tested with individually named snapshots. + // Within each snapshot, there should be two to three distinct variables, that contain the files to be tested. + // - stable_name_ is for files with variable md5sums (i.e. content) so only names will be compared + // - stable_content_ is for files with stable md5sums (i.e. content) so md5sums will be compared + // - bams_ is for BAM files, where the headerMD5 is checked for stability (since the content can be unstable) + // If a directory is fully stable, you can drop `stable_name_*` + // If a directory contains no BAMs, you can drop `bams_*` + + // Generate with: nf-test test --profile +docker --tag test_modern --update-snapshot + // Test with: nf-test test --profile +docker --tag test_modern + // NOTE: BAMs are always only stable in name, because: + // a) sharding breaks header since the shard that was first is named in the header (Fixed in https://github.com/nf-core/eager/pull/1112) + // b) the order of the reads in the BAMs is not stable (sorted, but reads that share a start position can be in any order) + // point b) also causes BAIs to be unstable. + // c) Merging of multiple BAMs with duplicate @RG / @PG tags can cause the header to be unstable (particularly in the case of shards/lanes) + + ////////////////////// + // DEFINE VARIABLES // + ////////////////////// + + // Define exclusion patterns for files with unstable contents + // NOTE: When a section needs more than a couple of small patterns, consider adding a variable to store the patterns here + // This is particularly important if the patterns excluded in the stable content section should be included in the stable name section + def unstable_patterns_auth = [ + '**/mapped_reads_gc-content_distribution.txt', + '**/mapped_reads_nucleotide_content.txt', + '**/genome_gc_content_per_window.png', + '**/*.{svg,pdf,html,png}', + '**/DamageProfiler.log', + '**/3p_freq_misincorporations.txt', + '**/5p_freq_misincorporations.txt', + '**/DNA_comp_genome.txt', + '**/DNA_composition_sample.txt', + '**/misincorporation.txt', + '**/genome_results.txt', + '**/*command.log', + ] + + // Check that no files are missing/added + // Command legend: Result directory to index , includeDir: include dirs?, ignore: exclude patterns , ignoreFile: exclude pattern list , include: include patterns + def stable_name_all = getAllFilesFromDir("$outputDir/" , includeDir: false , ignore: ['pipeline_info/*'] , ignoreFile: null , include: ['*', '**/*'] ) + + // Deduplication + def stable_content_deduplication = getAllFilesFromDir("$outputDir/deduplication" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.flagstat'] ) + def stable_name_deduplication = getAllFilesFromDir("$outputDir/deduplication" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.{bam,bai}'] ) + + // Final_bams + def stable_content_final_bams = getAllFilesFromDir("$outputDir/final_bams" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.flagstat'] ) + def stable_name_final_bams = getAllFilesFromDir("$outputDir/final_bams" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.{bam,bai}'] ) + + // Mapping (incl. bam_input flasgstat) + def stable_content_mapping = getAllFilesFromDir("$outputDir/mapping" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.flagstat'] ) + def stable_name_mapping = getAllFilesFromDir("$outputDir/mapping" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.{bam,bai}'] ) + + // Genotyping + def stable_content_genotyping = getAllFilesFromDir("$outputDir/genotyping" , includeDir: false , ignore: ['**/*.{tbi,vcf.gz}'] , ignoreFile: null , include: ['**/*'] ) + def stable_name_genotyping = getAllFilesFromDir("$outputDir/genotyping" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.tbi'] ) + // We need to collect the vcfs separately to run more specific md5sum checks on the header (contnts are unstable due to same reasons as BAMs, explained above). + def genotyping_vcfs = getAllFilesFromDir("$outputDir/genotyping" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.vcf.gz'] ) + + // MultiQC + def stable_name_multiqc = getAllFilesFromDir("$outputDir/multiqc" , includeDir: false , ignore: null , ignoreFile: null , include: ['*', '**/*'] ) + + /////////////////////// + // DEFINE ASSERTIONS // + /////////////////////// + + assertAll( + { assert workflow.success }, + // This checks that there are no missing or additional output files. + // Also a good starting point to look at all the files in the output folder than need to be checked in subsequent sections. + { assert snapshot( stable_name_all*.name ).match("all_files") }, + + // Checking changes to contents of each section + // NOTE: Keep the order of the sections in the alphanumeric order of the output directories. + // Each section should first check stable_content, stable_name second (if applicable). + { assert snapshot( stable_content_deduplication , stable_name_deduplication*.name ).match("deduplication") }, + { assert snapshot( stable_content_final_bams , stable_name_final_bams*.name ).match("final_bams") }, + // NOTE: The snapshot section for mapping cannot be named 'mapping'. See https://github.com/askimed/nf-test/issues/279 + { assert snapshot( stable_content_mapping , stable_name_mapping*.name ).match("mapping_output") }, + { assert snapshot( stable_content_genotyping , stable_name_genotyping*.name ).match("genotyping") }, + // Additional checks on the genotyping VCFs for content. Specifically the md5sums of the header FORMAT, INFO, FILTER, CONTIG lines, and sample names + { assert snapshot( + genotyping_vcfs.collect { + file -> + def vcf_head = path(file.toString()).vcf.header + // The header contains lines in the "OTHER" category, which contain a timestamp and/or work dir paths, so we need to filter those out, then calculate md5sums. + def header_md5 = [ + vcf_head.getFormatHeaderLines().toString(), + vcf_head.getInfoHeaderLines().toString(), + vcf_head.getFilterLines().toString(), + vcf_head.getIDHeaderLines().toString(), + vcf_head.getGenotypeSamples().toString(), + vcf_head.getContigLines().toString(), + ].join(' ').md5() + file.getName() + ":header_md5," + header_md5 + } + ).match("genotyping_vcfs")}, + { assert snapshot( stable_name_multiqc*.name ).match("multiqc") }, + + // Versions + { assert new File("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml").exists() }, + + ) + } + } +} diff --git a/tests/test_modern.nf.test.snap b/tests/test_modern.nf.test.snap new file mode 100644 index 000000000..17e924d0c --- /dev/null +++ b/tests/test_modern.nf.test.snap @@ -0,0 +1,383 @@ +{ + "all_files": { + "content": [ + [ + "3pGtoA_freq.txt", + "3p_freq_misincorporations.txt", + "5pCtoT_freq.txt", + "5p_freq_misincorporations.txt", + "DNA_comp_genome.txt", + "DNA_composition_sample.txt", + "DamagePlot.pdf", + "DamagePlot_five_prime.svg", + "DamagePlot_three_prime.svg", + "DamageProfiler.log", + "Length_plot.pdf", + "Length_plot_combined_data.svg", + "Length_plot_forward_reverse_separated.svg", + "dmgprof.json", + "editDistance.txt", + "edit_distance.pdf", + "edit_distance.svg", + "lgdistribution.txt", + "misincorporation.txt", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_percent_on_target_mqc.json", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause.c_curve.txt", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause.command.log", + "agogo.css", + "ajax-loader.gif", + "basic.css", + "bgfooter.png", + "bgtop.png", + "comment-bright.png", + "comment-close.png", + "comment.png", + "doctools.js", + "down-pressed.png", + "down.png", + "file.png", + "jquery.js", + "minus.png", + "plus.png", + "pygments.css", + "qualimap_logo_small.png", + "report.css", + "searchtools.js", + "underscore.js", + "up-pressed.png", + "up.png", + "websupport.js", + "genome_results.txt", + "genome_coverage_0to50_histogram.png", + "genome_coverage_across_reference.png", + "genome_coverage_histogram.png", + "genome_coverage_quotes.png", + "genome_gc_content_per_window.png", + "genome_homopolymer_indels.png", + "genome_mapping_quality_across_reference.png", + "genome_mapping_quality_histogram.png", + "genome_reads_content_per_read_position.png", + "genome_uniq_read_starts_histogram.png", + "qualimapReport.html", + "coverage_across_reference.txt", + "coverage_histogram.txt", + "duplication_rate_histogram.txt", + "genome_fraction_coverage.txt", + "homopolymer_indels.txt", + "mapped_reads_gc-content_distribution.txt", + "mapped_reads_nucleotide_content.txt", + "mapping_quality_across_reference.txt", + "mapping_quality_histogram.txt", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_dedupped.bam", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_dedupped.bam.bai", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_dedupped.flagstat", + "JK2782_Mammoth_MT_Krause.bam", + "JK2782_Mammoth_MT_Krause.bam.bai", + "JK2782_Mammoth_MT_Krause.flagstat", + "JK2782_Mammoth_MT_Krause.bcftools_stats.txt", + "JK2782_Mammoth_MT_Krause.vcf.gz", + "JK2782_Mammoth_MT_Krause.vcf.gz.tbi", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.flagstat", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.bam", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.bam.bai", + "BETA-multiqc.parquet", + "bcftools-stats-subtypes.txt", + "bcftools_stats_indel-lengths.txt", + "bcftools_stats_variant_depths.txt", + "bcftools_stats_vqc_Count_Indels.txt", + "bcftools_stats_vqc_Count_SNP.txt", + "bcftools_stats_vqc_Count_Transitions.txt", + "bcftools_stats_vqc_Count_Transversions.txt", + "fiveprime_misinc_plot.txt", + "length-distribution-Forward.txt", + "length-distribution-Reverse.txt", + "mapdamage-fiveprime_misinc_plot.txt", + "mapdamage-length-distribution-Forward.txt", + "mapdamage-length-distribution-Reverse.txt", + "mapdamage-threeprime_misinc_plot.txt", + "multiqc.log", + "multiqc_bcftools_stats.txt", + "multiqc_citations.txt", + "multiqc_damageprofiler_metrics.txt", + "multiqc_data.json", + "multiqc_general_stats.txt", + "multiqc_qualimap_bamqc_genome_results.txt", + "multiqc_samtools_flagstat.txt", + "multiqc_software_versions.txt", + "multiqc_sources.txt", + "preseq.txt", + "preseq_complexity_plot_molecules.txt", + "qualimap_coverage_histogram.txt", + "qualimap_gc_content.txt", + "qualimap_genome_fraction.txt", + "samtools-flagstat-pct-table.txt", + "samtools-flagstat-table.txt", + "threeprime_misinc_plot.txt", + "bcftools-stats-subtypes-cnt.pdf", + "bcftools-stats-subtypes-pct.pdf", + "bcftools_stats_indel-lengths-cnt.pdf", + "bcftools_stats_indel-lengths-log.pdf", + "bcftools_stats_variant_depths.pdf", + "bcftools_stats_vqc_Count_Indels.pdf", + "bcftools_stats_vqc_Count_SNP.pdf", + "bcftools_stats_vqc_Count_Transitions.pdf", + "bcftools_stats_vqc_Count_Transversions.pdf", + "fiveprime_misinc_plot.pdf", + "length-distribution-Forward.pdf", + "length-distribution-Reverse.pdf", + "mapdamage-fiveprime_misinc_plot.pdf", + "mapdamage-length-distribution-Forward.pdf", + "mapdamage-length-distribution-Reverse.pdf", + "mapdamage-threeprime_misinc_plot.pdf", + "preseq_complexity_plot_molecules.pdf", + "qualimap_coverage_histogram.pdf", + "qualimap_gc_content.pdf", + "qualimap_genome_fraction.pdf", + "samtools-flagstat-pct-table.pdf", + "samtools-flagstat-table.pdf", + "threeprime_misinc_plot.pdf", + "bcftools-stats-subtypes-cnt.png", + "bcftools-stats-subtypes-pct.png", + "bcftools_stats_indel-lengths-cnt.png", + "bcftools_stats_indel-lengths-log.png", + "bcftools_stats_variant_depths.png", + "bcftools_stats_vqc_Count_Indels.png", + "bcftools_stats_vqc_Count_SNP.png", + "bcftools_stats_vqc_Count_Transitions.png", + "bcftools_stats_vqc_Count_Transversions.png", + "fiveprime_misinc_plot.png", + "length-distribution-Forward.png", + "length-distribution-Reverse.png", + "mapdamage-fiveprime_misinc_plot.png", + "mapdamage-length-distribution-Forward.png", + "mapdamage-length-distribution-Reverse.png", + "mapdamage-threeprime_misinc_plot.png", + "preseq_complexity_plot_molecules.png", + "qualimap_coverage_histogram.png", + "qualimap_gc_content.png", + "qualimap_genome_fraction.png", + "samtools-flagstat-pct-table.png", + "samtools-flagstat-table.png", + "threeprime_misinc_plot.png", + "bcftools-stats-subtypes-cnt.svg", + "bcftools-stats-subtypes-pct.svg", + "bcftools_stats_indel-lengths-cnt.svg", + "bcftools_stats_indel-lengths-log.svg", + "bcftools_stats_variant_depths.svg", + "bcftools_stats_vqc_Count_Indels.svg", + "bcftools_stats_vqc_Count_SNP.svg", + "bcftools_stats_vqc_Count_Transitions.svg", + "bcftools_stats_vqc_Count_Transversions.svg", + "fiveprime_misinc_plot.svg", + "length-distribution-Forward.svg", + "length-distribution-Reverse.svg", + "mapdamage-fiveprime_misinc_plot.svg", + "mapdamage-length-distribution-Forward.svg", + "mapdamage-length-distribution-Reverse.svg", + "mapdamage-threeprime_misinc_plot.svg", + "preseq_complexity_plot_molecules.svg", + "qualimap_coverage_histogram.svg", + "qualimap_gc_content.svg", + "qualimap_genome_fraction.svg", + "samtools-flagstat-pct-table.svg", + "samtools-flagstat-table.svg", + "threeprime_misinc_plot.svg", + "multiqc_report.html" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:18.845531036" + }, + "genotyping_vcfs": { + "content": [ + [ + "JK2782_Mammoth_MT_Krause.vcf.gz:header_md5,ba43230556423d05427e4b1160590d82" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:19.142264726" + }, + "genotyping": { + "content": [ + [ + "JK2782_Mammoth_MT_Krause.bcftools_stats.txt:md5,d8d225da168bc52a01957fc4f38c8dd6" + ], + [ + "JK2782_Mammoth_MT_Krause.vcf.gz.tbi" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:18.975115114" + }, + "final_bams": { + "content": [ + [ + "JK2782_Mammoth_MT_Krause.flagstat:md5,877955aa6f76d590f4af61ec08359630" + ], + [ + "JK2782_Mammoth_MT_Krause.bam", + "JK2782_Mammoth_MT_Krause.bam.bai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:18.921859899" + }, + "deduplication": { + "content": [ + [ + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_dedupped.flagstat:md5,877955aa6f76d590f4af61ec08359630" + ], + [ + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_dedupped.bam", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_dedupped.bam.bai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:18.903642256" + }, + "multiqc": { + "content": [ + [ + "BETA-multiqc.parquet", + "bcftools-stats-subtypes.txt", + "bcftools_stats_indel-lengths.txt", + "bcftools_stats_variant_depths.txt", + "bcftools_stats_vqc_Count_Indels.txt", + "bcftools_stats_vqc_Count_SNP.txt", + "bcftools_stats_vqc_Count_Transitions.txt", + "bcftools_stats_vqc_Count_Transversions.txt", + "fiveprime_misinc_plot.txt", + "length-distribution-Forward.txt", + "length-distribution-Reverse.txt", + "mapdamage-fiveprime_misinc_plot.txt", + "mapdamage-length-distribution-Forward.txt", + "mapdamage-length-distribution-Reverse.txt", + "mapdamage-threeprime_misinc_plot.txt", + "multiqc.log", + "multiqc_bcftools_stats.txt", + "multiqc_citations.txt", + "multiqc_damageprofiler_metrics.txt", + "multiqc_data.json", + "multiqc_general_stats.txt", + "multiqc_qualimap_bamqc_genome_results.txt", + "multiqc_samtools_flagstat.txt", + "multiqc_software_versions.txt", + "multiqc_sources.txt", + "preseq.txt", + "preseq_complexity_plot_molecules.txt", + "qualimap_coverage_histogram.txt", + "qualimap_gc_content.txt", + "qualimap_genome_fraction.txt", + "samtools-flagstat-pct-table.txt", + "samtools-flagstat-table.txt", + "threeprime_misinc_plot.txt", + "bcftools-stats-subtypes-cnt.pdf", + "bcftools-stats-subtypes-pct.pdf", + "bcftools_stats_indel-lengths-cnt.pdf", + "bcftools_stats_indel-lengths-log.pdf", + "bcftools_stats_variant_depths.pdf", + "bcftools_stats_vqc_Count_Indels.pdf", + "bcftools_stats_vqc_Count_SNP.pdf", + "bcftools_stats_vqc_Count_Transitions.pdf", + "bcftools_stats_vqc_Count_Transversions.pdf", + "fiveprime_misinc_plot.pdf", + "length-distribution-Forward.pdf", + "length-distribution-Reverse.pdf", + "mapdamage-fiveprime_misinc_plot.pdf", + "mapdamage-length-distribution-Forward.pdf", + "mapdamage-length-distribution-Reverse.pdf", + "mapdamage-threeprime_misinc_plot.pdf", + "preseq_complexity_plot_molecules.pdf", + "qualimap_coverage_histogram.pdf", + "qualimap_gc_content.pdf", + "qualimap_genome_fraction.pdf", + "samtools-flagstat-pct-table.pdf", + "samtools-flagstat-table.pdf", + "threeprime_misinc_plot.pdf", + "bcftools-stats-subtypes-cnt.png", + "bcftools-stats-subtypes-pct.png", + "bcftools_stats_indel-lengths-cnt.png", + "bcftools_stats_indel-lengths-log.png", + "bcftools_stats_variant_depths.png", + "bcftools_stats_vqc_Count_Indels.png", + "bcftools_stats_vqc_Count_SNP.png", + "bcftools_stats_vqc_Count_Transitions.png", + "bcftools_stats_vqc_Count_Transversions.png", + "fiveprime_misinc_plot.png", + "length-distribution-Forward.png", + "length-distribution-Reverse.png", + "mapdamage-fiveprime_misinc_plot.png", + "mapdamage-length-distribution-Forward.png", + "mapdamage-length-distribution-Reverse.png", + "mapdamage-threeprime_misinc_plot.png", + "preseq_complexity_plot_molecules.png", + "qualimap_coverage_histogram.png", + "qualimap_gc_content.png", + "qualimap_genome_fraction.png", + "samtools-flagstat-pct-table.png", + "samtools-flagstat-table.png", + "threeprime_misinc_plot.png", + "bcftools-stats-subtypes-cnt.svg", + "bcftools-stats-subtypes-pct.svg", + "bcftools_stats_indel-lengths-cnt.svg", + "bcftools_stats_indel-lengths-log.svg", + "bcftools_stats_variant_depths.svg", + "bcftools_stats_vqc_Count_Indels.svg", + "bcftools_stats_vqc_Count_SNP.svg", + "bcftools_stats_vqc_Count_Transitions.svg", + "bcftools_stats_vqc_Count_Transversions.svg", + "fiveprime_misinc_plot.svg", + "length-distribution-Forward.svg", + "length-distribution-Reverse.svg", + "mapdamage-fiveprime_misinc_plot.svg", + "mapdamage-length-distribution-Forward.svg", + "mapdamage-length-distribution-Reverse.svg", + "mapdamage-threeprime_misinc_plot.svg", + "preseq_complexity_plot_molecules.svg", + "qualimap_coverage_histogram.svg", + "qualimap_gc_content.svg", + "qualimap_genome_fraction.svg", + "samtools-flagstat-pct-table.svg", + "samtools-flagstat-table.svg", + "threeprime_misinc_plot.svg", + "multiqc_report.html" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:19.164190166" + }, + "mapping_output": { + "content": [ + [ + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.flagstat:md5,9a10991f5670a52975a622a8b056e2bc" + ], + [ + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.bam", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.bam.bai" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-10-24T09:31:18.940549002" + } +} \ No newline at end of file From 9e6805c43a3bbe4ab50e026530efdbb2b682a1a4 Mon Sep 17 00:00:00 2001 From: Thiseas Christos Lamnidis Date: Mon, 27 Oct 2025 11:19:25 +0100 Subject: [PATCH 3/7] fix linting --- ro-crate-metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 314c30045..d447e9f65 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "InProgress", "datePublished": "2025-10-16T13:38:29+00:00", - "description": "

\n \n \n \"nf-core/eager\"\n \n

\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-core/eager)\n[![GitHub Actions CI Status](https://github.com/nf-core/eager/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/eager/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/eager/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.4.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/eager)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23eager-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/eager)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/eager** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/eager \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/eager/usage) and the [parameter documentation](https://nf-co.re/eager/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/eager/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/eager/output).\n\n## Credits\n\nnf-core/eager was originally written by The nf-core/eager community.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#eager` channel](https://nfcore.slack.com/channels/eager) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "description": "

\n \n \n \"nf-core/eager\"\n \n

\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-core/eager)\n[![GitHub Actions CI Status](https://github.com/nf-core/eager/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/eager/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/eager/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/eager/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1465061-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1465061)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.4.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/eager)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23eager-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/eager)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n![HiRSE Code Promo Badge](https://img.shields.io/badge/Promo-8db427?label=HiRSE&labelColor=005aa0&link=https%3A%2F%2Fgo.fzj.de%2FCodePromo)\n\n## Introduction\n\n**nf-core/eager** is a scalable and reproducible bioinformatics best-practise processing pipeline for genomic NGS sequencing data, with a focus on ancient DNA (aDNA) data. It is ideal for the (palaeo)genomic analysis of humans, animals, plants, microbes and even microbiomes.\n\n## Pipeline summary\n\n\n\n\n- (Optionally) create reference genome indices for mapping (`bwa`, `samtools`, and `picard`)\n- Sequencing quality control (`FastQC`, `Falco`)\n- Sequencing adapter removal, paired-end data merging (`AdapterRemoval`)\n- Read mapping to reference using (`bwa aln`, `bwa mem`, `CircularMapper`, `bowtie2`, or `mapAD`)\n- Post-mapping processing, statistics and conversion to bam (`samtools`, and `preseq`)\n- Ancient DNA C-to-T damage pattern visualisation (`DamageProfiler`)\n- PCR duplicate removal (`DeDup` or `MarkDuplicates`)\n- Post-mapping statistics and BAM quality control (`Qualimap`)\n- Library Complexity Estimation (`preseq`)\n- Overall pipeline statistics summaries (`MultiQC`)\n\n### Additional Steps\n\nAdditional functionality contained by the pipeline currently includes:\n\n#### Input\n\n- Automatic merging of complex sequencing setups (e.g. multiple lanes, sequencing configurations, library types)\n\n#### Preprocessing\n\n- Illumina two-coloured sequencer poly-G tail removal (`fastp`)\n- Post-AdapterRemoval trimming of FASTQ files prior mapping (`fastp`)\n- Automatic conversion of unmapped reads to FASTQ (`samtools`)\n- Host DNA (mapped reads) stripping from input FASTQ files (for sensitive samples)\n\n#### aDNA Damage manipulation\n\n- Damage removal/clipping for UDG+/UDG-half treatment protocols (`BamUtil`)\n- Damaged reads extraction and assessment (`PMDTools`)\n- Nuclear DNA contamination estimation of human samples (`angsd`)\n\n#### Genotyping\n\n- Creation of VCF genotyping files (`GATK UnifiedGenotyper`, `GATK HaplotypeCaller` and `FreeBayes`)\n- Creation of EIGENSTRAT genotyping files (`pileupCaller`)\n- Creation of Genotype Likelihood files (`angsd`)\n- Consensus sequence FASTA creation (`VCF2Genome`)\n- SNP Table generation (`MultiVCFAnalyzer`)\n\n#### Biological Information\n\n- Mitochondrial to Nuclear read ratio calculation (`MtNucRatioCalculator`)\n- Statistical sex determination of human individuals (`Sex.DetERRmine`)\n\n#### Metagenomic Screening\n\n- Low-sequenced complexity filtering (`BBduk` or `PRINSEQ++`)\n- Taxonomic binner with alignment (`MALT` or `MetaPhlAn 4`)\n- Taxonomic binner without alignment (`Kraken2`,`KrakenUniq`)\n- aDNA characteristic screening of taxonomically binned data from MALT (`MaltExtract`)\n\n#### Functionality Overview\n\nA graphical overview of suggested routes through the pipeline depending on context can be seen below.\n\n

\n \"nf-core/eager\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n`samplesheet.tsv`:\n\n```csv\nample_id\tlibrary_id\tlane\tcolour_chemistry\tpairment\tstrandedness\tdamage_treatment\tr1\tr2\tbam\tbam_reference_id\nsample1\tsample1_a\t1\t4\tpaired\tdouble\tnone\t///sample1_a_l1_r1.fq.gz ///sample1_a_l1_r2.fq.gz\tNA\tNA\nsample2\tsample2_a\t2\t2\tsingle\tdouble\tfull\t///sample2_a_l1_r1.fq.gz\tNA\tNA\tNA\nsample3\tsample3_a\t8\t4\tsingle\tdouble\thalf\tNA\tNA\t///sample31_a.bam\tMammoth_MT_Krause\n```\n\nEach row represents a fastq file (single-end), pair of fastq files (paired end), and/or a bam file.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/eager \\\n -profile \\\n --input samplesheet.csv \\\n --fasta '.fasta' \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/eager/usage) and the [parameter documentation](https://nf-co.re/eager/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/eager/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/eager/output).\n\n## Credits\n\nThis pipeline was established by Alexander Peltzer ([apeltzer](https://github.com/apeltzer)) and [James A. Fellows Yates](https://github.com/jfy133). Version two had major contributions from [Stephen Clayton](https://github.com/sc13-bioinf), [Thiseas C. Lamnidis](https://github.com/TCLamnidis), [Maxime Borry](https://github.com/maxibor), [Zandra Fagern\u00e4s](https://github.com/ZandraFagernas), [Aida Andrades Valtue\u00f1a](https://github.com/aidaanva) and [Maxime Garcia](https://github.com/MaxUlysse) and the nf-core community.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [Alex H\u00fcbner](https://github.com/alexhbnr)\n- [Alexandre Gilardet](https://github.com/alexandregilardet)\n- Arielle Munters\n- [\u00c5shild V\u00e5gene](https://github.com/ashildv)\n- [Charles Plessy](https://github.com/charles-plessy)\n- [Elina Salmela](https://github.com/esalmela)\n- [Fabian Lehmann](https://github.com/Lehmann-Fabian)\n- [He Yu](https://github.com/paulayu)\n- [Hester van Schalkwyk](https://github.com/hesterjvs)\n- [Ian Light-M\u00e1ka](https://github.com/ilight1542)\n- [Ido Bar](https://github.com/IdoBar)\n- [Irina Velsko](https://github.com/ivelsko)\n- [I\u015f\u0131n Alt\u0131nkaya](https://github.com/isinaltinkaya)\n- [Johan Nylander](https://github.com/nylander)\n- [Jonas Niemann](https://github.com/NiemannJ)\n- [Katerine Eaton](https://github.com/ktmeaton)\n- [Kathrin N\u00e4gele](https://github.com/KathrinNaegele)\n- [Kevin Lord](https://github.com/lordkev)\n- [Luc Venturini](https://github.com/lucventurini)\n- [Mahesh Binzer-Panchal](https://github.com/mahesh-panchal)\n- [Marcel Keller](https://github.com/marcel-keller)\n- [Megan Michel](https://github.com/meganemichel)\n- [Merlin Szymanski](https://github.com/merszym)\n- [Pierre Lindenbaum](https://github.com/lindenb)\n- [Pontus Skoglund](https://github.com/pontussk)\n- [Raphael Eisenhofer](https://github.com/EisenRa)\n- [Roberta Davidson](https://github.com/roberta-davidson)\n- [Rodrigo Barquera](https://github.com/RodrigoBarquera)\n- [Selina Carlhoff](https://github.com/scarlhoff)\n- [Torsten G\u00fcnter](https://bitbucket.org/tguenther)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#eager` channel](https://nfcore.slack.com/channels/eager) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/eager for your analysis, please cite it using the following doi:\n\n> Fellows Yates JA, Lamnidis TC, Borry M, Valtue\u00f1a Andrades A, Fagern\u00e4s Z, Clayton S, Garcia MU, Neukamm J, Peltzer A. 2021. Reproducible, portable, and efficient ancient genome reconstruction with nf-core/eager. PeerJ 9:e10947. DOI: [10.7717/peerj.10947](https://doi.org/10.7717/peerj.10947).\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" From 6e1498ab8a60db01d2afd9e50bd780dd57f0f217 Mon Sep 17 00:00:00 2001 From: Thiseas Christos Lamnidis Date: Fri, 7 Nov 2025 10:36:33 +0100 Subject: [PATCH 4/7] tweak final assertion from template --- tests/default.nf.test | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/default.nf.test b/tests/default.nf.test index a557003fb..cdc091968 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -146,10 +146,6 @@ nextflow_pipeline { { assert snapshot( // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml"), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path ).match() }, ) From 251631650592af88c0aab3dfb2e0166f1589e749 Mon Sep 17 00:00:00 2001 From: Thiseas Christos Lamnidis Date: Fri, 7 Nov 2025 10:36:54 +0100 Subject: [PATCH 5/7] update versions assertion --- tests/test_humanpopgen.nf.test | 5 ++++- tests/test_microbial.nf.test | 5 ++++- tests/test_minimal.nf.test | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/test_humanpopgen.nf.test b/tests/test_humanpopgen.nf.test index ee89cfcb6..3d143b7c6 100644 --- a/tests/test_humanpopgen.nf.test +++ b/tests/test_humanpopgen.nf.test @@ -134,7 +134,10 @@ nextflow_pipeline { { assert snapshot( stable_name_multiqc*.name ).match("multiqc") }, // Versions - { assert new File("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml").exists() }, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml"), + ).match() }, ) } diff --git a/tests/test_microbial.nf.test b/tests/test_microbial.nf.test index 9fd4d1041..335844b3d 100644 --- a/tests/test_microbial.nf.test +++ b/tests/test_microbial.nf.test @@ -143,7 +143,10 @@ nextflow_pipeline { { assert snapshot( stable_name_multiqc*.name ).match("multiqc") }, // Versions - { assert new File("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml").exists() }, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml"), + ).match() }, ) } diff --git a/tests/test_minimal.nf.test b/tests/test_minimal.nf.test index 6c367eebc..cd2a84209 100644 --- a/tests/test_minimal.nf.test +++ b/tests/test_minimal.nf.test @@ -92,7 +92,10 @@ nextflow_pipeline { { assert snapshot( stable_name_multiqc*.name ).match("multiqc") }, // Versions - { assert new File("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml").exists() }, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_eager_software_mqc_versions.yml"), + ).match() }, ) } From c40bb9e87c1491f0afb7f806d264e50873c56099 Mon Sep 17 00:00:00 2001 From: Thiseas Christos Lamnidis Date: Fri, 7 Nov 2025 11:11:29 +0100 Subject: [PATCH 6/7] update snapshots --- tests/default.nf.test.snap | 147 ++++++++++++++++++++++-- tests/test_humanpopgen.nf.test.snap | 168 ++++++++++++++++++++++++++-- tests/test_microbial.nf.test.snap | 138 +++++++++++++++++++++-- tests/test_minimal.nf.test.snap | 65 +++++++++-- 4 files changed, 486 insertions(+), 32 deletions(-) diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 3c768eadc..2db8d9722 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -198,7 +198,6 @@ "JK2802_JK2802_AGAATAACCTACCA_Mammoth_MT_Krause.bowtie2out.txt", "JK2802_JK2802_AGAATAACCTACCA_Mammoth_MT_Krause_profile.txt", "metaphlan_taxpasta_table.tsv", - "BETA-multiqc.parquet", "ar_length_count_plot_All.txt", "ar_length_count_plot_Collapsed.txt", "ar_length_count_plot_Collapsed_Truncated.txt", @@ -228,11 +227,13 @@ "fiveprime_misinc_plot.txt", "length-distribution-Forward.txt", "length-distribution-Reverse.txt", + "llms-full.txt", "mapdamage-fiveprime_misinc_plot.txt", "mapdamage-length-distribution-Forward.txt", "mapdamage-length-distribution-Reverse.txt", "mapdamage-threeprime_misinc_plot.txt", "multiqc.log", + "multiqc.parquet", "multiqc_adapter_removal.txt", "multiqc_bcftools_stats.txt", "multiqc_citations.txt", @@ -415,10 +416,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-11T14:23:20.334595" + "timestamp": "2025-11-07T10:22:21.984388" }, "read_filtering": { "content": [ @@ -461,6 +462,135 @@ }, "timestamp": "2025-05-02T18:37:30.913859" }, + "Test `test` profile:": { + "content": [ + { + "ADAPTERREMOVAL_PAIRED": { + "adapterremoval": "2.3.2" + }, + "ADAPTERREMOVAL_SINGLE": { + "adapterremoval": "2.3.2" + }, + "BCFTOOLS_INDEX_UG": { + "bcftools": 1.18 + }, + "BCFTOOLS_STATS_GENOTYPING": { + "bcftools": 1.18 + }, + "BUILD_INTERVALS": { + "gawk": "5.1.0" + }, + "BWA_ALN": { + "bwa": "0.7.18-r1243-dirty" + }, + "BWA_INDEX": { + "bwa": "0.7.18-r1243-dirty" + }, + "DAMAGEPROFILER": { + "damageprofiler": 1.1 + }, + "ENDORSPY": { + "endorspy": 1.3 + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_PROCESSED": { + "fastqc": "0.12.1" + }, + "FILTER_BAM_FRAGMENT_LENGTH": { + "python": "3.9.15", + "pysam": "0.20.0" + }, + "GATK_INDELREALIGNER": { + "gatk": "3.5-0-g36282e4" + }, + "GATK_REALIGNERTARGETCREATOR": { + "gatk": "3.5-0-g36282e4" + }, + "GATK_UNIFIEDGENOTYPER": { + "gatk": "3.5-0-g36282e4" + }, + "METAPHLAN_METAPHLAN": { + "metaphlan": "4.0.6" + }, + "PICARD_CREATESEQUENCEDICTIONARY": { + "picard": "3.1.1" + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.1.1" + }, + "PRESEQ_CCURVE": { + "preseq": "3.1.1" + }, + "QUALIMAP_BAMQC_NOBED": { + "qualimap": 2.3 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.18 + }, + "SAMTOOLS_FASTQ_METAGENOMICS": { + "samtools": 1.18 + }, + "SAMTOOLS_FILTER_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_FILTERED": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_BAM_INPUT": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_LENGTH_FILTER_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW_BAM_FILTERING": { + "samtools": 1.18 + }, + "SEQKIT_SPLIT2": { + "seqkit": "2.1.0" + }, + "Workflow": { + "nf-core/eager": "v3.0.0dev" + } + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.8" + }, + "timestamp": "2025-11-07T10:31:40.88452" + }, "preprocessing": { "content": [ [ @@ -570,7 +700,6 @@ "multiqc": { "content": [ [ - "BETA-multiqc.parquet", "ar_length_count_plot_All.txt", "ar_length_count_plot_Collapsed.txt", "ar_length_count_plot_Collapsed_Truncated.txt", @@ -600,11 +729,13 @@ "fiveprime_misinc_plot.txt", "length-distribution-Forward.txt", "length-distribution-Reverse.txt", + "llms-full.txt", "mapdamage-fiveprime_misinc_plot.txt", "mapdamage-length-distribution-Forward.txt", "mapdamage-length-distribution-Reverse.txt", "mapdamage-threeprime_misinc_plot.txt", "multiqc.log", + "multiqc.parquet", "multiqc_adapter_removal.txt", "multiqc_bcftools_stats.txt", "multiqc_citations.txt", @@ -760,10 +891,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-11T14:23:20.798039" + "timestamp": "2025-11-07T10:22:22.307696" }, "mapping_output": { "content": [ diff --git a/tests/test_humanpopgen.nf.test.snap b/tests/test_humanpopgen.nf.test.snap index 5648bae62..f02de28eb 100644 --- a/tests/test_humanpopgen.nf.test.snap +++ b/tests/test_humanpopgen.nf.test.snap @@ -155,7 +155,6 @@ "JK2067_JK2067_hs37d5_chr21-MT.kraken2.report.txt", "JK2067_downsampled_JK2067_downsampled_hs37d5_chr21-MT.kraken2.report.txt", "kraken2_taxpasta_table.tsv", - "BETA-multiqc.parquet", "fastp-seq-content-gc-plot_Read_1_After_filtering.txt", "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", "fastp-seq-content-n-plot_Read_1_After_filtering.txt", @@ -176,7 +175,9 @@ "fastqc_sequence_length_distribution_plot.txt", "fastqc_top_overrepresented_sequences_table.txt", "kraken-top-n-plot.txt", + "llms-full.txt", "multiqc.log", + "multiqc.parquet", "multiqc_citations.txt", "multiqc_data.json", "multiqc_fastp.txt", @@ -322,10 +323,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-12T11:00:18.111975" + "timestamp": "2025-11-07T10:43:56.273034" }, "read_filtering": { "content": [ @@ -343,6 +344,156 @@ }, "timestamp": "2025-08-15T10:45:18.829647" }, + "Test `test_humanpopgen` profile:": { + "content": [ + { + "ANGSD_CONTAMINATION": { + "angsd": 0.939 + }, + "ANGSD_DOCOUNTS": { + "angsd": 0.939 + }, + "BAMUTIL_TRIMBAM": { + "bamutil": "1.0.15" + }, + "BOWTIE2_ALIGN": { + "bowtie2": "2.5.2", + "samtools": 1.18, + "pigz": 2.6 + }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.2" + }, + "BUILD_INTERVALS": { + "gawk": "5.1.0" + }, + "CALCULATE_MAPDAMAGE2": { + "mapdamage2": "2.2.1" + }, + "COLLECT_GENOTYPES": { + "collect_genotypes.py": "1.0.0" + }, + "EIGENSTRATDATABASETOOLS_EIGENSTRATSNPCOVERAGE": { + "eigenstratdatabasetools": "1.1.0)" + }, + "ENDORSPY": { + "endorspy": 1.3 + }, + "FASTP_SINGLE": { + "fastp": "0.23.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_PROCESSED": { + "fastqc": "0.12.1" + }, + "FILTER_BAM_FRAGMENT_LENGTH": { + "python": "3.9.15", + "pysam": "0.20.0" + }, + "GUNZIP_FASTA": { + "gunzip": 1.1 + }, + "KRAKEN2_KRAKEN2": { + "kraken2": "2.1.2", + "pigz": 2.6 + }, + "MTNUCRATIO": { + "mtnucratio": "0.7 Please provide the (coordinate) sorted input SAM File, as well as the MT identifier. No further parameters are necessary! Make sure that your input file has an appropriate SAM/BAM file header, or the SAMRecords will be set to '*'!" + }, + "PICARD_CREATESEQUENCEDICTIONARY": { + "picard": "3.1.1" + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.1.1" + }, + "PRESEQ_CCURVE": { + "preseq": "3.1.1" + }, + "PRINT_CONTAMINATION_ANGSD": { + "python": "3.8.3" + }, + "QUALIMAP_BAMQC_NOBED": { + "qualimap": 2.3 + }, + "SAMTOOLS_DEPTH_SEXDETERRMINE": { + "samtools": 1.17 + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.18 + }, + "SAMTOOLS_FASTQ_METAGENOMICS": { + "samtools": 1.18 + }, + "SAMTOOLS_FILTER_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_FILTERED": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_BT2": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_DAMAGE_TRIMMED": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_LENGTH_FILTER_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_MPILEUP_PILEUPCALLER": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW_BAM_FILTERING": { + "samtools": 1.18 + }, + "SEQUENCETOOLS_PILEUPCALLER": { + "sequencetools": "1.5.2" + }, + "SEXDETERRMINE": { + "sexdeterrmine": "1.1.2" + }, + "Workflow": { + "nf-core/eager": "v3.0.0dev" + } + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.8" + }, + "timestamp": "2025-11-07T10:43:56.555303" + }, "preprocessing": { "content": [ [ @@ -469,7 +620,6 @@ "multiqc": { "content": [ [ - "BETA-multiqc.parquet", "fastp-seq-content-gc-plot_Read_1_After_filtering.txt", "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", "fastp-seq-content-n-plot_Read_1_After_filtering.txt", @@ -490,7 +640,9 @@ "fastqc_sequence_length_distribution_plot.txt", "fastqc_top_overrepresented_sequences_table.txt", "kraken-top-n-plot.txt", + "llms-full.txt", "multiqc.log", + "multiqc.parquet", "multiqc_citations.txt", "multiqc_data.json", "multiqc_fastp.txt", @@ -618,10 +770,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-12T11:00:18.586234" + "timestamp": "2025-11-07T10:43:56.448287" }, "mapping_output": { "content": [ diff --git a/tests/test_microbial.nf.test.snap b/tests/test_microbial.nf.test.snap index d89eafc75..a756f2c85 100644 --- a/tests/test_microbial.nf.test.snap +++ b/tests/test_microbial.nf.test.snap @@ -145,7 +145,6 @@ "JK2782_JK2782_TGGCCGATCAACGA_Mammoth_MT_Krause_metagenomics_fastq_unmapped_other.krakenuniq.report.txt", "JK2782_JK2782_TGGCCGATCAACGA_hs37d5_chr21-MT_metagenomics_fastq_unmapped_other.krakenuniq.report.txt", "krakenuniq_taxpasta_table.tsv", - "BETA-multiqc.parquet", "bcftools-stats-subtypes.txt", "bcftools_stats_indel-lengths.txt", "bcftools_stats_variant_depths.txt", @@ -167,11 +166,13 @@ "fiveprime_misinc_plot.txt", "length-distribution-Forward.txt", "length-distribution-Reverse.txt", + "llms-full.txt", "mapdamage-fiveprime_misinc_plot.txt", "mapdamage-length-distribution-Forward.txt", "mapdamage-length-distribution-Reverse.txt", "mapdamage-threeprime_misinc_plot.txt", "multiqc.log", + "multiqc.parquet", "multiqc_bcftools_stats.txt", "multiqc_citations.txt", "multiqc_damageprofiler_metrics.txt", @@ -313,10 +314,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-16T13:00:10.310232" + "timestamp": "2025-11-07T11:08:46.462542" }, "read_filtering": { "content": [ @@ -444,7 +445,6 @@ "multiqc": { "content": [ [ - "BETA-multiqc.parquet", "bcftools-stats-subtypes.txt", "bcftools_stats_indel-lengths.txt", "bcftools_stats_variant_depths.txt", @@ -466,11 +466,13 @@ "fiveprime_misinc_plot.txt", "length-distribution-Forward.txt", "length-distribution-Reverse.txt", + "llms-full.txt", "mapdamage-fiveprime_misinc_plot.txt", "mapdamage-length-distribution-Forward.txt", "mapdamage-length-distribution-Reverse.txt", "mapdamage-threeprime_misinc_plot.txt", "multiqc.log", + "multiqc.parquet", "multiqc_bcftools_stats.txt", "multiqc_citations.txt", "multiqc_damageprofiler_metrics.txt", @@ -598,10 +600,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-16T13:00:10.794583" + "timestamp": "2025-11-07T11:08:46.930107" }, "mapping_output": { "content": [ @@ -622,6 +624,126 @@ }, "timestamp": "2025-06-20T11:36:35.419002" }, + "Test `test_microbial` profile:": { + "content": [ + { + "BCFTOOLS_INDEX_FREEBAYES": { + "bcftools": 1.18 + }, + "BCFTOOLS_STATS_GENOTYPING": { + "bcftools": 1.18 + }, + "BEDTOOLS_COVERAGE_DEPTH": { + "bedtools": "2.31.1)" + }, + "BUILD_INTERVALS": { + "gawk": "5.1.0" + }, + "BWA_ALN": { + "bwa": "0.7.18-r1243-dirty" + }, + "CIRCULARMAPPER_REALIGNSAMFILE": { + "CircularMapper": "1.93.5" + }, + "DAMAGEPROFILER": { + "damageprofiler": 1.1 + }, + "DEDUP": { + "dedup": "0.12.8" + }, + "ENDORSPY": { + "endorspy": 1.3 + }, + "FALCO": { + "falco": "1.2.1" + }, + "FALCO_PROCESSED": { + "falco": "1.2.1" + }, + "FASTP_PAIRED": { + "fastp": "0.23.4" + }, + "FILTER_BAM_FRAGMENT_LENGTH": { + "python": "3.9.15", + "pysam": "0.20.0" + }, + "FREEBAYES": { + "freebayes": "1.3.6" + }, + "KRAKENUNIQ_PRELOADEDKRAKENUNIQ": { + "krakenuniq": "1.0.4" + }, + "PRESEQ_CCURVE": { + "preseq": "3.1.1" + }, + "QUALIMAP_BAMQC_NOBED": { + "qualimap": 2.3 + }, + "QUALIMAP_BAMQC_WITHBED": { + "qualimap": 2.3 + }, + "SAMTOOLS_FASTQ_METAGENOMICS": { + "samtools": 1.18 + }, + "SAMTOOLS_FILTER_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_FILTERED": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_REALIGNED": { + "samtools": 1.18 + }, + "SAMTOOLS_LENGTH_FILTER_INDEX": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_DEDUPPED": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW_BAM_FILTERING": { + "samtools": 1.18 + }, + "SAMTOOLS_VIEW_GENOME": { + "samtools": 1.17 + }, + "Workflow": { + "nf-core/eager": "v3.0.0dev" + } + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.8" + }, + "timestamp": "2025-11-07T11:08:47.368306" + }, "authentication": { "content": [ [ diff --git a/tests/test_minimal.nf.test.snap b/tests/test_minimal.nf.test.snap index bcb16d445..44d9f79fc 100644 --- a/tests/test_minimal.nf.test.snap +++ b/tests/test_minimal.nf.test.snap @@ -20,7 +20,6 @@ "JK2802_JK2802_AGAATAACCTACCA_Mammoth_MT_Krause_sorted.bam.bai", "JK2782_JK2782_TGGCCGATCAACGA_Mammoth_MT_Krause_sorted.flagstat", "JK2802_JK2802_AGAATAACCTACCA_Mammoth_MT_Krause_sorted.flagstat", - "BETA-multiqc.parquet", "fastqc-status-check-heatmap.txt", "fastqc_adapter_content_plot.txt", "fastqc_per_base_n_content_plot.txt", @@ -31,7 +30,9 @@ "fastqc_sequence_counts_plot.txt", "fastqc_sequence_duplication_levels_plot.txt", "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", "multiqc.log", + "multiqc.parquet", "multiqc_citations.txt", "multiqc_data.json", "multiqc_fastqc.txt", @@ -90,10 +91,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-11T14:16:37.592397" + "timestamp": "2025-11-07T11:11:09.817502" }, "preprocessing": { "content": [ @@ -137,7 +138,6 @@ "multiqc": { "content": [ [ - "BETA-multiqc.parquet", "fastqc-status-check-heatmap.txt", "fastqc_adapter_content_plot.txt", "fastqc_per_base_n_content_plot.txt", @@ -148,7 +148,9 @@ "fastqc_sequence_counts_plot.txt", "fastqc_sequence_duplication_levels_plot.txt", "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", "multiqc.log", + "multiqc.parquet", "multiqc_citations.txt", "multiqc_data.json", "multiqc_fastqc.txt", @@ -201,10 +203,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-09-11T14:16:37.66672" + "timestamp": "2025-11-07T11:11:09.877865" }, "mapping_output": { "content": [ @@ -241,5 +243,52 @@ "nextflow": "24.10.6" }, "timestamp": "2025-05-23T10:36:48.717265" + }, + "Testing `test_minimal` profile:": { + "content": [ + { + "BWA_ALN": { + "bwa": "0.7.18-r1243-dirty" + }, + "BWA_INDEX": { + "bwa": "0.7.18-r1243-dirty" + }, + "ENDORSPY": { + "endorspy": 1.3 + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "PICARD_CREATESEQUENCEDICTIONARY": { + "picard": "3.1.1" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.18 + }, + "SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_BAM_INPUT": { + "samtools": 1.18 + }, + "SAMTOOLS_INDEX_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_MERGE_LIBRARIES": { + "samtools": 1.18 + }, + "SAMTOOLS_SORT_MERGED_LIBRARIES": { + "samtools": 1.18 + }, + "Workflow": { + "nf-core/eager": "v3.0.0dev" + } + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.8" + }, + "timestamp": "2025-11-07T11:11:09.956496" } } \ No newline at end of file From 7b04b15cd3c0b1f7764d2aa545dbf033d56c8057 Mon Sep 17 00:00:00 2001 From: Ian Light-Maka <86308592+ilight1542@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:17:09 +0000 Subject: [PATCH 7/7] Stable snapshot post nf-test update --- tests/test_modern.nf.test | 5 ++++ tests/test_modern.nf.test.snap | 45 +++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/tests/test_modern.nf.test b/tests/test_modern.nf.test index 16af0849f..72c4f1816 100644 --- a/tests/test_modern.nf.test +++ b/tests/test_modern.nf.test @@ -63,6 +63,10 @@ nextflow_pipeline { // Command legend: Result directory to index , includeDir: include dirs?, ignore: exclude patterns , ignoreFile: exclude pattern list , include: include patterns def stable_name_all = getAllFilesFromDir("$outputDir/" , includeDir: false , ignore: ['pipeline_info/*'] , ignoreFile: null , include: ['*', '**/*'] ) + // Authentication + def stable_content_authentication = getAllFilesFromDir("$outputDir/authentication" , includeDir: false , ignore: unstable_patterns_auth , ignoreFile: null , include: ['*', '**/*'] ) + def stable_name_authentication = getAllFilesFromDir("$outputDir/authentication" , includeDir: false , ignore: null , ignoreFile: null , include: unstable_patterns_auth) + // Deduplication def stable_content_deduplication = getAllFilesFromDir("$outputDir/deduplication" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.flagstat'] ) def stable_name_deduplication = getAllFilesFromDir("$outputDir/deduplication" , includeDir: false , ignore: null , ignoreFile: null , include: ['**/*.{bam,bai}'] ) @@ -97,6 +101,7 @@ nextflow_pipeline { // Checking changes to contents of each section // NOTE: Keep the order of the sections in the alphanumeric order of the output directories. // Each section should first check stable_content, stable_name second (if applicable). + { assert snapshot( stable_content_authentication ).match("authentication") }, { assert snapshot( stable_content_deduplication , stable_name_deduplication*.name ).match("deduplication") }, { assert snapshot( stable_content_final_bams , stable_name_final_bams*.name ).match("final_bams") }, // NOTE: The snapshot section for mapping cannot be named 'mapping'. See https://github.com/askimed/nf-test/issues/279 diff --git a/tests/test_modern.nf.test.snap b/tests/test_modern.nf.test.snap index 17e924d0c..954c57a97 100644 --- a/tests/test_modern.nf.test.snap +++ b/tests/test_modern.nf.test.snap @@ -80,7 +80,6 @@ "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.flagstat", "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.bam", "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_sorted.bam.bai", - "BETA-multiqc.parquet", "bcftools-stats-subtypes.txt", "bcftools_stats_indel-lengths.txt", "bcftools_stats_variant_depths.txt", @@ -91,11 +90,13 @@ "fiveprime_misinc_plot.txt", "length-distribution-Forward.txt", "length-distribution-Reverse.txt", + "llms-full.txt", "mapdamage-fiveprime_misinc_plot.txt", "mapdamage-length-distribution-Forward.txt", "mapdamage-length-distribution-Reverse.txt", "mapdamage-threeprime_misinc_plot.txt", "multiqc.log", + "multiqc.parquet", "multiqc_bcftools_stats.txt", "multiqc_citations.txt", "multiqc_damageprofiler_metrics.txt", @@ -189,7 +190,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-10-24T09:31:18.845531036" + "timestamp": "2025-11-14T09:32:18.690658462" }, "genotyping_vcfs": { "content": [ @@ -253,7 +254,6 @@ "multiqc": { "content": [ [ - "BETA-multiqc.parquet", "bcftools-stats-subtypes.txt", "bcftools_stats_indel-lengths.txt", "bcftools_stats_variant_depths.txt", @@ -264,11 +264,13 @@ "fiveprime_misinc_plot.txt", "length-distribution-Forward.txt", "length-distribution-Reverse.txt", + "llms-full.txt", "mapdamage-fiveprime_misinc_plot.txt", "mapdamage-length-distribution-Forward.txt", "mapdamage-length-distribution-Reverse.txt", "mapdamage-threeprime_misinc_plot.txt", "multiqc.log", + "multiqc.parquet", "multiqc_bcftools_stats.txt", "multiqc_citations.txt", "multiqc_damageprofiler_metrics.txt", @@ -362,7 +364,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-10-24T09:31:19.164190166" + "timestamp": "2025-11-14T09:32:19.045203027" }, "mapping_output": { "content": [ @@ -379,5 +381,40 @@ "nextflow": "25.04.6" }, "timestamp": "2025-10-24T09:31:18.940549002" + }, + "authentication": { + "content": [ + [ + "3pGtoA_freq.txt:md5,f66d3c680c5c93587f4a7edfb310c75f", + "5pCtoT_freq.txt:md5,db2d50666bd31a4295614ec65aaa1359", + "dmgprof.json:md5,3bf9e6252f48aba08627957f5c4834cf", + "editDistance.txt:md5,7c00cd7cc4bd87c2da4debaa2704a66a", + "lgdistribution.txt:md5,835cb5b6dec7fa901091f915e7ca51a2", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause_percent_on_target_mqc.json:md5,1ba4cc8117b76f89ba9415f2b800ef1f", + "JK2782_JK2782_TGGCCGATCAACGA_BAM_Mammoth_MT_Krause.c_curve.txt:md5,a303d107a83477f3b9535d771a1ca82a", + "agogo.css:md5,bd757b1a7ce6fdc0288ba148680f4583", + "ajax-loader.gif:md5,ae6667053ad118020b8e68ccf307b519", + "basic.css:md5,25b2823342c0604924a2870eeb4e7e94", + "doctools.js:md5,5ff571aa60e63f69c1890283e240ff8d", + "jquery.js:md5,10092eee563dec2dca82b77d2cf5a1ae", + "pygments.css:md5,d625a0adb949f181bd0d3f1432b0fa7f", + "report.css:md5,7a5f09eaf7c176f966f4e8854168b812", + "searchtools.js:md5,d550841adeedc8ed47c40ee607620937", + "underscore.js:md5,db5ba047a66617d4cd3e8c5099cc51db", + "websupport.js:md5,9e61e1e8a7433c56bd7e5a615affcf85", + "coverage_across_reference.txt:md5,f0a2dc6e523af57df603e403807139be", + "coverage_histogram.txt:md5,b8b99bcd4643edf2f09f8feb8c46e36d", + "duplication_rate_histogram.txt:md5,f342d718392629bd982d363e4d9ef27e", + "genome_fraction_coverage.txt:md5,271e60f18de911ebfa90b5be77bfa21d", + "homopolymer_indels.txt:md5,28817a010a023836fcf6aac4e1e3976f", + "mapping_quality_across_reference.txt:md5,b0670d4adfeeecb4825d7aedb0933145", + "mapping_quality_histogram.txt:md5,49a46418edd03774e110ae4010193e10" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-11-14T10:11:39.459311849" } } \ No newline at end of file