From 305dfca9ed9138daab6b34009b59729644f40636 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 09:32:54 +0200
Subject: [PATCH 1/7] Template update for nf-core/tools version 3.2.0
---
.editorconfig | 4 +
.github/CONTRIBUTING.md | 12 +-
.github/ISSUE_TEMPLATE/bug_report.yml | 1 -
.github/PULL_REQUEST_TEMPLATE.md | 4 +-
.github/workflows/awsfulltest.yml | 21 +-
.github/workflows/branch.yml | 18 +-
.github/workflows/ci.yml | 4 +-
.github/workflows/download_pipeline.yml | 59 +--
.github/workflows/fix-linting.yml | 4 +-
.github/workflows/linting.yml | 10 +-
.github/workflows/linting_comment.yml | 2 +-
.github/workflows/release-announcements.yml | 33 --
.../workflows/template_version_comment.yml | 2 +-
.gitpod.yml | 11 +-
.nf-core.yml | 8 +-
.pre-commit-config.yaml | 2 +-
.prettierignore | 1 +
CHANGELOG.md | 2 +-
LICENSE | 2 +-
README.md | 5 +-
assets/schema_input.json | 2 +-
conf/base.config | 2 +-
conf/modules.config | 1 +
conf/test.config | 4 +-
docs/usage.md | 32 +-
modules.json | 10 +-
modules/nf-core/fastqc/main.nf | 22 +-
modules/nf-core/fastqc/meta.yml | 1 +
modules/nf-core/fastqc/tests/tags.yml | 2 -
modules/nf-core/multiqc/environment.yml | 2 +-
modules/nf-core/multiqc/main.nf | 4 +-
.../nf-core/multiqc/tests/main.nf.test.snap | 24 +-
nextflow.config | 94 +++--
nextflow_schema.json | 8 +-
ro-crate-metadata.json | 335 ++++++++++++++++++
.../local/utils_nfcore_mag_pipeline/main.nf | 5 +-
.../nf-core/utils_nextflow_pipeline/main.nf | 2 +
.../tests/main.workflow.nf.test | 10 +-
.../nf-core/utils_nfcore_pipeline/main.nf | 89 ++---
.../tests/main.function.nf.test | 46 +--
.../tests/main.function.nf.test.snap | 30 --
.../utils_nfschema_plugin/tests/main.nf.test | 4 +-
workflows/mag.nf | 2 +-
43 files changed, 617 insertions(+), 319 deletions(-)
delete mode 100644 modules/nf-core/fastqc/tests/tags.yml
create mode 100644 ro-crate-metadata.json
diff --git a/.editorconfig b/.editorconfig
index 72dda289a..6d9b74cc0 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -31,3 +31,7 @@ indent_size = unset
# ignore python and markdown
[*.{py,md}]
indent_style = unset
+
+# ignore ro-crate metadata files
+[**/ro-crate-metadata.json]
+insert_final_newline = unset
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 67f02e934..d57d58c54 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,4 +1,4 @@
-# nf-core/mag: Contributing Guidelines
+# `nf-core/mag`: Contributing Guidelines
Hi there!
Many thanks for taking an interest in improving nf-core/mag.
@@ -55,9 +55,9 @@ These tests are run both with the latest available version of `Nextflow` and als
:warning: Only in the unlikely and regretful event of a release happening with a bug.
-- On your own fork, make a new branch `patch` based on `upstream/master`.
+- On your own fork, make a new branch `patch` based on `upstream/main` or `upstream/master`.
- Fix the bug, and bump version (X.Y.Z+1).
-- A PR should be made on `master` from patch to directly this particular bug.
+- Open a pull-request from `patch` to `main`/`master` with the changes.
## Getting help
@@ -65,13 +65,13 @@ For further information/help, please consult the [nf-core/mag documentation](htt
## Pipeline contribution conventions
-To make the nf-core/mag code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written.
+To make the `nf-core/mag` code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written.
### Adding a new step
If you wish to contribute a new step, please use the following coding standards:
-1. Define the corresponding input channel into your new process from the expected previous process channel
+1. Define the corresponding input channel into your new process from the expected previous process channel.
2. Write the process block (see below).
3. Define the output channel if needed (see below).
4. Add any new parameters to `nextflow.config` with a default (see below).
@@ -84,7 +84,7 @@ If you wish to contribute a new step, please use the following coding standards:
### Default values
-Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope.
+Parameters should be initialised / defined with default values within the `params` scope in `nextflow.config`.
Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 146d5516b..816733b0e 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -9,7 +9,6 @@ body:
- [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting)
- [nf-core/mag pipeline documentation](https://nf-co.re/mag/usage)
-
- type: textarea
id: description
attributes:
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index e44a93d11..1ffcdcafe 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -8,14 +8,14 @@ These are the most common things requested on pull requests (PRs).
Remember that PRs should be made against the dev branch, unless you're preparing a pipeline release.
-Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/mag/tree/master/.github/CONTRIBUTING.md)
+Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/mag/tree/main/.github/CONTRIBUTING.md)
-->
## PR checklist
- [ ] This comment contains a description of changes (with reason).
- [ ] If you've fixed a bug or added code that should be tested, add tests!
-- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/mag/tree/master/.github/CONTRIBUTING.md)
+- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/mag/tree/main/.github/CONTRIBUTING.md)
- [ ] If necessary, also make a PR on the nf-core/mag _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository.
- [ ] Make sure your code lints (`nf-core pipelines lint`).
- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `).
diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml
index bdeeb8b49..ed577c8e3 100644
--- a/.github/workflows/awsfulltest.yml
+++ b/.github/workflows/awsfulltest.yml
@@ -1,11 +1,12 @@
name: nf-core AWS full size tests
-# This workflow is triggered on PRs opened against the master branch.
+# This workflow is triggered on PRs opened against the main/master branch.
# It can be additionally triggered manually with GitHub actions workflow dispatch button.
# It runs the -profile 'test_full' on AWS batch
on:
pull_request:
branches:
+ - main
- master
workflow_dispatch:
pull_request_review:
@@ -18,18 +19,30 @@ jobs:
if: github.repository == 'nf-core/mag' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- - uses: octokit/[email protected]
+ - name: Get PR reviews
+ uses: octokit/[email protected]
+ if: github.event_name != 'workflow_dispatch'
id: check_approvals
+ continue-on-error: true
with:
- route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews
+ route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews?per_page=100
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - id: test_variables
+
+ - name: Check for approvals
+ if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
+ run: |
+ echo "No review approvals found. At least 2 approvals are required to run this action automatically."
+ exit 1
+
+ - name: Check for enough approvals (>=2)
+ id: test_variables
if: github.event_name != 'workflow_dispatch'
run: |
JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}'
CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length')
test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required
+
- name: Launch workflow via Seqera Platform
uses: seqeralabs/action-tower-launch@v2
# TODO nf-core: You can customise AWS full pipeline tests as required
diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml
index cdede3cc4..f5433c717 100644
--- a/.github/workflows/branch.yml
+++ b/.github/workflows/branch.yml
@@ -1,15 +1,17 @@
name: nf-core branch protection
-# This workflow is triggered on PRs to master branch on the repository
-# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev`
+# This workflow is triggered on PRs to `main`/`master` branch on the repository
+# It fails when someone tries to make a PR against the nf-core `main`/`master` branch instead of `dev`
on:
pull_request_target:
- branches: [master]
+ branches:
+ - main
+ - master
jobs:
test:
runs-on: ubuntu-latest
steps:
- # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches
+ # PRs to the nf-core repo main/master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches
- name: Check PRs
if: github.repository == 'nf-core/mag'
run: |
@@ -22,7 +24,7 @@ jobs:
uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2
with:
message: |
- ## This PR is against the `master` branch :x:
+ ## This PR is against the `${{github.event.pull_request.base.ref}}` branch :x:
* Do not close this PR
* Click _Edit_ and change the `base` to `dev`
@@ -32,9 +34,9 @@ jobs:
Hi @${{ github.event.pull_request.user.login }},
- It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch.
- The `master` branch on nf-core repositories should always contain code from the latest release.
- Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch.
+ It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) ${{github.event.pull_request.base.ref}} branch.
+ The ${{github.event.pull_request.base.ref}} branch on nf-core repositories should always contain code from the latest release.
+ Because of this, PRs to ${{github.event.pull_request.base.ref}} are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch.
You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page.
Note that even after this, the test will continue to show as failing until you push a new commit.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ccb0d1e5d..e2213e031 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -45,7 +45,9 @@ jobs:
profile: "singularity"
steps:
- name: Check out pipeline code
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
+ with:
+ fetch-depth: 0
- name: Set up Nextflow
uses: nf-core/setup-nextflow@v2
diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml
index 713dc3e73..ab06316ea 100644
--- a/.github/workflows/download_pipeline.yml
+++ b/.github/workflows/download_pipeline.yml
@@ -2,7 +2,7 @@ name: Test successful pipeline download with 'nf-core pipelines download'
# Run the workflow when:
# - dispatched manually
-# - when a PR is opened or reopened to master branch
+# - when a PR is opened or reopened to main/master branch
# - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev.
on:
workflow_dispatch:
@@ -17,17 +17,34 @@ on:
- edited
- synchronize
branches:
+ - main
- master
pull_request_target:
branches:
+ - main
- master
env:
NXF_ANSI_LOG: false
jobs:
+ configure:
+ runs-on: ubuntu-latest
+ outputs:
+ REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }}
+ REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }}
+ REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }}
+ steps:
+ - name: Get the repository name and current branch
+ id: get_repo_properties
+ run: |
+ echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT"
+ echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT"
+ echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT"
+
download:
runs-on: ubuntu-latest
+ needs: configure
steps:
- name: Install Nextflow
uses: nf-core/setup-nextflow@v2
@@ -35,7 +52,7 @@ jobs:
- name: Disk space cleanup
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
- - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
python-version: "3.12"
architecture: "x64"
@@ -50,12 +67,6 @@ jobs:
python -m pip install --upgrade pip
pip install git+https://github.com/nf-core/tools.git@dev
- - name: Get the repository name and current branch set as environment variable
- run: |
- echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV}
- echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV}
- echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV}
-
- name: Make a cache directory for the container images
run: |
mkdir -p ./singularity_container_images
@@ -64,24 +75,27 @@ jobs:
env:
NXF_SINGULARITY_CACHEDIR: ./singularity_container_images
run: |
- nf-core pipelines download ${{ env.REPO_LOWERCASE }} \
- --revision ${{ env.REPO_BRANCH }} \
- --outdir ./${{ env.REPOTITLE_LOWERCASE }} \
+ nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \
+ --revision ${{ needs.configure.outputs.REPO_BRANCH }} \
+ --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \
--compress "none" \
--container-system 'singularity' \
- --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \
+ --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \
--container-cache-utilisation 'amend' \
--download-configuration 'yes'
- name: Inspect download
- run: tree ./${{ env.REPOTITLE_LOWERCASE }}
+ run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}
+
+ - name: Inspect container images
+ run: tree ./singularity_container_images | tee ./container_initial
- name: Count the downloaded number of container images
id: count_initial
run: |
image_count=$(ls -1 ./singularity_container_images | wc -l | xargs)
echo "Initial container image count: $image_count"
- echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV}
+ echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT"
- name: Run the downloaded pipeline (stub)
id: stub_run_pipeline
@@ -89,30 +103,31 @@ jobs:
env:
NXF_SINGULARITY_CACHEDIR: ./singularity_container_images
NXF_SINGULARITY_HOME_MOUNT: true
- run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results
+ run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results
- name: Run the downloaded pipeline (stub run not supported)
id: run_pipeline
- if: ${{ job.steps.stub_run_pipeline.status == failure() }}
+ if: ${{ steps.stub_run_pipeline.outcome == 'failure' }}
env:
NXF_SINGULARITY_CACHEDIR: ./singularity_container_images
NXF_SINGULARITY_HOME_MOUNT: true
- run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results
+ run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results
- name: Count the downloaded number of container images
id: count_afterwards
run: |
image_count=$(ls -1 ./singularity_container_images | wc -l | xargs)
echo "Post-pipeline run container image count: $image_count"
- echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV}
+ echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT"
- name: Compare container image counts
run: |
- if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then
- initial_count=${{ env.IMAGE_COUNT_INITIAL }}
- final_count=${{ env.IMAGE_COUNT_AFTER }}
+ if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then
+ initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}
+ final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}
difference=$((final_count - initial_count))
echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!"
- tree ./singularity_container_images
+ tree ./singularity_container_images > ./container_afterwards
+ diff ./container_initial ./container_afterwards
exit 1
else
echo "The pipeline can be downloaded successfully!"
diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml
index 7e0781523..b43318eff 100644
--- a/.github/workflows/fix-linting.yml
+++ b/.github/workflows/fix-linting.yml
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
# Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
token: ${{ secrets.nf_core_bot_auth_token }}
@@ -32,7 +32,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
# Install and run pre-commit
- - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
python-version: "3.12"
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index a502573c5..dbd52d5a2 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -14,10 +14,10 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python 3.12
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
+ uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
python-version: "3.12"
@@ -31,12 +31,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out pipeline code
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Nextflow
uses: nf-core/setup-nextflow@v2
- - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
python-version: "3.12"
architecture: "x64"
@@ -74,7 +74,7 @@ jobs:
- name: Upload linting log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4
with:
name: linting-logs
path: |
diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml
index 42e519bfa..95b6b6af8 100644
--- a/.github/workflows/linting_comment.yml
+++ b/.github/workflows/linting_comment.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Download lint results
- uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6
+ uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8
with:
workflow: linting.yml
workflow_conclusion: completed
diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml
index c6ba35df4..76a9e67ed 100644
--- a/.github/workflows/release-announcements.yml
+++ b/.github/workflows/release-announcements.yml
@@ -27,39 +27,6 @@ jobs:
${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics
- send-tweet:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
- with:
- python-version: "3.10"
- - name: Install dependencies
- run: pip install tweepy==4.14.0
- - name: Send tweet
- shell: python
- run: |
- import os
- import tweepy
-
- client = tweepy.Client(
- access_token=os.getenv("TWITTER_ACCESS_TOKEN"),
- access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"),
- consumer_key=os.getenv("TWITTER_CONSUMER_KEY"),
- consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"),
- )
- tweet = os.getenv("TWEET")
- client.create_tweet(text=tweet)
- env:
- TWEET: |
- Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}!
-
- Please see the changelog: ${{ github.event.release.html_url }}
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
- TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
- TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
bsky-post:
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml
index e8aafe44d..537529bc1 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@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: ${{ github.event.pull_request.head.sha }}
diff --git a/.gitpod.yml b/.gitpod.yml
index 461186376..83599f633 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -6,12 +6,5 @@ tasks:
nextflow self-update
vscode:
- extensions: # based on nf-core.nf-core-extensionpack
- #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code
- - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files
- - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar
- - mechatroner.rainbow-csv # Highlight columns in csv files in different colors
- - nextflow.nextflow # Nextflow syntax highlighting
- - oderwat.indent-rainbow # Highlight indentation level
- - streetsidesoftware.code-spell-checker # Spelling checker for source code
- - charliermarsh.ruff # Code linter Ruff
+ extensions:
+ - nf-core.nf-core-extensionpack # https://github.com/nf-core/vscode-extensionpack
diff --git a/.nf-core.yml b/.nf-core.yml
index e6a21023e..b4baa3a06 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -1,4 +1,3 @@
-bump_version: null
lint:
files_unchanged:
- lib/NfcoreTemplate.groovy
@@ -6,8 +5,7 @@ lint:
- config_defaults:
- params.phix_reference
- params.lambda_reference
-nf_core_version: 3.0.2
-org_path: null
+nf_core_version: 3.2.0
repository_type: pipeline
template:
author: "Hadrien Gourl\xE9, Daniel Straub, Sabrina Krakau, James A. Fellows Yates,\
@@ -18,6 +16,4 @@ template:
name: mag
org: nf-core
outdir: .
- skip_features: null
- version: 3.1.1dev
-update: null
+ version: 3.4.1dev
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9e9f0e1c4..1dec86502 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -7,7 +7,7 @@ repos:
- [email protected]
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
- rev: "3.0.3"
+ rev: "3.1.2"
hooks:
- id: editorconfig-checker
alias: ec
diff --git a/.prettierignore b/.prettierignore
index 437d763d0..edd29f01e 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -10,3 +10,4 @@ testing/
testing*
*.pyc
bin/
+ro-crate-metadata.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6d4243a49..1e39c5b09 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## v3.1.1dev - [date]
+## v3.4.1dev - [date]
Initial release of nf-core/mag, created with the [nf-core](https://nf-co.re/) template.
diff --git a/LICENSE b/LICENSE
index d90d555ca..4502ee827 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Hadrien Gourlé, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry
+Copyright (c) The nf-core/mag team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index b1f300d1b..9a23fd99b 100644
--- a/README.md
+++ b/README.md
@@ -29,10 +29,7 @@
-
-
-1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))
-2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))
+1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))
## Usage
diff --git a/assets/schema_input.json b/assets/schema_input.json
index 9485ea886..9beebbc60 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://raw.githubusercontent.com/nf-core/mag/master/assets/schema_input.json",
+ "$id": "https://raw.githubusercontent.com/nf-core/mag/main/assets/schema_input.json",
"title": "nf-core/mag pipeline - params.input schema",
"description": "Schema for the file provided with params.input",
"type": "array",
diff --git a/conf/base.config b/conf/base.config
index de424b352..023ce6133 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -20,7 +20,7 @@ process {
maxErrors = '-1'
// Process-specific resource requirements
- // NOTE - Please try and re-use the labels below as much as possible.
+ // NOTE - Please try and reuse the labels below as much as possible.
// These labels are used and recognised by default in DSL2 files hosted on nf-core/modules.
// If possible, it would be nice to keep the same label naming convention when
// adding in your local modules too.
diff --git a/conf/modules.config b/conf/modules.config
index d266a387f..d203d2b6e 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -21,6 +21,7 @@ process {
withName: FASTQC {
ext.args = '--quiet'
}
+
withName: 'MULTIQC' {
ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' }
publishDir = [
diff --git a/conf/test.config b/conf/test.config
index 24ad5b386..d72802385 100644
--- a/conf/test.config
+++ b/conf/test.config
@@ -25,8 +25,6 @@ params {
// Input data
// TODO nf-core: Specify the paths to your test data on nf-core/test-datasets
// TODO nf-core: Give any required params for the test so that command line flags are not needed
- input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'
-
- // Genome references
+ input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'// Genome references
genome = 'R64-1-1'
}
diff --git a/docs/usage.md b/docs/usage.md
index bde394453..3d3de1c66 100644
--- a/docs/usage.md
+++ b/docs/usage.md
@@ -75,9 +75,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than
Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `.
-:::warning
-Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args).
-:::
+> [!WARNING]
+> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args).
The above pipeline run specified with a params file in yaml format:
@@ -106,23 +105,21 @@ nextflow pull nf-core/mag
### Reproducibility
-It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since.
+It is a good idea to specify the pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since.
First, go to the [nf-core/mag releases page](https://github.com/nf-core/mag/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag.
This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports.
-To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter.
+To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter.
-:::tip
-If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles.
-:::
+> [!TIP]
+> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles.
## Core Nextflow arguments
-:::note
-These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen).
-:::
+> [!NOTE]
+> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen)
### `-profile`
@@ -130,16 +127,15 @@ Use this parameter to choose a configuration profile. Profiles can give configur
Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below.
-:::info
-We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported.
-:::
+> [!IMPORTANT]
+> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported.
-The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation).
+The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation).
Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important!
They are loaded in sequence, so later profiles can overwrite earlier profiles.
-If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment.
+If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment.
- `test`
- A profile with a complete configuration for automated testing
@@ -175,13 +171,13 @@ Specify the path to a specific config file (this is a core Nextflow command). Se
### Resource requests
-Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped.
+Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the pipeline steps, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher resources request (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped.
To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website.
### Custom Containers
-In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date.
+In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date.
To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website.
diff --git a/modules.json b/modules.json
index 0e7baa5b6..5aecfecb0 100644
--- a/modules.json
+++ b/modules.json
@@ -7,12 +7,12 @@
"nf-core": {
"fastqc": {
"branch": "master",
- "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+ "git_sha": "08108058ea36a63f141c25c4e75f9f872a5b2296",
"installed_by": ["modules"]
},
"multiqc": {
"branch": "master",
- "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d",
+ "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad",
"installed_by": ["modules"]
}
}
@@ -21,17 +21,17 @@
"nf-core": {
"utils_nextflow_pipeline": {
"branch": "master",
- "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082",
+ "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b",
"installed_by": ["subworkflows"]
},
"utils_nfcore_pipeline": {
"branch": "master",
- "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba",
+ "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a",
"installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
- "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c",
+ "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e",
"installed_by": ["subworkflows"]
}
}
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index d8989f481..033f4154a 100644
--- a/modules/nf-core/fastqc/main.nf
+++ b/modules/nf-core/fastqc/main.nf
@@ -1,5 +1,5 @@
process FASTQC {
- tag "$meta.id"
+ tag "${meta.id}"
label 'process_medium'
conda "${moduleDir}/environment.yml"
@@ -19,30 +19,30 @@ process FASTQC {
task.ext.when == null || task.ext.when
script:
- def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
// Make list of old name and new name pairs to use for renaming in the bash while loop
def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] }
- def rename_to = old_new_pairs*.join(' ').join(' ')
- def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ')
+ def rename_to = old_new_pairs*.join(' ').join(' ')
+ def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ')
// The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory)
// https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222
// Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label
- def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus
+ def memory_in_mb = task.memory ? task.memory.toUnit('MB').toFloat() / task.cpus : null
// FastQC memory value allowed range (100 - 10000)
def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb)
"""
- printf "%s %s\\n" $rename_to | while read old_name new_name; do
+ printf "%s %s\\n" ${rename_to} | while read old_name new_name; do
[ -f "\${new_name}" ] || ln -s \$old_name \$new_name
done
fastqc \\
- $args \\
- --threads $task.cpus \\
- --memory $fastqc_memory \\
- $renamed_files
+ ${args} \\
+ --threads ${task.cpus} \\
+ --memory ${fastqc_memory} \\
+ ${renamed_files}
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml
index 4827da7af..2b2e62b8a 100644
--- a/modules/nf-core/fastqc/meta.yml
+++ b/modules/nf-core/fastqc/meta.yml
@@ -11,6 +11,7 @@ tools:
FastQC gives general quality metrics about your reads.
It provides information about the quality score distribution
across your reads, the per base sequence content (%A/C/G/T).
+
You get information about adapter contamination and other
overrepresented sequences.
homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml
deleted file mode 100644
index 7834294ba..000000000
--- a/modules/nf-core/fastqc/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-fastqc:
- - modules/nf-core/fastqc/**
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
index 6f5b867b7..a27122ce1 100644
--- a/modules/nf-core/multiqc/environment.yml
+++ b/modules/nf-core/multiqc/environment.yml
@@ -2,4 +2,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::multiqc=1.25.1
+ - bioconda::multiqc=1.27
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index cc0643e1d..58d9313c6 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.25.1--pyhdfd78af_0' :
- 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }"
+ 'https://depot.galaxyproject.org/singularity/multiqc:1.27--pyhdfd78af_0' :
+ 'biocontainers/multiqc:1.27--pyhdfd78af_0' }"
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 2fcbb5ff7..7b7c13220 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,41f391dcedce7f93ca188f3a3ffa0916"
+ "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
},
- "timestamp": "2024-10-02T17:51:46.317523"
+ "timestamp": "2025-01-27T09:29:57.631982377"
},
"multiqc_stub": {
"content": [
@@ -17,25 +17,25 @@
"multiqc_report.html",
"multiqc_data",
"multiqc_plots",
- "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
+ "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
},
- "timestamp": "2024-10-02T17:52:20.680978"
+ "timestamp": "2025-01-27T09:30:34.743726958"
},
"multiqc_versions_config": {
"content": [
[
- "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
+ "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
},
- "timestamp": "2024-10-02T17:52:09.185842"
+ "timestamp": "2025-01-27T09:30:21.44383553"
}
}
\ No newline at end of file
diff --git a/nextflow.config b/nextflow.config
index 7dd368304..8a48b38cc 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -38,8 +38,7 @@ params {
show_hidden = false
version = false
pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
-
- // 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
@@ -153,6 +152,13 @@ profiles {
executor.name = 'local'
executor.cpus = 4
executor.memory = 8.GB
+ process {
+ resourceLimits = [
+ memory: 8.GB,
+ cpus : 4,
+ time : 1.h
+ ]
+ }
}
test { includeConfig 'conf/test.config' }
test_full { includeConfig 'conf/test_full.config' }
@@ -189,57 +195,101 @@ env {
}
// Set bash options
-process.shell = """\
-bash
-
-set -e # Exit if a tool returns a non-zero status/exit code
-set -u # Treat unset variables and parameters as an error
-set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute
-set -C # No clobber - prevent output redirection from overwriting files.
-"""
+process.shell = [
+ "bash",
+ "-C", // No clobber - prevent output redirection from overwriting files.
+ "-e", // Exit if a tool returns a non-zero status/exit code
+ "-u", // Treat unset variables and parameters as an error
+ "-o", // Returns the status of the last command to exit..
+ "pipefail" // ..with a non-zero status or zero if all successfully execute
+]
// Disable process selector warnings by default. Use debug profile to enable warnings.
nextflow.enable.configProcessNamesValidation = false
-def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')
timeline {
enabled = true
- file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html"
+ file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html"
}
report {
enabled = true
- file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html"
+ file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html"
}
trace {
enabled = true
- file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt"
+ file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt"
}
dag {
enabled = true
- file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html"
+ file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html"
}
manifest {
name = 'nf-core/mag'
- author = """Hadrien Gourlé, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry"""
+ author = """Hadrien Gourlé, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead
+ contributors = [
+ // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0
+ [
+ name: 'Hadrien Gourlé',
+ affiliation: '',
+ email: '',
+ github: '',
+ contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: ''
+ ],
+ [
+ name: ' Daniel Straub',
+ affiliation: '',
+ email: '',
+ github: '',
+ contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: ''
+ ],
+ [
+ name: ' Sabrina Krakau',
+ affiliation: '',
+ email: '',
+ github: '',
+ contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: ''
+ ],
+ [
+ name: ' James A. Fellows Yates',
+ affiliation: '',
+ email: '',
+ github: '',
+ contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: ''
+ ],
+ [
+ name: ' Maxime Borry',
+ affiliation: '',
+ email: '',
+ github: '',
+ contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: ''
+ ],
+ ]
homePage = 'https://github.com/nf-core/mag'
description = """Assembly, binning and annotation of metagenomes"""
mainScript = 'main.nf'
+ defaultBranch = 'main'
nextflowVersion = '!>=24.04.2'
- version = '3.1.1dev'
+ version = '3.4.1dev'
doi = ''
}
// Nextflow plugins
plugins {
- id '[email protected]' // Validation of pipeline parameters and creation of an input channel from a sample sheet
+ id '[email protected]' // 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 $manifest.name -profile --input samplesheet.csv --outdir "
+ command = "nextflow run nf-core/mag -profile --input samplesheet.csv --outdir "
fullParameter = "help_full"
showHiddenParameter = "show_hidden"
beforeText = """
@@ -249,15 +299,15 @@ validation {
\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m
\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m
\033[0;32m`._,._,\'\033[0m
-\033[0;35m ${manifest.name} ${manifest.version}\033[0m
+\033[0;35m nf-core/mag ${manifest.version}\033[0m
-\033[2m----------------------------------------------------\033[0m-
"""
- afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""}
+ 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/${manifest.name}/blob/master/CITATIONS.md
+ https://github.com/nf-core/mag/blob/main/CITATIONS.md
"""
}
summary {
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 08beeafbb..9fd246c98 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://raw.githubusercontent.com/nf-core/mag/master/nextflow_schema.json",
+ "$id": "https://raw.githubusercontent.com/nf-core/mag/main/nextflow_schema.json",
"title": "nf-core/mag pipeline parameters",
"description": "Assembly, binning and annotation of metagenomes",
"type": "object",
@@ -218,6 +218,12 @@
"description": "Base URL or local path to location of pipeline test dataset files",
"default": "https://raw.githubusercontent.com/nf-core/test-datasets/",
"hidden": true
+ },
+ "trace_report_suffix": {
+ "type": "string",
+ "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
}
}
}
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
new file mode 100644
index 000000000..e57e836fb
--- /dev/null
+++ b/ro-crate-metadata.json
@@ -0,0 +1,335 @@
+{
+ "@context": [
+ "https://w3id.org/ro/crate/1.1/context",
+ {
+ "GithubService": "https://w3id.org/ro/terms/test#GithubService",
+ "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService",
+ "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine",
+ "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition",
+ "TestInstance": "https://w3id.org/ro/terms/test#TestInstance",
+ "TestService": "https://w3id.org/ro/terms/test#TestService",
+ "TestSuite": "https://w3id.org/ro/terms/test#TestSuite",
+ "TravisService": "https://w3id.org/ro/terms/test#TravisService",
+ "definition": "https://w3id.org/ro/terms/test#definition",
+ "engineVersion": "https://w3id.org/ro/terms/test#engineVersion",
+ "instance": "https://w3id.org/ro/terms/test#instance",
+ "resource": "https://w3id.org/ro/terms/test#resource",
+ "runsOn": "https://w3id.org/ro/terms/test#runsOn"
+ }
+ ],
+ "@graph": [
+ {
+ "@id": "./",
+ "@type": "Dataset",
+ "creativeWorkStatus": "InProgress",
+ "datePublished": "2025-05-12T07:32:51+00:00",
+ "description": "
\n \n \n \n \n
\n\n[](https://github.com/nf-core/mag/actions/workflows/ci.yml)\n[](https://github.com/nf-core/mag/actions/workflows/linting.yml)[](https://nf-co.re/mag/results)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/mag)\n\n[](https://nfcore.slack.com/channels/mag)[](https://twitter.com/nf_core)[](https://mstdn.science/@nf_core)[](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/mag** 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/mag \\\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/mag/usage) and the [parameter documentation](https://nf-co.re/mag/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/mag/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/mag/output).\n\n## Credits\n\nnf-core/mag was originally written by Hadrien Gourl\u00e9, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry.\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 `#mag` channel](https://nfcore.slack.com/channels/mag) (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"
+ },
+ {
+ "@id": "assets/"
+ },
+ {
+ "@id": "conf/"
+ },
+ {
+ "@id": "docs/"
+ },
+ {
+ "@id": "docs/images/"
+ },
+ {
+ "@id": "modules/"
+ },
+ {
+ "@id": "modules/nf-core/"
+ },
+ {
+ "@id": "workflows/"
+ },
+ {
+ "@id": "subworkflows/"
+ },
+ {
+ "@id": "nextflow.config"
+ },
+ {
+ "@id": "README.md"
+ },
+ {
+ "@id": "nextflow_schema.json"
+ },
+ {
+ "@id": "CHANGELOG.md"
+ },
+ {
+ "@id": "LICENSE"
+ },
+ {
+ "@id": "CODE_OF_CONDUCT.md"
+ },
+ {
+ "@id": "CITATIONS.md"
+ },
+ {
+ "@id": "modules.json"
+ },
+ {
+ "@id": "docs/usage.md"
+ },
+ {
+ "@id": "docs/output.md"
+ },
+ {
+ "@id": ".nf-core.yml"
+ },
+ {
+ "@id": ".pre-commit-config.yaml"
+ },
+ {
+ "@id": ".prettierignore"
+ }
+ ],
+ "isBasedOn": "https://github.com/nf-core/mag",
+ "license": "MIT",
+ "mainEntity": {
+ "@id": "main.nf"
+ },
+ "mentions": [
+ {
+ "@id": "#5db4a508-7c81-4c4a-9c37-8aaf75c1b5b7"
+ }
+ ],
+ "name": "nf-core/mag"
+ },
+ {
+ "@id": "ro-crate-metadata.json",
+ "@type": "CreativeWork",
+ "about": {
+ "@id": "./"
+ },
+ "conformsTo": [
+ {
+ "@id": "https://w3id.org/ro/crate/1.1"
+ },
+ {
+ "@id": "https://w3id.org/workflowhub/workflow-ro-crate/1.0"
+ }
+ ]
+ },
+ {
+ "@id": "main.nf",
+ "@type": [
+ "File",
+ "SoftwareSourceCode",
+ "ComputationalWorkflow"
+ ],
+ "creator": [
+ {
+ "@id": "https://orcid.org/0000-0001-9807-1082"
+ }
+ ],
+ "dateCreated": "",
+ "dateModified": "2025-05-12T09:32:51Z",
+ "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/",
+ "keywords": [
+ "nf-core",
+ "nextflow",
+ "annotation",
+ "assembly",
+ "binning",
+ "long-read-sequencing",
+ "metagenomes",
+ "metagenomics",
+ "nanopore",
+ "nanopore-sequencing"
+ ],
+ "license": [
+ "MIT"
+ ],
+ "maintainer": [
+ {
+ "@id": "https://orcid.org/0000-0001-9807-1082"
+ }
+ ],
+ "name": [
+ "nf-core/mag"
+ ],
+ "programmingLanguage": {
+ "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow"
+ },
+ "sdPublisher": {
+ "@id": "https://nf-co.re/"
+ },
+ "url": [
+ "https://github.com/nf-core/mag",
+ "https://nf-co.re/mag/dev/"
+ ],
+ "version": [
+ "3.4.1dev"
+ ]
+ },
+ {
+ "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow",
+ "@type": "ComputerLanguage",
+ "identifier": {
+ "@id": "https://www.nextflow.io/"
+ },
+ "name": "Nextflow",
+ "url": {
+ "@id": "https://www.nextflow.io/"
+ },
+ "version": "!>=24.04.2"
+ },
+ {
+ "@id": "#5db4a508-7c81-4c4a-9c37-8aaf75c1b5b7",
+ "@type": "TestSuite",
+ "instance": [
+ {
+ "@id": "#a9a27ec8-e11a-4692-99b8-a5af0a6acc50"
+ }
+ ],
+ "mainEntity": {
+ "@id": "main.nf"
+ },
+ "name": "Test suite for nf-core/mag"
+ },
+ {
+ "@id": "#a9a27ec8-e11a-4692-99b8-a5af0a6acc50",
+ "@type": "TestInstance",
+ "name": "GitHub Actions workflow for testing nf-core/mag",
+ "resource": "repos/nf-core/mag/actions/workflows/ci.yml",
+ "runsOn": {
+ "@id": "https://w3id.org/ro/terms/test#GithubService"
+ },
+ "url": "https://api.github.com"
+ },
+ {
+ "@id": "https://w3id.org/ro/terms/test#GithubService",
+ "@type": "TestService",
+ "name": "Github Actions",
+ "url": {
+ "@id": "https://github.com"
+ }
+ },
+ {
+ "@id": "assets/",
+ "@type": "Dataset",
+ "description": "Additional files"
+ },
+ {
+ "@id": "conf/",
+ "@type": "Dataset",
+ "description": "Configuration files"
+ },
+ {
+ "@id": "docs/",
+ "@type": "Dataset",
+ "description": "Markdown files for documenting the pipeline"
+ },
+ {
+ "@id": "docs/images/",
+ "@type": "Dataset",
+ "description": "Images for the documentation files"
+ },
+ {
+ "@id": "modules/",
+ "@type": "Dataset",
+ "description": "Modules used by the pipeline"
+ },
+ {
+ "@id": "modules/nf-core/",
+ "@type": "Dataset",
+ "description": "nf-core modules"
+ },
+ {
+ "@id": "workflows/",
+ "@type": "Dataset",
+ "description": "Main pipeline workflows to be executed in main.nf"
+ },
+ {
+ "@id": "subworkflows/",
+ "@type": "Dataset",
+ "description": "Smaller subworkflows"
+ },
+ {
+ "@id": "nextflow.config",
+ "@type": "File",
+ "description": "Main Nextflow configuration file"
+ },
+ {
+ "@id": "README.md",
+ "@type": "File",
+ "description": "Basic pipeline usage information"
+ },
+ {
+ "@id": "nextflow_schema.json",
+ "@type": "File",
+ "description": "JSON schema for pipeline parameter specification"
+ },
+ {
+ "@id": "CHANGELOG.md",
+ "@type": "File",
+ "description": "Information on changes made to the pipeline"
+ },
+ {
+ "@id": "LICENSE",
+ "@type": "File",
+ "description": "The license - should be MIT"
+ },
+ {
+ "@id": "CODE_OF_CONDUCT.md",
+ "@type": "File",
+ "description": "The nf-core code of conduct"
+ },
+ {
+ "@id": "CITATIONS.md",
+ "@type": "File",
+ "description": "Citations needed when using the pipeline"
+ },
+ {
+ "@id": "modules.json",
+ "@type": "File",
+ "description": "Version information for modules from nf-core/modules"
+ },
+ {
+ "@id": "docs/usage.md",
+ "@type": "File",
+ "description": "Usage documentation"
+ },
+ {
+ "@id": "docs/output.md",
+ "@type": "File",
+ "description": "Output documentation"
+ },
+ {
+ "@id": ".nf-core.yml",
+ "@type": "File",
+ "description": "nf-core configuration file, configuring template features and linting rules"
+ },
+ {
+ "@id": ".pre-commit-config.yaml",
+ "@type": "File",
+ "description": "Configuration file for pre-commit hooks"
+ },
+ {
+ "@id": ".prettierignore",
+ "@type": "File",
+ "description": "Ignore file for prettier"
+ },
+ {
+ "@id": "https://nf-co.re/",
+ "@type": "Organization",
+ "name": "nf-core",
+ "url": "https://nf-co.re/"
+ },
+ {
+ "@id": "https://orcid.org/0000-0001-9807-1082",
+ "@type": "Person",
+ "email": "[email protected]",
+ "name": "Hadrien Gourl\u00e9"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/subworkflows/local/utils_nfcore_mag_pipeline/main.nf b/subworkflows/local/utils_nfcore_mag_pipeline/main.nf
index 0cb9e1555..15149029b 100644
--- a/subworkflows/local/utils_nfcore_mag_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_mag_pipeline/main.nf
@@ -116,6 +116,7 @@ workflow PIPELINE_COMPLETION {
main:
summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
+ def multiqc_reports = multiqc_report.toList()
//
// Completion email and summary
@@ -129,7 +130,7 @@ workflow PIPELINE_COMPLETION {
plaintext_email,
outdir,
monochrome_logs,
- multiqc_report.toList()
+ multiqc_reports.getVal(),
)
}
@@ -225,7 +226,7 @@ def toolBibliographyText() {
}
def methodsDescriptionText(mqc_methods_yaml) {
- // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file
+ // Convert to a named map so can be used as with familiar NXF ${workflow} variable syntax in the MultiQC YML file
def meta = [:]
meta.workflow = workflow.toMap()
meta["manifest_map"] = workflow.manifest.toMap()
diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
index 0fcbf7b3f..d6e593e85 100644
--- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
@@ -92,10 +92,12 @@ def checkCondaChannels() {
channels = config.channels
}
catch (NullPointerException e) {
+ log.debug(e)
log.warn("Could not verify conda channel configuration.")
return null
}
catch (IOException e) {
+ log.debug(e)
log.warn("Could not verify conda channel configuration.")
return null
}
diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test
index ca964ce8e..02dbf094c 100644
--- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test
+++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test
@@ -52,10 +52,12 @@ nextflow_workflow {
}
then {
- assertAll(
- { assert workflow.success },
- { assert workflow.stdout.contains("nextflow_workflow v9.9.9") }
- )
+ expect {
+ with(workflow) {
+ assert success
+ assert "nextflow_workflow v9.9.9" in stdout
+ }
+ }
}
}
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
index 5cb7bafef..bfd258760 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
@@ -56,21 +56,6 @@ def checkProfileProvided(nextflow_cli_args) {
}
}
-//
-// Citation string for pipeline
-//
-def workflowCitation() {
- def temp_doi_ref = ""
- def manifest_doi = workflow.manifest.doi.tokenize(",")
- // Handling multiple DOIs
- // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers
- // Removing ` ` since the manifest.doi is a string and not a proper list
- manifest_doi.each { doi_ref ->
- temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n"
- }
- return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md"
-}
-
//
// Generate workflow version string
//
@@ -150,33 +135,6 @@ def paramsSummaryMultiqc(summary_params) {
return yaml_file_text
}
-//
-// nf-core logo
-//
-def nfCoreLogo(monochrome_logs=true) {
- def colors = logColours(monochrome_logs) as Map
- String.format(
- """\n
- ${dashedLine(monochrome_logs)}
- ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset}
- ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset}
- ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset}
- ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset}
- ${colors.green}`._,._,\'${colors.reset}
- ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset}
- ${dashedLine(monochrome_logs)}
- """.stripIndent()
- )
-}
-
-//
-// Return dashed line
-//
-def dashedLine(monochrome_logs=true) {
- def colors = logColours(monochrome_logs) as Map
- return "-${colors.dim}----------------------------------------------------${colors.reset}-"
-}
-
//
// ANSII colours used for terminal logging
//
@@ -245,28 +203,24 @@ def logColours(monochrome_logs=true) {
return colorcodes
}
-//
-// Attach the multiqc report to email
-//
-def attachMultiqcReport(multiqc_report) {
- def mqc_report = null
- try {
- if (workflow.success) {
- mqc_report = multiqc_report.getVal()
- if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) {
- if (mqc_report.size() > 1) {
- log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one")
- }
- mqc_report = mqc_report[0]
- }
+// Return a single report from an object that may be a Path or List
+//
+def getSingleReport(multiqc_reports) {
+ if (multiqc_reports instanceof Path) {
+ return multiqc_reports
+ } else if (multiqc_reports instanceof List) {
+ if (multiqc_reports.size() == 0) {
+ log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'")
+ return null
+ } else if (multiqc_reports.size() == 1) {
+ return multiqc_reports.first()
+ } else {
+ log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one")
+ return multiqc_reports.first()
}
+ } else {
+ return null
}
- catch (Exception all) {
- if (multiqc_report) {
- log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email")
- }
- }
- return mqc_report
}
//
@@ -320,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
email_fields['summary'] = summary << misc_fields
// On success try attach the multiqc report
- def mqc_report = attachMultiqcReport(multiqc_report)
+ def mqc_report = getSingleReport(multiqc_report)
// Check if we are only sending emails on failure
def email_address = email
@@ -340,7 +294,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
def email_html = html_template.toString()
// Render the sendmail template
- def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit
+ def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit
def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()]
def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt")
def sendmail_template = engine.createTemplate(sf).make(smail_fields)
@@ -351,14 +305,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
if (email_address) {
try {
if (plaintext_email) {
-new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') }
+ new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML')
+ }
// Try to send HTML e-mail using sendmail
def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html")
sendmail_tf.withWriter { w -> w << sendmail_html }
['sendmail', '-t'].execute() << sendmail_html
log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-")
}
- catch (Exception all) {
+ catch (Exception msg) {
+ log.debug(msg.toString())
+ log.debug("Trying with mail instead of sendmail")
// Catch failures and try with plaintext
def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address]
mail_cmd.execute() << email_html
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test
index 1dc317f8f..f117040cb 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test
@@ -41,26 +41,14 @@ nextflow_function {
}
}
- test("Test Function workflowCitation") {
-
- function "workflowCitation"
-
- then {
- assertAll(
- { assert function.success },
- { assert snapshot(function.result).match() }
- )
- }
- }
-
- test("Test Function nfCoreLogo") {
+ test("Test Function without logColours") {
- function "nfCoreLogo"
+ function "logColours"
when {
function {
"""
- input[0] = false
+ input[0] = true
"""
}
}
@@ -73,9 +61,8 @@ nextflow_function {
}
}
- test("Test Function dashedLine") {
-
- function "dashedLine"
+ test("Test Function with logColours") {
+ function "logColours"
when {
function {
@@ -93,14 +80,13 @@ nextflow_function {
}
}
- test("Test Function without logColours") {
-
- function "logColours"
+ test("Test Function getSingleReport with a single file") {
+ function "getSingleReport"
when {
function {
"""
- input[0] = true
+ input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true)
"""
}
}
@@ -108,18 +94,22 @@ nextflow_function {
then {
assertAll(
{ assert function.success },
- { assert snapshot(function.result).match() }
+ { assert function.result.contains("test.tsv") }
)
}
}
- test("Test Function with logColours") {
- function "logColours"
+ test("Test Function getSingleReport with multiple files") {
+ function "getSingleReport"
when {
function {
"""
- input[0] = false
+ input[0] = [
+ file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true),
+ file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true),
+ file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true)
+ ]
"""
}
}
@@ -127,7 +117,9 @@ nextflow_function {
then {
assertAll(
{ assert function.success },
- { assert snapshot(function.result).match() }
+ { assert function.result.contains("test.tsv") },
+ { assert !function.result.contains("network.tsv") },
+ { assert !function.result.contains("expression.tsv") }
)
}
}
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap
index 1037232c9..02c670141 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap
@@ -17,26 +17,6 @@
},
"timestamp": "2024-02-28T12:02:59.729647"
},
- "Test Function nfCoreLogo": {
- "content": [
- "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-02-28T12:03:10.562934"
- },
- "Test Function workflowCitation": {
- "content": [
- "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-02-28T12:03:07.019761"
- },
"Test Function without logColours": {
"content": [
{
@@ -95,16 +75,6 @@
},
"timestamp": "2024-02-28T12:03:17.969323"
},
- "Test Function dashedLine": {
- "content": [
- "-\u001b[2m----------------------------------------------------\u001b[0m-"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-02-28T12:03:14.366181"
- },
"Test Function with logColours": {
"content": [
{
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 842dc432a..8fb301648 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test
@@ -42,7 +42,7 @@ nextflow_workflow {
params {
test_data = ''
- outdir = 1
+ outdir = null
}
workflow {
@@ -94,7 +94,7 @@ nextflow_workflow {
params {
test_data = ''
- outdir = 1
+ outdir = null
}
workflow {
diff --git a/workflows/mag.nf b/workflows/mag.nf
index ef031484a..2734cf87f 100644
--- a/workflows/mag.nf
+++ b/workflows/mag.nf
@@ -39,7 +39,7 @@ workflow MAG {
softwareVersionsToYAML(ch_versions)
.collectFile(
storeDir: "${params.outdir}/pipeline_info",
- name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml',
+ name: 'nf_core_' + 'mag_software_' + 'mqc_' + 'versions.yml',
sort: true,
newLine: true
).set { ch_collated_versions }
From 1bbbdadd23a089d03283ee6e5757c4cbd44f1594 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 09:34:58 +0200
Subject: [PATCH 2/7] Template update for nf-core/tools version 3.2.1
---
.github/workflows/awsfulltest.yml | 41 ++++++++-----------------------
.github/workflows/ci.yml | 1 +
.nf-core.yml | 2 +-
nextflow.config | 2 +-
ro-crate-metadata.json | 12 ++++-----
5 files changed, 19 insertions(+), 39 deletions(-)
diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml
index ed577c8e3..e25172e2b 100644
--- a/.github/workflows/awsfulltest.yml
+++ b/.github/workflows/awsfulltest.yml
@@ -4,44 +4,23 @@ name: nf-core AWS full size tests
# It runs the -profile 'test_full' on AWS batch
on:
- pull_request:
- branches:
- - main
- - master
workflow_dispatch:
pull_request_review:
types: [submitted]
+ release:
+ types: [published]
jobs:
run-platform:
name: Run AWS full tests
- # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered
- if: github.repository == 'nf-core/mag' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch'
+ # run only if the PR is approved by at least 2 reviewers and against the master/main branch or manually triggered
+ if: github.repository == 'nf-core/mag' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- - name: Get PR reviews
- uses: octokit/[email protected]
- if: github.event_name != 'workflow_dispatch'
- id: check_approvals
- continue-on-error: true
- with:
- route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews?per_page=100
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Check for approvals
- if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
- run: |
- echo "No review approvals found. At least 2 approvals are required to run this action automatically."
- exit 1
-
- - name: Check for enough approvals (>=2)
- id: test_variables
- if: github.event_name != 'workflow_dispatch'
+ - name: Set revision variable
+ id: revision
run: |
- JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}'
- CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length')
- test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required
+ echo "revision=${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'release') && github.sha || 'dev' }}" >> "$GITHUB_OUTPUT"
- name: Launch workflow via Seqera Platform
uses: seqeralabs/action-tower-launch@v2
@@ -52,12 +31,12 @@ jobs:
workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }}
access_token: ${{ secrets.TOWER_ACCESS_TOKEN }}
compute_env: ${{ secrets.TOWER_COMPUTE_ENV }}
- revision: ${{ github.sha }}
- workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/mag/work-${{ github.sha }}
+ revision: ${{ steps.revision.outputs.revision }}
+ workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/mag/work-${{ steps.revision.outputs.revision }}
parameters: |
{
"hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}",
- "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/mag/results-${{ github.sha }}"
+ "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/mag/results-${{ steps.revision.outputs.revision }}"
}
profiles: test_full
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e2213e031..32c4cbaec 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -83,5 +83,6 @@ jobs:
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
- name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}"
+ continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }}
run: |
nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results
diff --git a/.nf-core.yml b/.nf-core.yml
index b4baa3a06..fed996de7 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -5,7 +5,7 @@ lint:
- config_defaults:
- params.phix_reference
- params.lambda_reference
-nf_core_version: 3.2.0
+nf_core_version: 3.2.1
repository_type: pipeline
template:
author: "Hadrien Gourl\xE9, Daniel Straub, Sabrina Krakau, James A. Fellows Yates,\
diff --git a/nextflow.config b/nextflow.config
index 8a48b38cc..45f511a76 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -281,7 +281,7 @@ manifest {
// Nextflow plugins
plugins {
- id '[email protected]' // Validation of pipeline parameters and creation of an input channel from a sample sheet
+ id '[email protected]' // Validation of pipeline parameters and creation of an input channel from a sample sheet
}
validation {
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
index e57e836fb..32dd3c984 100644
--- a/ro-crate-metadata.json
+++ b/ro-crate-metadata.json
@@ -22,7 +22,7 @@
"@id": "./",
"@type": "Dataset",
"creativeWorkStatus": "InProgress",
- "datePublished": "2025-05-12T07:32:51+00:00",
+ "datePublished": "2025-05-12T07:34:56+00:00",
"description": "
\n \n \n \n \n
\n\n[](https://github.com/nf-core/mag/actions/workflows/ci.yml)\n[](https://github.com/nf-core/mag/actions/workflows/linting.yml)[](https://nf-co.re/mag/results)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/mag)\n\n[](https://nfcore.slack.com/channels/mag)[](https://twitter.com/nf_core)[](https://mstdn.science/@nf_core)[](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/mag** 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/mag \\\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/mag/usage) and the [parameter documentation](https://nf-co.re/mag/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/mag/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/mag/output).\n\n## Credits\n\nnf-core/mag was originally written by Hadrien Gourl\u00e9, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry.\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 `#mag` channel](https://nfcore.slack.com/channels/mag) (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": [
{
@@ -99,7 +99,7 @@
},
"mentions": [
{
- "@id": "#5db4a508-7c81-4c4a-9c37-8aaf75c1b5b7"
+ "@id": "#ffa754ef-0ed1-445d-9272-96b1d7c90ab6"
}
],
"name": "nf-core/mag"
@@ -132,7 +132,7 @@
}
],
"dateCreated": "",
- "dateModified": "2025-05-12T09:32:51Z",
+ "dateModified": "2025-05-12T09:34:56Z",
"dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/",
"keywords": [
"nf-core",
@@ -184,11 +184,11 @@
"version": "!>=24.04.2"
},
{
- "@id": "#5db4a508-7c81-4c4a-9c37-8aaf75c1b5b7",
+ "@id": "#ffa754ef-0ed1-445d-9272-96b1d7c90ab6",
"@type": "TestSuite",
"instance": [
{
- "@id": "#a9a27ec8-e11a-4692-99b8-a5af0a6acc50"
+ "@id": "#7464838e-b741-4774-b741-ee941102c03a"
}
],
"mainEntity": {
@@ -197,7 +197,7 @@
"name": "Test suite for nf-core/mag"
},
{
- "@id": "#a9a27ec8-e11a-4692-99b8-a5af0a6acc50",
+ "@id": "#7464838e-b741-4774-b741-ee941102c03a",
"@type": "TestInstance",
"name": "GitHub Actions workflow for testing nf-core/mag",
"resource": "repos/nf-core/mag/actions/workflows/ci.yml",
From f40a5ec0bb22ff4be1e260f9ba946b283a612cd6 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 09:40:03 +0200
Subject: [PATCH 3/7] Last changes
---
ro-crate-metadata.json | 119 -----------------------------------------
1 file changed, 119 deletions(-)
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
index 6d432e1b0..32dd3c984 100644
--- a/ro-crate-metadata.json
+++ b/ro-crate-metadata.json
@@ -22,11 +22,7 @@
"@id": "./",
"@type": "Dataset",
"creativeWorkStatus": "InProgress",
-<<<<<<< HEAD
- "datePublished": "2025-04-30T12:25:54+00:00",
-=======
"datePublished": "2025-05-12T07:34:56+00:00",
->>>>>>> TEMPLATE
"description": "
\n \n \n \n \n
\n\n[](https://github.com/nf-core/mag/actions/workflows/ci.yml)\n[](https://github.com/nf-core/mag/actions/workflows/linting.yml)[](https://nf-co.re/mag/results)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/mag)\n\n[](https://nfcore.slack.com/channels/mag)[](https://twitter.com/nf_core)[](https://mstdn.science/@nf_core)[](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/mag** 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/mag \\\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/mag/usage) and the [parameter documentation](https://nf-co.re/mag/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/mag/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/mag/output).\n\n## Credits\n\nnf-core/mag was originally written by Hadrien Gourl\u00e9, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry.\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 `#mag` channel](https://nfcore.slack.com/channels/mag) (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": [
{
@@ -36,12 +32,6 @@
"@id": "assets/"
},
{
-<<<<<<< HEAD
- "@id": "bin/"
- },
- {
-=======
->>>>>>> TEMPLATE
"@id": "conf/"
},
{
@@ -54,12 +44,6 @@
"@id": "modules/"
},
{
-<<<<<<< HEAD
- "@id": "modules/local/"
- },
- {
-=======
->>>>>>> TEMPLATE
"@id": "modules/nf-core/"
},
{
@@ -115,11 +99,7 @@
},
"mentions": [
{
-<<<<<<< HEAD
- "@id": "#72308396-6e79-404e-8ccb-749f04c66914"
-=======
"@id": "#ffa754ef-0ed1-445d-9272-96b1d7c90ab6"
->>>>>>> TEMPLATE
}
],
"name": "nf-core/mag"
@@ -148,34 +128,11 @@
],
"creator": [
{
-<<<<<<< HEAD
- "@id": "#[email protected]"
- },
- {
- "@id": "#[email protected]"
- },
- {
- "@id": "#[email protected]"
- },
- {
- "@id": "https://orcid.org/0000-0003-0603-7907"
- },
- {
- "@id": "https://orcid.org/0000-0001-9807-1082"
- },
- {
- "@id": "#[email protected]"
- }
- ],
- "dateCreated": "",
- "dateModified": "2025-04-30T12:25:54Z",
-=======
"@id": "https://orcid.org/0000-0001-9807-1082"
}
],
"dateCreated": "",
"dateModified": "2025-05-12T09:34:56Z",
->>>>>>> TEMPLATE
"dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/",
"keywords": [
"nf-core",
@@ -194,20 +151,7 @@
],
"maintainer": [
{
-<<<<<<< HEAD
- "@id": "#[email protected]"
- },
- {
- "@id": "https://orcid.org/0000-0003-0603-7907"
- },
- {
- "@id": "https://orcid.org/0000-0001-9807-1082"
- },
- {
- "@id": "#[email protected]"
-=======
"@id": "https://orcid.org/0000-0001-9807-1082"
->>>>>>> TEMPLATE
}
],
"name": [
@@ -219,10 +163,6 @@
"sdPublisher": {
"@id": "https://nf-co.re/"
},
-<<<<<<< HEAD
- "url": ["https://github.com/nf-core/mag", "https://nf-co.re/mag/dev/"],
- "version": ["3.4.1dev"]
-=======
"url": [
"https://github.com/nf-core/mag",
"https://nf-co.re/mag/dev/"
@@ -230,7 +170,6 @@
"version": [
"3.4.1dev"
]
->>>>>>> TEMPLATE
},
{
"@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow",
@@ -245,19 +184,11 @@
"version": "!>=24.04.2"
},
{
-<<<<<<< HEAD
- "@id": "#72308396-6e79-404e-8ccb-749f04c66914",
- "@type": "TestSuite",
- "instance": [
- {
- "@id": "#bac35876-3dce-4b5c-a3cd-c503b6874da0"
-=======
"@id": "#ffa754ef-0ed1-445d-9272-96b1d7c90ab6",
"@type": "TestSuite",
"instance": [
{
"@id": "#7464838e-b741-4774-b741-ee941102c03a"
->>>>>>> TEMPLATE
}
],
"mainEntity": {
@@ -266,11 +197,7 @@
"name": "Test suite for nf-core/mag"
},
{
-<<<<<<< HEAD
- "@id": "#bac35876-3dce-4b5c-a3cd-c503b6874da0",
-=======
"@id": "#7464838e-b741-4774-b741-ee941102c03a",
->>>>>>> TEMPLATE
"@type": "TestInstance",
"name": "GitHub Actions workflow for testing nf-core/mag",
"resource": "repos/nf-core/mag/actions/workflows/ci.yml",
@@ -293,14 +220,6 @@
"description": "Additional files"
},
{
-<<<<<<< HEAD
- "@id": "bin/",
- "@type": "Dataset",
- "description": "Scripts that must be callable from a pipeline process"
- },
- {
-=======
->>>>>>> TEMPLATE
"@id": "conf/",
"@type": "Dataset",
"description": "Configuration files"
@@ -321,14 +240,6 @@
"description": "Modules used by the pipeline"
},
{
-<<<<<<< HEAD
- "@id": "modules/local/",
- "@type": "Dataset",
- "description": "Pipeline-specific modules"
- },
- {
-=======
->>>>>>> TEMPLATE
"@id": "modules/nf-core/",
"@type": "Dataset",
"description": "nf-core modules"
@@ -415,40 +326,10 @@
"url": "https://nf-co.re/"
},
{
-<<<<<<< HEAD
- "@id": "#[email protected]",
- "@type": "Person",
- "email": "[email protected]",
- "name": "Carson J Miller"
- },
- {
- "@id": "#[email protected]",
- "@type": "Person",
- "email": "[email protected]",
- "name": "James A. Fellows Yates"
- },
- {
- "@id": "https://orcid.org/0000-0003-0603-7907",
- "@type": "Person",
- "email": "[email protected]",
- "name": "Sabrina Krakau"
- },
- {
-=======
->>>>>>> TEMPLATE
"@id": "https://orcid.org/0000-0001-9807-1082",
"@type": "Person",
"email": "[email protected]",
"name": "Hadrien Gourl\u00e9"
-<<<<<<< HEAD
- },
- {
- "@id": "#[email protected]",
- "@type": "Person",
- "email": "[email protected]",
- "name": "Daniel Straub"
-=======
->>>>>>> TEMPLATE
}
]
}
\ No newline at end of file
From 77e9a75d0f880e843a4fcce89c648b8b86aed9b3 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 09:48:11 +0200
Subject: [PATCH 4/7] Left over references to master
---
.github/workflows/ci.yml | 2 +-
.github/workflows/linting.yml | 4 ++--
assets/schema_assembly_input.json | 2 +-
.../nf-core/utils_nfschema_plugin/tests/nextflow_schema.json | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c2c7d6124..571ddca53 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -36,7 +36,7 @@ jobs:
test_name:
- "test"
isMaster:
- - ${{ github.base_ref == 'master' }}
+ - ${{ github.base_ref == 'main' }}
# Exclude conda and singularity on dev
exclude:
- isMaster: false
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index dbd52d5a2..5fd241fa0 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -53,7 +53,7 @@ jobs:
pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }}
- name: Run nf-core pipelines lint
- if: ${{ github.base_ref != 'master' }}
+ if: ${{ github.base_ref != 'main' }}
env:
GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -61,7 +61,7 @@ jobs:
run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md
- name: Run nf-core pipelines lint --release
- if: ${{ github.base_ref == 'master' }}
+ if: ${{ github.base_ref == 'main' }}
env:
GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/assets/schema_assembly_input.json b/assets/schema_assembly_input.json
index 404845b97..c7f9d15c0 100644
--- a/assets/schema_assembly_input.json
+++ b/assets/schema_assembly_input.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://raw.githubusercontent.com/nf-core/mag/master/assets/schema_input.json",
+ "$id": "https://raw.githubusercontent.com/nf-core/mag/main/assets/schema_input.json",
"title": "nf-core/mag pipeline - params.input schema",
"description": "Schema for the file provided with params.input",
"type": "array",
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json
index 331e0d2f4..413504502 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json",
+ "$id": "https://raw.githubusercontent.com/nf-core/mag/main/nextflow_schema.json",
"title": ". pipeline parameters",
"description": "",
"type": "object",
From f07f6732cc1d8fe170fb7fba4f47d28a1ba08c95 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 09:49:51 +0200
Subject: [PATCH 5/7] Fix linting (although seems to be a possible template
bug)
---
.github/workflows/linting.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index 5fd241fa0..dbd52d5a2 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -53,7 +53,7 @@ jobs:
pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }}
- name: Run nf-core pipelines lint
- if: ${{ github.base_ref != 'main' }}
+ if: ${{ github.base_ref != 'master' }}
env:
GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -61,7 +61,7 @@ jobs:
run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md
- name: Run nf-core pipelines lint --release
- if: ${{ github.base_ref == 'main' }}
+ if: ${{ github.base_ref == 'master' }}
env:
GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
From b6f01ed8a8e1f0dd3ce8822fa40f370d31c157f7 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 09:54:47 +0200
Subject: [PATCH 6/7] Satisfy linting in PR checklist, even if incorrect
---
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
CHANGELOG.md | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 1ffcdcafe..cda08223c 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -15,7 +15,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/mag/
- [ ] This comment contains a description of changes (with reason).
- [ ] If you've fixed a bug or added code that should be tested, add tests!
-- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/mag/tree/main/.github/CONTRIBUTING.md)
+- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/mag/tree/master/.github/CONTRIBUTING.md)
- [ ] If necessary, also make a PR on the nf-core/mag _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository.
- [ ] Make sure your code lints (`nf-core pipelines lint`).
- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `).
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c6f0dbc79..60ea229a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#730](https://github.com/nf-core/mag/pull/730) - Migrate from local BUSCO module to nf-core one, updating version (by @dialvarezs)
- [#730](https://github.com/nf-core/mag/pull/730) - Use BUSCO database from nf-core test datasets (by @dialvarezs)
- [#788](https://github.com/nf-core/mag/pull/788) - Tweak method of loading GTDB database in GTDBTK_CLASSIFYWF for more stability (reported by @alexhbnr, fix by @jfy133)
+- [#800](https://github.com/nf-core/mag/pull/800) - Default branch is now set to `main` (by @jfy133 and @mirpedrol)
### `Fixed`
From d9f591e578cc5d6245150b5a82dcb5060aba9ef7 Mon Sep 17 00:00:00 2001
From: "James A. Fellows Yates"
Date: Mon, 12 May 2025 10:04:57 +0200
Subject: [PATCH 7/7] Attempt to satisfy linting
---
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
nextflow_schema.json | 6 ------
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index cda08223c..e44a93d11 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -8,7 +8,7 @@ These are the most common things requested on pull requests (PRs).
Remember that PRs should be made against the dev branch, unless you're preparing a pipeline release.
-Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/mag/tree/main/.github/CONTRIBUTING.md)
+Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/mag/tree/master/.github/CONTRIBUTING.md)
-->
## PR checklist
diff --git a/nextflow_schema.json b/nextflow_schema.json
index d254cd88c..5ad227907 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -225,12 +225,6 @@
"hidden": true,
"help_text": "Location of pipeline test dataset files"
},
- "trace_report_suffix": {
- "type": "string",
- "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
- },
"trace_report_suffix": {
"type": "string",
"fa_icon": "far calendar",