diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 97c8c97..b290e09 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,20 +1,20 @@
{
"name": "nfcore",
- "image": "nfcore/devcontainer:latest",
+ "image": "nfcore/gitpod:latest",
+ "remoteUser": "gitpod",
+ "runArgs": ["--privileged"],
- "remoteUser": "root",
- "privileged": true,
+ // Configure tool-specific properties.
+ "customizations": {
+ // Configure properties specific to VS Code.
+ "vscode": {
+ // Set *default* container specific settings.json values on container create.
+ "settings": {
+ "python.defaultInterpreterPath": "/opt/conda/bin/python"
+ },
- "remoteEnv": {
- // Workspace path on the host for mounting with docker-outside-of-docker
- "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}"
- },
-
- "onCreateCommand": "./.devcontainer/setup.sh",
-
- "hostRequirements": {
- "cpus": 4,
- "memory": "16gb",
- "storage": "32gb"
+ // Add the IDs of extensions you want installed when the container is created.
+ "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"]
+ }
}
}
diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh
deleted file mode 100755
index 2ca6343..0000000
--- a/.devcontainer/setup.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env bash
-
-# Customise the terminal command prompt
-echo "export PROMPT_DIRTRIM=2" >> $HOME/.bashrc
-echo "export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '" >> $HOME/.bashrc
-export PROMPT_DIRTRIM=2
-export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '
-
-# Update Nextflow
-nextflow self-update
-
-# Update welcome message
-echo "Welcome to the nf-core/deepmutscan devcontainer!" > /usr/local/etc/vscode-dev-containers/first-run-notice.txt
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..6d9b74c
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,37 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_size = 4
+indent_style = space
+
+[*.{md,yml,yaml,html,css,scss,js}]
+indent_size = 2
+
+# These files are edited and tested upstream in nf-core/modules
+[/modules/nf-core/**]
+charset = unset
+end_of_line = unset
+insert_final_newline = unset
+trim_trailing_whitespace = unset
+indent_style = unset
+[/subworkflows/nf-core/**]
+charset = unset
+end_of_line = unset
+insert_final_newline = unset
+trim_trailing_whitespace = unset
+indent_style = unset
+
+[/assets/email*]
+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 dc13efb..12dd4a0 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -78,7 +78,7 @@ If you wish to contribute a new step, please use the following coding standards:
5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool).
6. Add sanity checks and validation for all relevant parameters.
7. Perform local tests to validate that the new code works as expected.
-8. If applicable, add a new test in the `tests` directory.
+8. If applicable, add a new test command in `.github/workflow/ci.yml`.
9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module.
10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`.
diff --git a/.github/actions/get-shards/action.yml b/.github/actions/get-shards/action.yml
deleted file mode 100644
index 3408527..0000000
--- a/.github/actions/get-shards/action.yml
+++ /dev/null
@@ -1,69 +0,0 @@
-name: "Get number of shards"
-description: "Get the number of nf-test shards for the current CI job"
-inputs:
- max_shards:
- description: "Maximum number of shards allowed"
- required: true
- paths:
- description: "Component paths to test"
- required: false
- tags:
- description: "Tags to pass as argument for nf-test --tag parameter"
- required: false
-outputs:
- shard:
- description: "Array of shard numbers"
- value: ${{ steps.shards.outputs.shard }}
- total_shards:
- description: "Total number of shards"
- value: ${{ steps.shards.outputs.total_shards }}
-runs:
- using: "composite"
- steps:
- - name: Install nf-test
- uses: nf-core/setup-nf-test@v1
- with:
- version: ${{ env.NFT_VER }}
- - name: Get number of shards
- id: shards
- shell: bash
- run: |
- # Run nf-test with dynamic parameter
- nftest_output=$(nf-test test \
- --profile +docker \
- $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \
- --dry-run \
- --ci \
- --changed-since HEAD^) || {
- echo "nf-test command failed with exit code $?"
- echo "Full output: $nftest_output"
- exit 1
- }
- echo "nf-test dry-run output: $nftest_output"
-
- # Default values for shard and total_shards
- shard="[]"
- total_shards=0
-
- # Check if there are related tests
- if echo "$nftest_output" | grep -q 'No tests to execute'; then
- echo "No related tests found."
- else
- # Extract the number of related tests
- number_of_shards=$(echo "$nftest_output" | sed -n 's|.*Executed \([0-9]*\) tests.*|\1|p')
- if [[ -n "$number_of_shards" && "$number_of_shards" -gt 0 ]]; then
- shards_to_run=$(( $number_of_shards < ${{ inputs.max_shards }} ? $number_of_shards : ${{ inputs.max_shards }} ))
- shard=$(seq 1 "$shards_to_run" | jq -R . | jq -c -s .)
- total_shards="$shards_to_run"
- else
- echo "Unexpected output format. Falling back to default values."
- fi
- fi
-
- # Write to GitHub Actions outputs
- echo "shard=$shard" >> $GITHUB_OUTPUT
- echo "total_shards=$total_shards" >> $GITHUB_OUTPUT
-
- # Debugging output
- echo "Final shard array: $shard"
- echo "Total number of shards: $total_shards"
diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml
deleted file mode 100644
index 3b9724c..0000000
--- a/.github/actions/nf-test/action.yml
+++ /dev/null
@@ -1,111 +0,0 @@
-name: "nf-test Action"
-description: "Runs nf-test with common setup steps"
-inputs:
- profile:
- description: "Profile to use"
- required: true
- shard:
- description: "Shard number for this CI job"
- required: true
- total_shards:
- description: "Total number of test shards(NOT the total number of matrix jobs)"
- required: true
- paths:
- description: "Test paths"
- required: true
- tags:
- description: "Tags to pass as argument for nf-test --tag parameter"
- required: false
-runs:
- using: "composite"
- steps:
- - name: Setup Nextflow
- uses: nf-core/setup-nextflow@v2
- with:
- version: "${{ env.NXF_VERSION }}"
-
- - name: Set up Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
- with:
- python-version: "3.14"
-
- - name: Install nf-test
- uses: nf-core/setup-nf-test@v1
- with:
- version: "${{ env.NFT_VER }}"
- install-pdiff: true
-
- - name: Setup apptainer
- if: contains(inputs.profile, 'singularity')
- uses: eWaterCycle/setup-apptainer@main
-
- - name: Set up Singularity
- if: contains(inputs.profile, 'singularity')
- shell: bash
- run: |
- mkdir -p $NXF_SINGULARITY_CACHEDIR
- mkdir -p $NXF_SINGULARITY_LIBRARYDIR
-
- - name: Conda setup
- if: contains(inputs.profile, 'conda')
- uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3
- with:
- auto-update-conda: true
- conda-solver: libmamba
- channels: conda-forge
- channel-priority: strict
- conda-remove-defaults: true
-
- - name: Run nf-test
- shell: bash
- env:
- NFT_WORKDIR: ${{ env.NFT_WORKDIR }}
- run: |
- nf-test test \
- --profile=+${{ inputs.profile }} \
- $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \
- --ci \
- --changed-since HEAD^ \
- --verbose \
- --tap=test.tap \
- --shard ${{ inputs.shard }}/${{ inputs.total_shards }}
-
- # Save the absolute path of the test.tap file to the output
- echo "tap_file_path=$(realpath test.tap)" >> $GITHUB_OUTPUT
-
- - name: Generate test summary
- if: always()
- shell: bash
- run: |
- # Add header if it doesn't exist (using a token file to track this)
- if [ ! -f ".summary_header" ]; then
- echo "# 🚀 nf-test results" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "| Status | Test Name | Profile | Shard |" >> $GITHUB_STEP_SUMMARY
- echo "|:------:|-----------|---------|-------|" >> $GITHUB_STEP_SUMMARY
- touch .summary_header
- fi
-
- if [ -f test.tap ]; then
- while IFS= read -r line; do
- if [[ $line =~ ^ok ]]; then
- test_name="${line#ok }"
- # Remove the test number from the beginning
- test_name="${test_name#* }"
- echo "| ✅ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY
- elif [[ $line =~ ^not\ ok ]]; then
- test_name="${line#not ok }"
- # Remove the test number from the beginning
- test_name="${test_name#* }"
- echo "| ❌ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY
- fi
- done < test.tap
- else
- echo "| ⚠️ | No test results found | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY
- fi
-
- - name: Clean up
- if: always()
- shell: bash
- run: |
- sudo rm -rf /home/ubuntu/tests/
diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml
index e7c08d6..e47925c 100644
--- a/.github/workflows/awsfulltest.yml
+++ b/.github/workflows/awsfulltest.yml
@@ -4,23 +4,44 @@ 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/main branch or manually triggered
- if: github.repository == 'nf-core/deepmutscan' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' || github.event_name == 'release'
+ # 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/deepmutscan' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- - name: Set revision variable
- id: revision
+ - name: Get PR reviews
+ uses: octokit/request-action@v2.x
+ 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'
run: |
- echo "revision=${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'release') && github.sha || 'dev' }}" >> "$GITHUB_OUTPUT"
+ 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
@@ -28,21 +49,21 @@ jobs:
# Add full size test data (but still relatively small datasets for few samples)
# on the `test_full.config` test runs with only one set of parameters
with:
- workspace_id: ${{ vars.TOWER_WORKSPACE_ID }}
+ workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }}
access_token: ${{ secrets.TOWER_ACCESS_TOKEN }}
- compute_env: ${{ vars.TOWER_COMPUTE_ENV }}
- revision: ${{ steps.revision.outputs.revision }}
- workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/deepmutscan/work-${{ steps.revision.outputs.revision }}
+ compute_env: ${{ secrets.TOWER_COMPUTE_ENV }}
+ revision: ${{ github.sha }}
+ workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/deepmutscan/work-${{ github.sha }}
parameters: |
{
"hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}",
- "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/deepmutscan/results-${{ steps.revision.outputs.revision }}"
+ "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/deepmutscan/results-${{ github.sha }}"
}
profiles: test_full
- - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
+ - uses: actions/upload-artifact@v4
with:
name: Seqera Platform debug log file
path: |
- tower_action_*.log
- tower_action_*.json
+ seqera_platform_action_*.log
+ seqera_platform_action_*.json
diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml
index e82b4c0..0f92edd 100644
--- a/.github/workflows/awstest.yml
+++ b/.github/workflows/awstest.yml
@@ -14,20 +14,20 @@ jobs:
- name: Launch workflow via Seqera Platform
uses: seqeralabs/action-tower-launch@v2
with:
- workspace_id: ${{ vars.TOWER_WORKSPACE_ID }}
+ workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }}
access_token: ${{ secrets.TOWER_ACCESS_TOKEN }}
- compute_env: ${{ vars.TOWER_COMPUTE_ENV }}
+ compute_env: ${{ secrets.TOWER_COMPUTE_ENV }}
revision: ${{ github.sha }}
- workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/deepmutscan/work-${{ github.sha }}
+ workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/deepmutscan/work-${{ github.sha }}
parameters: |
{
- "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/deepmutscan/results-test-${{ github.sha }}"
+ "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/deepmutscan/results-test-${{ github.sha }}"
}
profiles: test
- - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
+ - uses: actions/upload-artifact@v4
with:
name: Seqera Platform debug log file
path: |
- tower_action_*.log
- tower_action_*.json
+ seqera_platform_action_*.log
+ seqera_platform_action_*.json
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..c23beda
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,87 @@
+name: nf-core CI
+# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors
+on:
+ push:
+ branches:
+ - dev
+ pull_request:
+ release:
+ types: [published]
+ workflow_dispatch:
+
+env:
+ NXF_ANSI_LOG: false
+ NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity
+ NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity
+
+concurrency:
+ group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}"
+ cancel-in-progress: true
+
+jobs:
+ test:
+ name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})"
+ # Only run on push if this is the nf-core dev branch (merged PRs)
+ if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/deepmutscan') }}"
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ NXF_VER:
+ - "24.04.2"
+ - "latest-everything"
+ profile:
+ - "conda"
+ - "docker"
+ - "singularity"
+ test_name:
+ - "test"
+ isMaster:
+ - ${{ github.base_ref == 'master' }}
+ # Exclude conda and singularity on dev
+ exclude:
+ - isMaster: false
+ profile: "conda"
+ - isMaster: false
+ profile: "singularity"
+ steps:
+ - name: Check out pipeline code
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
+ with:
+ fetch-depth: 0
+
+ - name: Set up Nextflow
+ uses: nf-core/setup-nextflow@v2
+ with:
+ version: "${{ matrix.NXF_VER }}"
+
+ - name: Set up Apptainer
+ if: matrix.profile == 'singularity'
+ uses: eWaterCycle/setup-apptainer@main
+
+ - name: Set up Singularity
+ if: matrix.profile == 'singularity'
+ run: |
+ mkdir -p $NXF_SINGULARITY_CACHEDIR
+ mkdir -p $NXF_SINGULARITY_LIBRARYDIR
+
+ - name: Set up Miniconda
+ if: matrix.profile == 'conda'
+ uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3
+ with:
+ miniconda-version: "latest"
+ auto-update-conda: true
+ conda-solver: libmamba
+ channels: conda-forge,bioconda
+
+ - name: Set up Conda
+ if: matrix.profile == 'conda'
+ run: |
+ echo $(realpath $CONDA)/condabin >> $GITHUB_PATH
+ echo $(realpath python) >> $GITHUB_PATH
+
+ - name: Clean up Disk space
+ uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
+
+ - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}"
+ run: |
+ nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results
diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml
index 6adb0ff..0b6b1f2 100644
--- a/.github/workflows/clean-up.yml
+++ b/.github/workflows/clean-up.yml
@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10
+ - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9
with:
stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days."
stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful."
diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml
index 6d94bcb..ab06316 100644
--- a/.github/workflows/download_pipeline.yml
+++ b/.github/workflows/download_pipeline.yml
@@ -12,6 +12,14 @@ on:
required: true
default: "dev"
pull_request:
+ types:
+ - opened
+ - edited
+ - synchronize
+ branches:
+ - main
+ - master
+ pull_request_target:
branches:
- main
- master
@@ -44,9 +52,9 @@ jobs:
- name: Disk space cleanup
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
- - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
- python-version: "3.14"
+ python-version: "3.12"
architecture: "x64"
- name: Setup Apptainer
@@ -57,7 +65,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
- pip install git+https://github.com/nf-core/tools.git
+ pip install git+https://github.com/nf-core/tools.git@dev
- name: Make a cache directory for the container images
run: |
@@ -112,7 +120,6 @@ jobs:
echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT"
- name: Compare container image counts
- id: count_comparison
run: |
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 }}
@@ -125,10 +132,3 @@ jobs:
else
echo "The pipeline can be downloaded successfully!"
fi
-
- - name: Upload Nextflow logfile for debugging purposes
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
- with:
- name: nextflow_logfile.txt
- path: .nextflow.log*
- include-hidden-files: true
diff --git a/.github/workflows/fix_linting.yml b/.github/workflows/fix-linting.yml
similarity index 80%
rename from .github/workflows/fix_linting.yml
rename to .github/workflows/fix-linting.yml
index 65b1dc7..8bda64e 100644
--- a/.github/workflows/fix_linting.yml
+++ b/.github/workflows/fix-linting.yml
@@ -13,13 +13,13 @@ jobs:
runs-on: ubuntu-latest
steps:
# Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
token: ${{ secrets.nf_core_bot_auth_token }}
# indication that the linting is being fixed
- name: React on comment
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
comment-id: ${{ github.event.comment.id }}
reactions: eyes
@@ -32,9 +32,9 @@ jobs:
GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
# Install and run pre-commit
- - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
- python-version: "3.14"
+ python-version: "3.12"
- name: Install pre-commit
run: pip install pre-commit
@@ -47,7 +47,7 @@ jobs:
# indication that the linting has finished
- name: react if linting finished succesfully
if: steps.pre-commit.outcome == 'success'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
comment-id: ${{ github.event.comment.id }}
reactions: "+1"
@@ -67,21 +67,21 @@ jobs:
- name: react if linting errors were fixed
id: react-if-fixed
if: steps.commit-and-push.outcome == 'success'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
comment-id: ${{ github.event.comment.id }}
reactions: hooray
- name: react if linting errors were not fixed
if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
comment-id: ${{ github.event.comment.id }}
reactions: confused
- name: react if linting errors were not fixed
if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
issue-number: ${{ github.event.issue.number }}
body: |
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index 30e6602..dbd52d5 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -3,6 +3,9 @@ name: nf-core linting
# It runs the `nf-core pipelines lint` and markdown lint tests to ensure
# that the code meets the nf-core guidelines.
on:
+ push:
+ branches:
+ - dev
pull_request:
release:
types: [published]
@@ -11,12 +14,12 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- - name: Set up Python 3.14
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
+ - name: Set up Python 3.12
+ uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
- python-version: "3.14"
+ python-version: "3.12"
- name: Install pre-commit
run: pip install pre-commit
@@ -28,18 +31,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out pipeline code
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Nextflow
uses: nf-core/setup-nextflow@v2
- - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
with:
- python-version: "3.14"
+ python-version: "3.12"
architecture: "x64"
- name: read .nf-core.yml
- uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0
+ uses: pietrobolcato/action-read-yaml@1.1.0
id: read_yml
with:
config: ${{ github.workspace }}/.nf-core.yml
@@ -71,7 +74,7 @@ jobs:
- name: Upload linting log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 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 e6e9bc2..0bed96d 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@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11
+ uses: dawidd6/action-download-artifact@80620a5d27ce0ae443b965134db88467fc607b43 # v7
with:
workflow: linting.yml
workflow_conclusion: completed
@@ -21,7 +21,7 @@ jobs:
run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT
- name: Post PR comment
- uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2
+ uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
number: ${{ steps.pr_number.outputs.pr_number }}
diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml
deleted file mode 100644
index e20bf6d..0000000
--- a/.github/workflows/nf-test.yml
+++ /dev/null
@@ -1,144 +0,0 @@
-name: Run nf-test
-on:
- pull_request:
- paths-ignore:
- - "docs/**"
- - "**/meta.yml"
- - "**/*.md"
- - "**/*.png"
- - "**/*.svg"
- release:
- types: [published]
- workflow_dispatch:
-
-# Cancel if a newer run is started
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
- cancel-in-progress: true
-
-env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- NFT_VER: "0.9.3"
- NFT_WORKDIR: "~"
- NXF_ANSI_LOG: false
- NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity
- NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity
-
-jobs:
- nf-test-changes:
- name: nf-test-changes
- runs-on: # use self-hosted runners
- - runs-on=${{ github.run_id }}-nf-test-changes
- - runner=4cpu-linux-x64
- outputs:
- shard: ${{ steps.set-shards.outputs.shard }}
- total_shards: ${{ steps.set-shards.outputs.total_shards }}
- steps:
- - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner
- run: |
- ls -la ./
- rm -rf ./* || true
- rm -rf ./.??* || true
- ls -la ./
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- with:
- fetch-depth: 0
-
- - name: get number of shards
- id: set-shards
- uses: ./.github/actions/get-shards
- env:
- NFT_VER: ${{ env.NFT_VER }}
- with:
- max_shards: 7
-
- - name: debug
- run: |
- echo ${{ steps.set-shards.outputs.shard }}
- echo ${{ steps.set-shards.outputs.total_shards }}
-
- nf-test:
- name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}"
- needs: [nf-test-changes]
- if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }}
- runs-on: # use self-hosted runners
- - runs-on=${{ github.run_id }}-nf-test
- - runner=4cpu-linux-x64
- strategy:
- fail-fast: false
- matrix:
- shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }}
- profile: [conda, docker, singularity]
- isMain:
- - ${{ github.base_ref == 'master' || github.base_ref == 'main' }}
- # Exclude conda and singularity on dev
- exclude:
- - isMain: false
- profile: "conda"
- - isMain: false
- profile: "singularity"
- NXF_VER:
- - "25.04.0"
- - "latest-everything"
- env:
- NXF_ANSI_LOG: false
- TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }}
-
- steps:
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- with:
- fetch-depth: 0
-
- - name: Run nf-test
- id: run_nf_test
- uses: ./.github/actions/nf-test
- continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }}
- env:
- NFT_WORKDIR: ${{ env.NFT_WORKDIR }}
- NXF_VERSION: ${{ matrix.NXF_VER }}
- with:
- profile: ${{ matrix.profile }}
- shard: ${{ matrix.shard }}
- total_shards: ${{ env.TOTAL_SHARDS }}
-
- - name: Report test status
- if: ${{ always() }}
- run: |
- if [[ "${{ steps.run_nf_test.outcome }}" == "failure" ]]; then
- echo "::error::Test with ${{ matrix.NXF_VER }} failed"
- # Add to workflow summary
- echo "## ❌ Test failed: ${{ matrix.profile }} | ${{ matrix.NXF_VER }} | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" >> $GITHUB_STEP_SUMMARY
- if [[ "${{ matrix.NXF_VER }}" == "latest-everything" ]]; then
- echo "::warning::Test with latest-everything failed but will not cause workflow failure. Please check if the error is expected or if it needs fixing."
- fi
- if [[ "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then
- exit 1
- fi
- fi
-
- confirm-pass:
- needs: [nf-test]
- if: always()
- runs-on: # use self-hosted runners
- - runs-on=${{ github.run_id }}-confirm-pass
- - runner=2cpu-linux-x64
- steps:
- - name: One or more tests failed (excluding latest-everything)
- if: ${{ contains(needs.*.result, 'failure') }}
- run: exit 1
-
- - name: One or more tests cancelled
- if: ${{ contains(needs.*.result, 'cancelled') }}
- run: exit 1
-
- - name: All tests ok
- if: ${{ contains(needs.*.result, 'success') }}
- run: exit 0
-
- - name: debug-print
- if: always()
- run: |
- echo "::group::DEBUG: `needs` Contents"
- echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}"
- echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}"
- echo "::endgroup::"
diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml
index e64cebd..450b1d5 100644
--- a/.github/workflows/release-announcements.yml
+++ b/.github/workflows/release-announcements.yml
@@ -14,11 +14,6 @@ jobs:
run: |
echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT
- - name: get description
- id: get_topics
- run: |
- echo "description=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .description' >> $GITHUB_OUTPUT
-
- uses: rzr/fediverse-action@master
with:
access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }}
@@ -28,16 +23,47 @@ jobs:
message: |
Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}!
- ${{ steps.get_topics.outputs.description }}
-
Please see the changelog: ${{ github.event.release.html_url }}
${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics
+ send-tweet:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # 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:
- - uses: zentered/bluesky-post-action@6461056ea355ea43b977e149f7bf76aaa572e5e8 # v0.3.0
+ - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0
with:
post: |
Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}!
diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template_version_comment.yml
similarity index 91%
rename from .github/workflows/template-version-comment.yml
rename to .github/workflows/template_version_comment.yml
index c5988af..537529b 100644
--- a/.github/workflows/template-version-comment.yml
+++ b/.github/workflows/template_version_comment.yml
@@ -9,12 +9,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out pipeline code
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Read template version from .nf-core.yml
- uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2
+ uses: nichmor/minimal-read-yaml@v0.0.2
id: read_yml
with:
config: ${{ github.workspace }}/.nf-core.yml
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 0000000..83599f6
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,10 @@
+image: nfcore/gitpod:latest
+tasks:
+ - name: Update Nextflow and setup pre-commit
+ command: |
+ pre-commit install --install-hooks
+ nextflow self-update
+
+vscode:
+ extensions:
+ - nf-core.nf-core-extensionpack # https://github.com/nf-core/vscode-extensionpack
diff --git a/.nf-core.yml b/.nf-core.yml
index 3251f8f..d2ae8e1 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -1,5 +1,5 @@
lint: {}
-nf_core_version: 3.4.1
+nf_core_version: 3.5.2
repository_type: pipeline
template:
author: Benjamin Wehnert & Max Stammnitz
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index d06777a..9e9f0e1 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -4,24 +4,10 @@ repos:
hooks:
- id: prettier
additional_dependencies:
- - prettier@3.6.2
- - repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v6.0.0
+ - prettier@3.2.5
+
+ - repo: https://github.com/editorconfig-checker/editorconfig-checker.python
+ rev: "3.0.3"
hooks:
- - id: trailing-whitespace
- args: [--markdown-linebreak-ext=md]
- exclude: |
- (?x)^(
- .*ro-crate-metadata.json$|
- modules/nf-core/.*|
- subworkflows/nf-core/.*|
- .*\.snap$
- )$
- - id: end-of-file-fixer
- exclude: |
- (?x)^(
- .*ro-crate-metadata.json$|
- modules/nf-core/.*|
- subworkflows/nf-core/.*|
- .*\.snap$
- )$
+ - id: editorconfig-checker
+ alias: ec
diff --git a/.prettierignore b/.prettierignore
index 2255e3e..edd29f0 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -10,5 +10,4 @@ testing/
testing*
*.pyc
bin/
-.nf-test/
ro-crate-metadata.json
diff --git a/.prettierrc.yml b/.prettierrc.yml
index 07dbd8b..c81f9a7 100644
--- a/.prettierrc.yml
+++ b/.prettierrc.yml
@@ -1,6 +1 @@
printWidth: 120
-tabWidth: 4
-overrides:
- - files: "*.{md,yml,yaml,html,css,scss,js,cff}"
- options:
- tabWidth: 2
diff --git a/README.md b/README.md
index 01d3d03..65a7e62 100644
--- a/README.md
+++ b/README.md
@@ -5,19 +5,17 @@
-[](https://github.com/codespaces/new/nf-core/deepmutscan)
-[](https://github.com/nf-core/deepmutscan/actions/workflows/nf-test.yml)
+[](https://github.com/nf-core/deepmutscan/actions/workflows/ci.yml)
[](https://github.com/nf-core/deepmutscan/actions/workflows/linting.yml)[](https://nf-co.re/deepmutscan/results)[](https://doi.org/10.5281/zenodo.XXXXXXX)
[](https://www.nf-test.com)
-[](https://www.nextflow.io/)
-[](https://github.com/nf-core/tools/releases/tag/3.4.1)
+[](https://www.nextflow.io/)
[](https://docs.conda.io/en/latest/)
[](https://www.docker.com/)
[](https://sylabs.io/docs/)
[](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/deepmutscan)
-[](https://nfcore.slack.com/channels/deepmutscan)[](https://bsky.app/profile/nf-co.re)[](https://mstdn.science/@nf_core)[](https://www.youtube.com/c/nf-core)
+[](https://nfcore.slack.com/channels/deepmutscan)[](https://twitter.com/nf_core)[](https://mstdn.science/@nf_core)[](https://www.youtube.com/c/nf-core)
## Introduction
diff --git a/assets/nf-core-deepmutscan_logo_light.png b/assets/nf-core-deepmutscan_logo_light.png
index d6c8e55..9824bb2 100644
Binary files a/assets/nf-core-deepmutscan_logo_light.png and b/assets/nf-core-deepmutscan_logo_light.png differ
diff --git a/conf/base.config b/conf/base.config
index 8f313fe..a0daf47 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -15,7 +15,7 @@ process {
memory = { 6.GB * task.attempt }
time = { 4.h * task.attempt }
- errorStrategy = { task.exitStatus in ((130..145) + 104 + 175) ? 'retry' : 'finish' }
+ errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' }
maxRetries = 1
maxErrors = '-1'
@@ -65,8 +65,4 @@ process {
errorStrategy = 'retry'
maxRetries = 2
}
- withLabel: process_gpu {
- ext.use_gpu = { workflow.profile.contains('gpu') }
- accelerator = { workflow.profile.contains('gpu') ? 1 : null }
- }
}
diff --git a/docs/images/nf-core-deepmutscan_logo_dark.png b/docs/images/nf-core-deepmutscan_logo_dark.png
index 398e0b2..8b387fa 100644
Binary files a/docs/images/nf-core-deepmutscan_logo_dark.png and b/docs/images/nf-core-deepmutscan_logo_dark.png differ
diff --git a/docs/images/nf-core-deepmutscan_logo_light.png b/docs/images/nf-core-deepmutscan_logo_light.png
index f8bbe08..ed93fd9 100644
Binary files a/docs/images/nf-core-deepmutscan_logo_light.png and b/docs/images/nf-core-deepmutscan_logo_light.png differ
diff --git a/docs/output.md b/docs/output.md
index 116e114..dfbbbef 100644
--- a/docs/output.md
+++ b/docs/output.md
@@ -75,23 +75,24 @@ This directory is created during the second series of steps of the pipeline, fea
Output files
- `library_QC/`
+
- `counts_heatmap.pdf`: a complete heatmap of absolute mutant counts, stratified by mutant amino acid (Y-axis) per position (X-axis)
-
+ 
- `counts_per_cov_heatmap.pdf`: as above, but as a fraction of the total sequencing coverage
- `logdiff_plot.pdf`: sorted, log-scale coverage distribution of all mutants
-
+ 
- `logdiff_varying_bases.pdf`: as above, but stratified by hamming distance to the wildtype nucleotide sequence (colour shading)
- `rolling_coverage.pdf`: sliding-window rolling coverage
-
+ 
- `rolling_counts.pdf`: sliding-window rolling coverage, stratified by hamming distance to the wildtype nucleotide sequence (colour shading)
-
+ 
- `rolling_counts_per_cov.pdf`: as above, but as a fraction of the total sequencing coverage
- `SeqDepth.pdf` (optional via the `--run_seqdepth` argument): rarefaction curve of the sequencing coverage and how it relates to the percentage of programmed variants detected
-
+ 
@@ -103,15 +104,16 @@ This directory is created during the final series of steps of the pipeline, feat
Output files
- `fitness/`
+
- `counts_merged.tsv`: summarised gene variant counts across all input and output samples
- `default_results/fitness_estimation_count_correlation.pdf`: pair-wise replicate variant count scatterplots and correlations between all specified samples
-
+ 
- `default_results/fitness_estimation_fitness_correlation.pdf`: pair-wise fitness replicate scatterplots and correlations between all specified output samples
-
+ 
- `default_results/fitness_heatmap.pdf`: a complete heatmap of absolute mutant counts, stratified by mutant amino acid (Y-axis) per position (X-axis)
-
+ 
- `default_results/fitness_estimation.tsv`: table file with all fitness and fitness error estimates calculated
- `DiMSum_results/dimsum_results/` (optional): subfolder with the full set of [DiMSum](https://github.com/lehner-lab/DiMSum) outputs, including the associated `.HTML` report, `.Rdata` and `.tsv` files with fitness and fitness error estimates
diff --git a/docs/usage.md b/docs/usage.md
index 55f7d74..c4067f6 100644
--- a/docs/usage.md
+++ b/docs/usage.md
@@ -153,6 +153,7 @@ This module will feature strategies to distinguish true single nucleotide varian
The final step of the pipeline will perform fitness estimation based on mutation counts. By default, we calculate fitness scores as the logarithm of variants' output to input ratio, normalised to that of the provided wildtype nucleotide sequence.
Future expansions may include:
+
- Integration of other popular fitness inference tools, including [DiMSum](https://github.com/lehner-lab/DiMSum), [Enrich2](https://github.com/FowlerLab/Enrich2), [rosace](https://github.com/pimentellab/rosace/) and [mutscan](https://github.com/fmicompbio/mutscan)
- Standardised output formats for downstream analyses and comparison
@@ -221,7 +222,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof
- `shifter`
- A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/)
- `charliecloud`
- - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/)
+ - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/)
- `apptainer`
- A generic configuration profile to be used with [Apptainer](https://apptainer.org/)
- `wave`
diff --git a/main.nf b/main.nf
index 2df1740..5f339be 100644
--- a/main.nf
+++ b/main.nf
@@ -72,10 +72,7 @@ workflow {
params.monochrome_logs,
args,
params.outdir,
- params.input,
- params.help,
- params.help_full,
- params.show_hidden
+ params.input
)
//
diff --git a/modules.json b/modules.json
index 966776f..5c07b2b 100644
--- a/modules.json
+++ b/modules.json
@@ -17,12 +17,12 @@
},
"fastqc": {
"branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164",
"installed_by": ["modules"]
},
"multiqc": {
"branch": "master",
- "git_sha": "e10b76ca0c66213581bec2833e30d31f239dec0b",
+ "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d",
"installed_by": ["modules"]
}
}
@@ -31,17 +31,17 @@
"nf-core": {
"utils_nextflow_pipeline": {
"branch": "master",
- "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
+ "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b",
"installed_by": ["subworkflows"]
},
"utils_nfcore_pipeline": {
"branch": "master",
- "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
+ "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a",
"installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
- "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd",
+ "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e",
"installed_by": ["subworkflows"]
}
}
diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml
index f9f54ee..691d4c7 100644
--- a/modules/nf-core/fastqc/environment.yml
+++ b/modules/nf-core/fastqc/environment.yml
@@ -1,5 +1,3 @@
----
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
channels:
- conda-forge
- bioconda
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index 23e1663..752c3a1 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 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 = task.memory ? task.memory.toUnit('MB') / task.cpus : null
+ def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus
// 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 c8d9d02..2b2e62b 100644
--- a/modules/nf-core/fastqc/meta.yml
+++ b/modules/nf-core/fastqc/meta.yml
@@ -29,10 +29,9 @@ input:
description: |
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
- ontologies: []
output:
- html:
- - - meta:
+ - html:
+ - meta:
type: map
description: |
Groovy Map containing sample information
@@ -41,9 +40,8 @@ output:
type: file
description: FastQC report
pattern: "*_{fastqc.html}"
- ontologies: []
- zip:
- - - meta:
+ - zip:
+ - meta:
type: map
description: |
Groovy Map containing sample information
@@ -52,14 +50,11 @@ output:
type: file
description: FastQC report archive
pattern: "*_{fastqc.zip}"
- ontologies: []
- versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
authors:
- "@drpatelh"
- "@grst"
diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml
new file mode 100644
index 0000000..7834294
--- /dev/null
+++ b/modules/nf-core/fastqc/tests/tags.yml
@@ -0,0 +1,2 @@
+fastqc:
+ - modules/nf-core/fastqc/**
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
index dd513cb..6f5b867 100644
--- a/modules/nf-core/multiqc/environment.yml
+++ b/modules/nf-core/multiqc/environment.yml
@@ -1,7 +1,5 @@
----
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::multiqc=1.31
+ - bioconda::multiqc=1.25.1
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 5288f5c..cc0643e 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://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ef/eff0eafe78d5f3b65a6639265a16b89fdca88d06d18894f90fcdb50142004329/data' :
- 'community.wave.seqera.io/library/multiqc:1.31--1efbafd542a23882' }"
+ 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' :
+ 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }"
input:
path multiqc_files, stageAs: "?/*"
diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml
index ce30eb7..b16c187 100644
--- a/modules/nf-core/multiqc/meta.yml
+++ b/modules/nf-core/multiqc/meta.yml
@@ -15,71 +15,57 @@ tools:
licence: ["GPL-3.0-or-later"]
identifier: biotools:multiqc
input:
- - multiqc_files:
- type: file
- description: |
- List of reports / files recognised by MultiQC, for example the html and zip output of FastQC
- ontologies: []
- - multiqc_config:
- type: file
- description: Optional config yml for MultiQC
- pattern: "*.{yml,yaml}"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
- - extra_multiqc_config:
- type: file
- description: Second optional config yml for MultiQC. Will override common sections
- in multiqc_config.
- pattern: "*.{yml,yaml}"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
- - multiqc_logo:
- type: file
- description: Optional logo file for MultiQC
- pattern: "*.{png}"
- ontologies: []
- - replace_names:
- type: file
- description: |
- Optional two-column sample renaming file. First column a set of
- patterns, second column a set of corresponding replacements. Passed via
- MultiQC's `--replace-names` option.
- pattern: "*.{tsv}"
- ontologies:
- - edam: http://edamontology.org/format_3475 # TSV
- - sample_names:
- type: file
- description: |
- Optional TSV file with headers, passed to the MultiQC --sample_names
- argument.
- pattern: "*.{tsv}"
- ontologies:
- - edam: http://edamontology.org/format_3475 # TSV
-output:
- report:
- - "*multiqc_report.html":
+ - - multiqc_files:
type: file
- description: MultiQC report file
- pattern: "multiqc_report.html"
- ontologies: []
- data:
- - "*_data":
- type: directory
- description: MultiQC data dir
- pattern: "multiqc_data"
- plots:
- - "*_plots":
+ description: |
+ List of reports / files recognised by MultiQC, for example the html and zip output of FastQC
+ - - multiqc_config:
type: file
- description: Plots created by MultiQC
- pattern: "*_data"
- ontologies: []
- versions:
- - versions.yml:
+ description: Optional config yml for MultiQC
+ pattern: "*.{yml,yaml}"
+ - - extra_multiqc_config:
type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ description: Second optional config yml for MultiQC. Will override common sections
+ in multiqc_config.
+ pattern: "*.{yml,yaml}"
+ - - multiqc_logo:
+ type: file
+ description: Optional logo file for MultiQC
+ pattern: "*.{png}"
+ - - replace_names:
+ type: file
+ description: |
+ Optional two-column sample renaming file. First column a set of
+ patterns, second column a set of corresponding replacements. Passed via
+ MultiQC's `--replace-names` option.
+ pattern: "*.{tsv}"
+ - - sample_names:
+ type: file
+ description: |
+ Optional TSV file with headers, passed to the MultiQC --sample_names
+ argument.
+ pattern: "*.{tsv}"
+output:
+ - report:
+ - "*multiqc_report.html":
+ type: file
+ description: MultiQC report file
+ pattern: "multiqc_report.html"
+ - data:
+ - "*_data":
+ type: directory
+ description: MultiQC data dir
+ pattern: "multiqc_data"
+ - plots:
+ - "*_plots":
+ type: file
+ description: Plots created by MultiQC
+ pattern: "*_data"
+ - versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
authors:
- "@abhi18av"
- "@bunop"
diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap
index 17881d1..2fcbb5f 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,8968b114a3e20756d8af2b80713bcc4f"
+ "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.0",
+ "nextflow": "24.04.4"
},
- "timestamp": "2025-09-08T20:57:36.139055243"
+ "timestamp": "2024-10-02T17:51:46.317523"
},
"multiqc_stub": {
"content": [
@@ -17,25 +17,25 @@
"multiqc_report.html",
"multiqc_data",
"multiqc_plots",
- "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f"
+ "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.0",
+ "nextflow": "24.04.4"
},
- "timestamp": "2025-09-08T20:59:15.142230631"
+ "timestamp": "2024-10-02T17:52:20.680978"
},
"multiqc_versions_config": {
"content": [
[
- "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f"
+ "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.0",
+ "nextflow": "24.04.4"
},
- "timestamp": "2025-09-08T20:58:29.629087066"
+ "timestamp": "2024-10-02T17:52:09.185842"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml
new file mode 100644
index 0000000..bea6c0d
--- /dev/null
+++ b/modules/nf-core/multiqc/tests/tags.yml
@@ -0,0 +1,2 @@
+multiqc:
+ - modules/nf-core/multiqc/**
diff --git a/nextflow.config b/nextflow.config
index 5703a56..3f80077 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -42,7 +42,7 @@ params {
email_on_fail = null
plaintext_email = false
monochrome_logs = false
- hook_url = System.getenv('HOOK_URL')
+ hook_url = null
help = false
help_full = false
show_hidden = false
@@ -103,18 +103,7 @@ profiles {
apptainer.enabled = false
process.containerOptions = '-u $(id -u):$(id -g)'
}
- arm64 {
- process.arch = 'arm64'
- // TODO https://github.com/nf-core/modules/issues/6694
- // For now if you're using arm64 you have to use wave for the sake of the maintainers
- // wave profile
- apptainer.ociAutoPull = true
- singularity.ociAutoPull = true
- wave.enabled = true
- wave.freeze = true
- wave.strategy = 'conda,container'
- }
- emulate_amd64 {
+ arm {
docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
}
singularity {
@@ -259,14 +248,14 @@ env {
}
// Set bash options
-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
-]
+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.
+"""
// Disable process selector warnings by default. Use debug profile to enable warnings.
nextflow.enable.configProcessNamesValidation = false
@@ -291,6 +280,7 @@ dag {
manifest {
name = 'nf-core/deepmutscan'
author = """Benjamin Wehnert & Max Stammnitz""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead
+ author = """Benjamin Wehnert & Max Stammnitz""" // 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
[
@@ -306,19 +296,46 @@ manifest {
description = """Until now, most Deep Mutational Scanning (DMS) experiments relied on variant-specific barcoded libraries for sequencing. This method enabled DMS on large proteins and led to many great publications. Recently, efforts have increased to make use of the classic and more simple random fragmentation-based short-read sequencing (“shotgun-sequencing”). This saves time and money and due to its simpler experimental design is less prone to mistakes. dmscore handles the essential computational steps, processing the raw FASTQ files and generating a count table of variants. Along the way, it provides multiple QC metrics, enabling users to quickly evaluate the success of their experimental setup."""
mainScript = 'main.nf'
defaultBranch = 'master'
- nextflowVersion = '!>=25.04.0'
+ nextflowVersion = '!>=24.04.2'
version = '1.0.0'
doi = ''
}
// Nextflow plugins
plugins {
- id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet
+ id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet
}
validation {
defaultIgnoreParams = ["genomes"]
monochromeLogs = params.monochrome_logs
+ help {
+ enabled = true
+ command = "nextflow run nf-core/deepmutscan -profile --input samplesheet.csv --outdir "
+ fullParameter = "help_full"
+ showHiddenParameter = "show_hidden"
+ beforeText = """
+-\033[2m----------------------------------------------------\033[0m-
+ \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m
+\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m
+\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m
+\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m
+ \033[0;32m`._,._,\'\033[0m
+\033[0;35m nf-core/deepmutscan ${manifest.version}\033[0m
+-\033[2m----------------------------------------------------\033[0m-
+"""
+ afterText = """${manifest.doi ? "\n* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""}
+* The nf-core framework
+ https://doi.org/10.1038/s41587-020-0439-x
+
+* Software dependencies
+ https://github.com/nf-core/deepmutscan/blob/master/CITATIONS.md
+"""
+ }
+ summary {
+ beforeText = validation.help.beforeText
+ afterText = validation.help.afterText
+ }
}
// Load modules.config for DSL2 module specific options
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 778f6c9..706dcb2 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -52,12 +52,12 @@
"minimum": 1,
"default": 3
},
- "sliding_window_size": {
+ "sliding_window_size": {
"type": "integer",
"description": "To flatten graphs in plots (e.g. `GLOBAL_POS_BIASES_COUNTS` function)",
"default": 10
},
- "aimed_cov": {
+ "aimed_cov": {
"type": "integer",
"description": "aimed coverage (assuming equal spread) to visualize threshold in plots",
"default": 100
@@ -270,18 +270,6 @@
"fa_icon": "far calendar",
"description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.",
"hidden": true
- },
- "help": {
- "type": ["boolean", "string"],
- "description": "Display the help message."
- },
- "help_full": {
- "type": "boolean",
- "description": "Display the full detailed help message."
- },
- "show_hidden": {
- "type": "boolean",
- "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)."
}
}
}
diff --git a/nf-test.config b/nf-test.config
deleted file mode 100644
index 3a1fff5..0000000
--- a/nf-test.config
+++ /dev/null
@@ -1,24 +0,0 @@
-config {
- // location for all nf-test tests
- testsDir "."
-
- // nf-test directory including temporary files for each test
- workDir System.getenv("NFT_WORKDIR") ?: ".nf-test"
-
- // location of an optional nextflow.config file specific for executing tests
- configFile "tests/nextflow.config"
-
- // ignore tests coming from the nf-core/modules repo
- ignore 'modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'
-
- // run all test with defined profile(s) from the main nextflow.config
- profile "test"
-
- // list of filenames or patterns that should be trigger a full test run
- triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore'
-
- // load the necessary plugins
- plugins {
- load "nft-utils@0.0.3"
- }
-}
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
index ea70212..3efd931 100644
--- a/ro-crate-metadata.json
+++ b/ro-crate-metadata.json
@@ -129,6 +129,11 @@
"SoftwareSourceCode",
"ComputationalWorkflow"
],
+ "@type": [
+ "File",
+ "SoftwareSourceCode",
+ "ComputationalWorkflow"
+ ],
"dateCreated": "",
"dateModified": "2025-11-10T10:04:57Z",
"dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/",
@@ -142,6 +147,12 @@
"name": [
"nf-core/deepmutscan"
],
+ "license": [
+ "MIT"
+ ],
+ "name": [
+ "nf-core/deepmutscan"
+ ],
"programmingLanguage": {
"@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow"
},
@@ -155,6 +166,13 @@
"version": [
"1.0.0"
]
+ "url": [
+ "https://github.com/nf-core/deepmutscan",
+ "https://nf-co.re/deepmutscan/1.0.0/"
+ ],
+ "version": [
+ "1.0.0"
+ ]
},
{
"@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow",
@@ -167,6 +185,7 @@
"@id": "https://www.nextflow.io/"
},
"version": "!>=24.04.2"
+ "version": "!>=24.04.2"
},
{
"@id": "#f4a3c981-8917-4281-9629-144b2738afbd",
@@ -186,6 +205,7 @@
"@type": "TestInstance",
"name": "GitHub Actions workflow for testing nf-core/deepmutscan",
"resource": "repos/nf-core/deepmutscan/actions/workflows/ci.yml",
+ "resource": "repos/nf-core/deepmutscan/actions/workflows/ci.yml",
"runsOn": {
"@id": "https://w3id.org/ro/terms/test#GithubService"
},
diff --git a/subworkflows/local/utils_nfcore_deepmutscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_deepmutscan_pipeline/main.nf
index 2368e89..fca70b3 100644
--- a/subworkflows/local/utils_nfcore_deepmutscan_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_deepmutscan_pipeline/main.nf
@@ -11,7 +11,6 @@
include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin'
include { paramsSummaryMap } from 'plugin/nf-schema'
include { samplesheetToList } from 'plugin/nf-schema'
-include { paramsHelp } from 'plugin/nf-schema'
include { completionEmail } from '../../nf-core/utils_nfcore_pipeline'
include { completionSummary } from '../../nf-core/utils_nfcore_pipeline'
include { imNotification } from '../../nf-core/utils_nfcore_pipeline'
@@ -33,9 +32,6 @@ workflow PIPELINE_INITIALISATION {
nextflow_cli_args // array: List of positional nextflow CLI args
outdir // string: The output directory where the results will be saved
input // string: Path to input samplesheet
- help // boolean: Display help message and exit
- help_full // boolean: Show the full help message
- show_hidden // boolean: Show hidden parameters in the help message
main:
@@ -54,35 +50,10 @@ workflow PIPELINE_INITIALISATION {
//
// Validate parameters and generate parameter summary to stdout
//
- before_text = """
--\033[2m----------------------------------------------------\033[0m-
- \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m
-\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m
-\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m
-\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m
- \033[0;32m`._,._,\'\033[0m
-\033[0;35m nf-core/deepmutscan ${workflow.manifest.version}\033[0m
--\033[2m----------------------------------------------------\033[0m-
-"""
- after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${workflow.manifest.doi ? "\n" : ""}
-* The nf-core framework
- https://doi.org/10.1038/s41587-020-0439-x
-
-* Software dependencies
- https://github.com/nf-core/deepmutscan/blob/master/CITATIONS.md
-"""
- command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir "
-
UTILS_NFSCHEMA_PLUGIN (
workflow,
validate_params,
- null,
- help,
- help_full,
- show_hidden,
- before_text,
- after_text,
- command
+ null
)
//
@@ -304,3 +275,4 @@ def methodsDescriptionText(mqc_methods_yaml) {
return description_html.toString()
}
+
diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml
new file mode 100644
index 0000000..f847611
--- /dev/null
+++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml
@@ -0,0 +1,2 @@
+subworkflows/utils_nextflow_pipeline:
+ - subworkflows/nf-core/utils_nextflow_pipeline/**
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml
new file mode 100644
index 0000000..ac8523c
--- /dev/null
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml
@@ -0,0 +1,2 @@
+subworkflows/utils_nfcore_pipeline:
+ - subworkflows/nf-core/utils_nfcore_pipeline/**
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
index ee4738c..4994303 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf
+++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
@@ -4,7 +4,6 @@
include { paramsSummaryLog } from 'plugin/nf-schema'
include { validateParameters } from 'plugin/nf-schema'
-include { paramsHelp } from 'plugin/nf-schema'
workflow UTILS_NFSCHEMA_PLUGIN {
@@ -16,56 +15,29 @@ workflow UTILS_NFSCHEMA_PLUGIN {
// when this input is empty it will automatically use the configured schema or
// "${projectDir}/nextflow_schema.json" as default. This input should not be empty
// for meta pipelines
- help // boolean: show help message
- help_full // boolean: show full help message
- show_hidden // boolean: show hidden parameters in help message
- before_text // string: text to show before the help message and parameters summary
- after_text // string: text to show after the help message and parameters summary
- command // string: an example command of the pipeline
main:
- if(help || help_full) {
- help_options = [
- beforeText: before_text,
- afterText: after_text,
- command: command,
- showHidden: show_hidden,
- fullHelp: help_full,
- ]
- if(parameters_schema) {
- help_options << [parametersSchema: parameters_schema]
- }
- log.info paramsHelp(
- help_options,
- params.help instanceof String ? params.help : "",
- )
- exit 0
- }
-
//
// Print parameter summary to stdout. This will display the parameters
// that differ from the default given in the JSON schema
//
-
- summary_options = [:]
if(parameters_schema) {
- summary_options << [parametersSchema: parameters_schema]
+ log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema)
+ } else {
+ log.info paramsSummaryLog(input_workflow)
}
- log.info before_text
- log.info paramsSummaryLog(summary_options, input_workflow)
- log.info after_text
//
// Validate the parameters using nextflow_schema.json or the schema
// given via the validation.parametersSchema configuration option
//
if(validate_params) {
- validateOptions = [:]
if(parameters_schema) {
- validateOptions << [parametersSchema: parameters_schema]
+ validateParameters(parameters_schema:parameters_schema)
+ } else {
+ validateParameters()
}
- validateParameters(validateOptions)
}
emit:
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test
index c977917..8fb3016 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test
@@ -25,12 +25,6 @@ nextflow_workflow {
input[0] = workflow
input[1] = validate_params
input[2] = ""
- input[3] = false
- input[4] = false
- input[5] = false
- input[6] = ""
- input[7] = ""
- input[8] = ""
"""
}
}
@@ -57,12 +51,6 @@ nextflow_workflow {
input[0] = workflow
input[1] = validate_params
input[2] = ""
- input[3] = false
- input[4] = false
- input[5] = false
- input[6] = ""
- input[7] = ""
- input[8] = ""
"""
}
}
@@ -89,12 +77,6 @@ nextflow_workflow {
input[0] = workflow
input[1] = validate_params
input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json"
- input[3] = false
- input[4] = false
- input[5] = false
- input[6] = ""
- input[7] = ""
- input[8] = ""
"""
}
}
@@ -121,12 +103,6 @@ nextflow_workflow {
input[0] = workflow
input[1] = validate_params
input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json"
- input[3] = false
- input[4] = false
- input[5] = false
- input[6] = ""
- input[7] = ""
- input[8] = ""
"""
}
}
@@ -138,36 +114,4 @@ nextflow_workflow {
)
}
}
-
- test("Should create a help message") {
-
- when {
-
- params {
- test_data = ''
- outdir = null
- }
-
- workflow {
- """
- validate_params = true
- input[0] = workflow
- input[1] = validate_params
- input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json"
- input[3] = true
- input[4] = false
- input[5] = false
- input[6] = "Before"
- input[7] = "After"
- input[8] = "nextflow run test/test"
- """
- }
- }
-
- then {
- assertAll(
- { assert workflow.success }
- )
- }
- }
}
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
index 8d8c737..0907ac5 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
@@ -1,8 +1,8 @@
plugins {
- id "nf-schema@2.5.1"
+ id "nf-schema@2.1.0"
}
validation {
parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json"
monochromeLogs = true
-}
+}
\ No newline at end of file
diff --git a/tests/.nftignore b/tests/.nftignore
deleted file mode 100644
index e128a12..0000000
--- a/tests/.nftignore
+++ /dev/null
@@ -1,12 +0,0 @@
-.DS_Store
-multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt
-multiqc/multiqc_data/multiqc.parquet
-multiqc/multiqc_data/multiqc.log
-multiqc/multiqc_data/multiqc_data.json
-multiqc/multiqc_data/multiqc_sources.txt
-multiqc/multiqc_data/multiqc_software_versions.txt
-multiqc/multiqc_data/llms-full.txt
-multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png}
-multiqc/multiqc_report.html
-fastqc/*_fastqc.{html,zip}
-pipeline_info/*.{html,json,txt,yml}
diff --git a/tests/default.nf.test b/tests/default.nf.test
deleted file mode 100644
index efb3834..0000000
--- a/tests/default.nf.test
+++ /dev/null
@@ -1,33 +0,0 @@
-nextflow_pipeline {
-
- name "Test pipeline"
- script "../main.nf"
- tag "pipeline"
-
- test("-profile test") {
-
- when {
- params {
- outdir = "$outputDir"
- }
- }
-
- then {
- // stable_name: All files + folders in ${params.outdir}/ with a stable name
- def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}'])
- // stable_path: All files in ${params.outdir}/ with stable content
- def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore')
- assertAll(
- { assert workflow.success},
- { assert snapshot(
- // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions
- removeNextflowVersion("$outputDir/pipeline_info/nf_core_deepmutscan_software_mqc_versions.yml"),
- // All stable path name, with a relative path
- stable_name,
- // All files with stable contents
- stable_path
- ).match() }
- )
- }
- }
-}
diff --git a/tests/nextflow.config b/tests/nextflow.config
deleted file mode 100644
index 662ccd0..0000000
--- a/tests/nextflow.config
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-========================================================================================
- Nextflow config file for running nf-test tests
-========================================================================================
-*/
-
-// TODO nf-core: Specify any additional parameters here
-// Or any resources requirements
-params {
- modules_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/'
- pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/deepmutscan'
-}
-
-aws.client.anonymous = true // fixes S3 access issues on self-hosted runners