From e6a3c759cfc0545c51706da281083faa5582975b Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 8 Oct 2024 12:31:59 +0000 Subject: [PATCH 1/2] Template update for nf-core/tools version 3.0.0 --- .editorconfig | 4 + .github/CONTRIBUTING.md | 10 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/awsfulltest.yml | 23 +- .github/workflows/ci.yml | 17 +- .github/workflows/download_pipeline.yml | 53 ++- .github/workflows/linting.yml | 23 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 2 +- .../workflows/template_version_comment.yml | 43 ++ .gitpod.yml | 7 +- .nf-core.yml | 17 +- .pre-commit-config.yaml | 2 +- .prettierignore | 1 + CITATIONS.md | 4 +- README.md | 5 +- assets/nf-core-scdownstream_logo_light.png | Bin 103434 -> 104836 bytes assets/schema_input.json | 2 +- conf/base.config | 34 +- conf/igenomes_ignored.config | 9 + conf/modules.config | 1 - conf/test.config | 13 +- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes .../images/nf-core-scdownstream_logo_dark.png | Bin 27891 -> 27695 bytes .../nf-core-scdownstream_logo_light.png | Bin 23359 -> 23476 bytes docs/output.md | 11 +- docs/usage.md | 12 +- main.nf | 10 +- modules.json | 12 +- modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/fastqc/main.nf | 5 +- modules/nf-core/fastqc/meta.yml | 57 +-- modules/nf-core/fastqc/tests/main.nf.test | 225 ++++++++--- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++++++++++++++++-- modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 78 ++-- modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + nextflow.config | 146 ++++--- nextflow_schema.json | 85 +--- .../main.nf | 56 +-- .../nf-core/utils_nextflow_pipeline/main.nf | 24 +- .../tests/nextflow.config | 2 +- .../nf-core/utils_nfcore_pipeline/main.nf | 45 ++- .../nf-core/utils_nfschema_plugin/main.nf | 46 +++ .../nf-core/utils_nfschema_plugin/meta.yml | 35 ++ .../utils_nfschema_plugin/tests/main.nf.test | 117 ++++++ .../tests/nextflow.config | 8 + .../tests/nextflow_schema.json | 8 +- .../nf-core/utils_nfvalidation_plugin/main.nf | 62 --- .../utils_nfvalidation_plugin/meta.yml | 44 --- .../tests/main.nf.test | 200 ---------- .../utils_nfvalidation_plugin/tests/tags.yml | 2 - workflows/scdownstream.nf | 23 +- 58 files changed, 1204 insertions(+), 806 deletions(-) create mode 100644 .github/workflows/template_version_comment.yml create mode 100644 conf/igenomes_ignored.config delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/main.nf create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/meta.yml create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config rename subworkflows/nf-core/{utils_nfvalidation_plugin => utils_nfschema_plugin}/tests/nextflow_schema.json (95%) delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/main.nf delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml diff --git a/.editorconfig b/.editorconfig index 72dda28..e105881 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,7 @@ 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 @@ -25,9 +26,12 @@ 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 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 3df0221..7f28fb0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/scdownstream, the standard workflow 1. Check that there isn't already an issue about your idea in the [nf-core/scdownstream issues](https://github.com/nf-core/scdownstream/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/scdownstream repository](https://github.com/nf-core/scdownstream) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -40,7 +40,7 @@ There are typically two types of tests that run: ### Lint tests `nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. @@ -75,7 +75,7 @@ If you wish to contribute a new step, please use the following coding standards: 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). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +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 command in `.github/workflow/ci.yml`. @@ -86,7 +86,7 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements @@ -103,7 +103,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Nextflow version bumping -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` ### Images and figures diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9fe8b95..a78f243 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,7 +17,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/scdo - [ ] 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/scdownstream/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/scdownstream _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 7cf6f2b..2d7a0f0 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,18 +1,33 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] + pull_request: + branches: + - master workflow_dispatch: + pull_request_review: + types: [submitted] + jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/scdownstream' + if: github.repository == 'nf-core/scdownstream' && github.event.review.state == 'approved' runs-on: ubuntu-latest steps: + - uses: octokit/request-action@v2.x + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + 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/ci.yml b/.github/workflows/ci.yml index e211b6a..dbdb1c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,7 @@ on: pull_request: release: types: [published] + workflow_dispatch: env: NXF_ANSI_LOG: false @@ -24,7 +25,7 @@ jobs: strategy: matrix: NXF_VER: - - "23.04.0" + - "24.04.2" - "latest-everything" steps: - name: Check out pipeline code @@ -38,9 +39,21 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run pipeline with test data + - name: Run pipeline with test data (docker) # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + + - name: Run pipeline with test data (singularity) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results + if: "${{ github.base_ref == 'master' }}" + + - name: Run pipeline with test data (conda) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results + if: "${{ github.base_ref == 'master' }}" diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2d20d64..713dc3e 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,4 +1,4 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually @@ -8,7 +8,7 @@ on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: @@ -39,9 +39,11 @@ jobs: with: python-version: "3.12" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 - name: Install dependencies run: | @@ -54,33 +56,64 @@ jobs: 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 + - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ + nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ --revision ${{ env.REPO_BRANCH }} \ --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} + - 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} + - name: Run the downloaded pipeline (stub) id: stub_run_pipeline continue-on-error: true env: - NXF_SINGULARITY_CACHEDIR: ./ + 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 - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline if: ${{ job.steps.stub_run_pipeline.status == failure() }} env: - NXF_SINGULARITY_CACHEDIR: ./ + 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 + + - 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} + + - 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 }} + 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 + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 1fcafe8..b882838 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,6 +1,6 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: push: @@ -41,17 +41,32 @@ jobs: python-version: "3.12" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yaml + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 40acc23..42e519b 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@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 03ecfcf..c6ba35d 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,7 +12,7 @@ jobs: - name: get topics and convert to hashtags id: get_topics 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' ' ')" >> $GITHUB_OUTPUT + 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 - uses: rzr/fediverse-action@master with: diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml new file mode 100644 index 0000000..9dea41f --- /dev/null +++ b/.github/workflows/template_version_comment.yml @@ -0,0 +1,43 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Read template version from .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + run: pip list --outdated | grep nf-core + + - name: Post nf-core template version comment + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + if: | + ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + ## :warning: Newer version of the nf-core template is available. + + Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + Please update your pipeline to the latest version. + + For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + # diff --git a/.gitpod.yml b/.gitpod.yml index 105a182..4611863 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,17 +4,14 @@ tasks: command: | pre-commit install --install-hooks nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS vscode: extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code + #- 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 + - nextflow.nextflow # Nextflow syntax highlighting - oderwat.indent-rainbow # Highlight indentation level - streetsidesoftware.code-spell-checker # Spelling checker for source code - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index e0b85a7..db32ffb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,2 +1,17 @@ +bump_version: null +lint: null +nf_core_version: 3.0.0 +org_path: null repository_type: pipeline -nf_core_version: "2.14.1" +template: + author: Nico Trummer + description: A single cell transcriptomics pipeline for QC, integration and making + the results presentable + force: false + is_nfcore: true + name: scdownstream + org: nf-core + outdir: . + skip_features: null + version: 1.0dev +update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1d..9e9f0e1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - prettier@3.2.5 - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" + rev: "3.0.3" hooks: - id: editorconfig-checker alias: ec diff --git a/.prettierignore b/.prettierignore index 437d763..610e506 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ + email_template.html adaptivecard.json slackreport.json diff --git a/CITATIONS.md b/CITATIONS.md index 3cde8d8..857ee9f 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,11 +12,11 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +> Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. ## Software packaging/containerisation tools diff --git a/README.md b/README.md index ba45943..ca262c9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/scdownstream/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/scdownstream/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/scdownstream/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -67,8 +67,7 @@ nextflow run nf-core/scdownstream \ ``` > [!WARNING] -> 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/usage/configuration#custom-configuration-files). +> 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). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/scdownstream/usage) and the [parameter documentation](https://nf-co.re/scdownstream/parameters). diff --git a/assets/nf-core-scdownstream_logo_light.png b/assets/nf-core-scdownstream_logo_light.png index 096d69957274afc03fd83c5274efbb258f49e394..ce1022db4240e34c419bce6f9afb9bb8b9ea7a6b 100644 GIT binary patch literal 104836 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�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

)Ya3-$K7Ws|Js%&*UOM8%9W_FCP?|&NAJlP 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 PyGES3{hu|a-q-#gR=;&a literal 103434 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 diff --git a/assets/schema_input.json b/assets/schema_input.json index 26075bd..654917e 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/scdownstream/master/assets/schema_input.json", "title": "nf-core/scdownstream pipeline - params.input schema", "description": "Schema for the file provided with params.input", diff --git a/conf/base.config b/conf/base.config index ee30f89..3f443a1 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,9 +11,9 @@ process { // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 @@ -27,30 +27,30 @@ process { // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 0000000..b4034d8 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index d203d2b..d266a38 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -21,7 +21,6 @@ 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 433d8a4..7696a23 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,15 +10,18 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // 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 diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 zcmeFZRal$t)-Fn+z*nS{Vx>rm6qiDAOL2F1cMtAuDNvx0;#Q!zyE_zjcbDMqmSlzR zn{)pEI@tSUUwdu2)&Y>bJb7fuJ?=5a1EER^lGqq;F_4guu%)HMRFIHRN0E?_z5hZ+ zJaJ}X&O!Wm=At4gf>b&}x`%l4+)`Lx7zwEYjQMDcig^FRNlM!V3F)=#)7P^V3xFpQ z(!7JTn6R3s!6EcTteK|QPPjx@DDOv5T2*CXB}Z%z@|SP-DsObzPh`FaVcdV&m0)j; zcZ>LN@}*RhsyUw6to^1IV&KrBgSL*D84<+V=b92tLUGmkCzrla{Dr!*h^X~IGAQjM zyD9lfz=>mTe@ql{QdCq_QdAt=(BA&2YBUsY=dfzD{{p(Xxaz)h;YCF8?Ul%1e}5}@ zO@0yZuh)nND%kn8|Na%lH#NLM=KqYOnC|MbCw}whr}=*yP7H-Y`-r9qwQ2rq9Dz|0 zBdN65Kl4A$DgS>m=QkV7|7=EzGh^Yu&HaDh$NCi3wnS$c$@$FVUp#HFss7?l0LJ~{ z!`SL7tNPPP=8^Kq8)3(i@(qbit!IaRj$Duu3h(VXaI4Sdu3~_@H&ak|A1shtFJP;$ z&Ff|ziaT$FS{aiU@Te#m;Cp!+I*IbJ@XxAqIeeeH<$>FQ&-YdyTH@a_&X?%>7*prF zp2!e%;=M(CLssc(k6U1h(+Z6N7fk4b1$pU zx+k}@k}uu*?&UWT+g}Y#gV?3_XQkIe!hs%Suq9Q))|Tlh`Wr-J#)v6)bNt9IQZ-?zd%Hw*=ZrCzD^f-D3r^0KBi$+ip$`A6Mk<3rtrZFNxAf zKk90T99Gb#t7ndaGJ(*jcpaOR-2zFV|0MH`0H4>cX|8kH-A>yB@PzO5QPgAAeG<9~ z(7IdVikhJ^RFhx&6*~Cd*30U>;FKs>ES%nYuI$%8RM=1({ChUX}X7!Wu zAA=&In$O5ezi+pM8LtJ8`oW`oa28+E!&*f>9{W97;k4XXkIS^H4+UAGvZx7D{UOIK zH$}ZEkpj2NC%)GxA>My-R{)`xdTyO1fcg{J)!T^@lJhkw=vrQzj&$^Qa(I7Cu2xl- zg5af(2k=sEQGeBmBNF1c9B_MFCIG7eR|`T^)>Jws({-d$>S9rNoIs$o1qKW1U(s7gPai5(qrX(&Um zwy;AI@AZ}{%d9#&PBP>zwc8=%jgWWGH2jQp`DWYPw4k^T`^Nvelzg_m4tOygvshAx zSic)*_56B2$iwR{sdtKA-$NW8Cffewvz4#abf1JwCg*y2X*Lu~6edkmydt&um&!Yh;0Fgz!I z8S zXW#cIlDgIR7Kgd*mV>IL1+VdR*KujmVe6Bnrwi2`nyj5h(N`umHB#h26X zt}BBFa)TAfq5C^R?mPC5nk4!GljuO$+PG#|*B4a_2>^!?m-qb{I`I10^!40&Ah?Xo z5pt;rAZdrM_}>Q86li@(J8)D#f?(9Br`@U}FA1>Jx%%}~}bmH|q8K|Y!jaNAu?dYM~6 zRZJc^eBV;Y!Mnx?kn&2<<#2q|Pp)+P>ZBPmqA2KkX?Et2s&9LqBzZimIWVsmGYatA zRXt~RY=fjB;A5x~rSrZ2e#S!_7>vCGqC{9lj*|V8LTb}g!H@mpp{+Rn_v>x&(6H+J z7}nKf@B4Ld%Z-a7|M0=og<;D>XSx@Y&lV$4Ekin}o2SXK^<>^M{r+%K-I&?XE$nJSn(xJK4qrH|bnqfPU>4jm=e=x!oc#?Jke&g(g- zUucQtw<$SVY?d~P}!t-c2Lo8mx6d`@70 zvP5TBSUX%%C7-WOwciMN4WbKqP5B%ow3f{Z-jx6kgNKYV|^tpbL^<*qZ-A^30n?FBY*Hn_q~jp%0Mg-<>UCF!!;rL{!Y{b z*3Cv>f1?;licgf`G`bG-zLl-3R|wc#Q538g0z$S#C86oCbHSjNy?ANChiOIVH2rMI zG5nGlT3Axtm$CYA3AoOV^jpuMy|ROZ?T(T^1UI_*!$t2I@DM>^@!2%tQ*2Px;zGGh z02fo5-BK-N3cz|cST76mXYkO_egPK}#MwY7cUixalk{5k7n=LGIBj3hTJKhyeXzl~ zGo3fkBcT7$3Q6oSx65M@pbZ+YC;(b=HY>1%!!mZp6Fqznq0rpI#0pXZU|dVnIlk9-%u>~`h}VhYjz zmPod{6t5ndj-zKD=!WOo(!>9dq!*2ld8_8dca!LG1x9m|yPCUXkoxbbV)V`B^QlP* z2QLUMxOI2m3%(x6c>7K);Oa-%C(!K#N~N9Ef%3qRq9J)~x4KpV>itdW?%7A43LDIa z8X^^jrZk!ojDyDSMXww70zLApJntoe%=xcBD#D>RDy64nfaU_M6Z)d7V4v3O7+UfM zI23&xL2-PqOi$oj<6nQBorePGYWBHH+x}3PF;m>1({p~`Te}(*tYP8JcKw|ZaIa3W z5|KeaW+a1}*~V9jOh9(L$~YKYYcNd}*`l$FOU6yA(HR-(cSZ&9*~&v1R}oErionDF zkmE|SIb~(H=VJ$DZ4b&-CQ)fO@a_a4)*zSnmv493+6k&S(%z0p_QJ>psX^O_V9lhrb>BAr9 z#!w93wGILaXkvaRP39@H;n)|GB8ih{1e-l>kB{FBn1qGHL%+#NzbvY3$Xf&5Ir5z2 zPG9!I*3-qPiSN%$8O#PHBV)1VD}P1)O~7Dhj2?72@pBcduzphsN8H)`k=p3Wh%;_$ zOeXLMp7o@Qaw@rwstN}`?{)X08s5C`DQlRw*eDrX7{@P}7d8#NUz6uvKJSkcQF?Ne z6pViyWiT|=e=Doa?LjcWpUG)555Bnx)chgcgWJ97&2EQZf!xal z)p2nI02nbGF^RF>u>$hlk&33=WQ-^JoI>Si0u8 zV07Zbz#>r^qAXD{lBu!00RKml^p=Cv64=~UMF`M+kogAK za9tvbFb_5Czmu~*!Wcf7X4}nlOhFn>z@2UYs5e8zXiDYQ=Ox))S3>&zy2o(u2h5!JvYvSsLq$lAJ%%c;J%Lb@e5mEkCW z?eZ|Dux0i&Si?wGLD+e^#G`KKbCx{u6gsr?6jUM?pE*3wAGiPuHc1MIvY4|WVosn|)%172v_ zuJ9qyLTdW=-$|n#8!G@V$$7Z3oifYzxs!m`vv;S}RV*&e|L#YrvkJalcR(jP&|ivp zdX?VXKmoSP&tSH<4&P*Xc=vJz77}8-1B8!d0cW#BxWLd8o=iJfUfU`0+(QVsx$4{8 zM%dD+!cq1`U^-K(q~!|)T~eLAZia5FB+I+)`mCM=ATeKEa>FyeeU0P0N(2$?H5_a% z1c?1K;t}s!d86fx%Dsml&FIN>)%>u!tJSay-_BD*KV3b8rOY0MRDF}8&W3rMO8Cvd zq4No{`UQOiAyeW&=;8TZg&{D6<%2^Z z!|qE6iY8+BPguq9y#O>n~H+h-giBAsF%%~f&;2z zHSJ9+elB|j$&@GebI=dtreMMQ&ghri{%!G?7SS%=%2G0KqHH#RkD(za3ny=Hi$(=p zLGvS3B|d!WGOoC}J8#If=~Y0uQMxBB0Dao47Ri8W79ysyRyY66Fcmx+Tm-DB zhy25cx=95+#qc?ToUlOnSSf2{HM2o=*VzYQSjU+-RrVoQq-g{FF4Zg zE~D2d*8doXY~?Q)$%+d%R^R5T*Ja|j(efj$qMbfNU$|`D4f(?#^kdi{t)k*vJRUdL zlxcwb4m#}66CTp`2n9CPSQhv#x;!Mn5l~6yO6GGaT9+UCvj-#Cg^PfUgy(9?6bFXL zpNb`ZMW&HB#=RloUUl{4T*WAYN0#{>9S=giO>#Fy+5dV^K*r~FnE~_`y9;cG`R|Z< zoOm=C`0i!|j9q)!?A~%82Uz7BM!4{L-9s2&lDz;lp6G%f*Hh2|EjuF*ZTdWkb~fij z6_P^E5528|&KH1y9o-vpP$5xCn_I}+iK{MC;6&BY+8Fs=m!-n;b%SD?b{UHjMD=vl z=|HehRp36=l!l{Nb=j)%E)c-p>$yu+7f<0NCv?~F0Cqtaf)`7bVV&u>BhZse9N&i(A3$x{)K4e9C)`q;|M{`52%Ol-Fg#F@RhIVC{{nI!7gqddBASWD!btp-(BBw zy3b`l5s_nR2<)6q^Y+vd*eWbZ{zSIO{;S}l*pU8|lJn$|PvBuKUqx7+=-R09e`&ej zfx{|HP3Z%AGj5jsR!`dCO19@yQ~>yvW;*!(X7#4zWHpB}1(BEfJf?t!{10!5-z-JJ zQX-eGqE>l9_7%!}cZXT{YORv&H@6?!P^VBI%uu6V6=U2bfK z-nUhXzIRgAtSRD^1sRqBr@J>`*yP8cp7G0o-9a4q`1%ZFqkHR25(W(nc!>F8Rev?+ z2p#E#0X>$-*t{U__3WWm|LRC(^ku5R)_I#q+`)twhDXu$zH2tK)}SV;F#zE0@2 zg?0JR?v@D90Hrb{11&%10Dztc$r&o2>~^QX>Hg!vk;( z#!o$oW+d2aJ3E!HTRLmi#ku04&fiTkl>~TQ=DSMO6nU&V@0^f&T|`G#xX*^A`Jd~q zJ}%Ne)$q(Ccl0IwAN0|Wt_{zb<)PfG{R#-xbxpIXTB^TSg|zin6u zSh5q{v1O+fzBxjo@#?QW1SARF$04v2_)CFv*=aWK_yOuc#x(QJ=Ett;&FUqs;sfxq zCIB|&O^N=5HrZJJV02Sr(xjsQLk19jeTIiI@V|PQ~{$B-zwT*x3pGviT$60%8 zCF!>divF-$D){m87X$&aRcy6G_WdbycC+L(o9?%>1B5-W24q|AHU&J)RiTV0+o^D# zT@WW6EHpXfOd)pp&5q{s?`;3C`S)0Y*FJT?+vbC9;6s04-B?QK(}F_(bAgv9`a9z3 z6M28iWc~@r|2+7AU-9?vZT>GSHUD2*%^6Xwe{?i5`rX!MSZEWDhZAtQj+cwo7%6a? zSLc=zv`#AoZy(3i_dRGaga;nDKI!IPS|BN(j!XSr`)E`qYOKB0Wf*X2oba7V#{I5) zk=%1laIo%)G5j-l9>dPfyf>2it=GmbYZG{h1;(^o*K*Rh-V5gQHTu_th|#qnsfD#z z@N=S0eaEKKL8ivW8}}v!0nvu1qUJx#E)FXw=}JTjohk=?^dIb7E2n>IU)7z^yXKN5>F_agCUG}=!;#J&CZeBX*c`T6-#zh=YC zndemokzv74zo3(!G~OKC6xP?%!8h!~ZNg_vh8nM8JRn4`F)hCQXDep(R~_D}48xI{ zy4B6+;dRhGlsf5MLde2Kp_-kt&0xj4>3R zhquhEz2pj?@1^q#2>W9fj)Lo|e>Qu;f1NoyY^u>Q{MwRUOwH>_4=8z=h;cgr9=^=* z?xGoVzo&BQKig6XySlGE%#IRELH|3M`R8%$1||7_>z7ob{BH;Pi(>l!kOxD5aw~vz80WD^z{{}CSKKBaMsdz*X zg6)>mlPEl1p-B3iKpQu{PzB-uPdhWO{u5Cs7TY70bf2c^q^bito#+l%nrww;wH*q9 z9^AY$9%^s&xgT$p@9X{}TC>IZXEuYUIBot@Zd+L=dt8Ib>xM9s`UCq}w*sdfH-c>$0J>4`lZ*J!KJWf!Y{KJ18 zO*eu+eRMMb1qB7s`&Lme!UCS%p^vnj9Q2HvZ-t@@!T%j}87W(a>}+UdXigJcB$4Fw!o$e+tk>*3^i~SJOF4C(3^hQo`+k zUHc7b-*l>D~O}$@DWtwNsB+WB=I-1wY3B z)aL(26^f6bcMLQ!gU#$v8OoT`dO;}%ZkQ@+oL)F*{Gtk~zA0_h*@O(Wo!zyFkK)04I`B2uMsXC_I zU!z7c!RhYhJk8D~`gE!0=iP>pQ1&?a zB!)_?vR+2ekCH#{3X(;%F)T=$KuNw;e-z^P__rCKy7~zHo4Nd6PA>hsiCK;Rkg$~!x* z1oZ}mhF_&o*#{n_Gl6O4`E5MaZ`8*?L(y-2KH65;x&P}1M}c~Nt(r)Z&EUbuGWgb` zq7h*-WJ2sQ%Gao%mg#yU&%gCFZGLyHw3wSiqxS1=ra7 zhfVM<(E_q=xL(ERoMH|F6v6KtK8Lk~#`=qi2h8)gZN zpyUxJ+PA&F!GFW~&t>#~6y)_7(HpW8GA#0Jj)JnO8cp|o$d$>=w7`eLBf~3W4w@?I z3W{(h>8dd`6ru&FGa6{(H&J8WF#<6i9@Pa!~XE?j?N_|er(s~ zoQnPL+2qvYPfp!VWX_=|XJ`LT_K`)B)Hpg6`5Jj1h*XuWGaakV^^5GAL8 z1<+W`_)7+Y9;rgWz7UMAb3^H0$qF~P}9YX$|(l68N)eOTs+-Qe#c_pox#H>9Hd=PVCb?037 zc_zYv+uwJQsXssy&e|r6osX(3gtZO%F+;}1ED_{DN(OKVGEW(OEgOHy`z;Y7edqUg zys_WA|GWh3p==edvj;U(>@0s)K za$RXeodzH`gT9(d)4eY`^}kKtGx+twpn!(!VK&>E+`yXpuh(v|Wpi(xTH=d7h;v5M zR!OVLI0!YPL@|EdV)~92GWb13R$pt`GEOT?Qb3x8FL#*Qs?^3PjDp30bwiH;|K&TnmI{XS_VTuIA^Xnk) zsnw>~BEwGBj$xwjGp_8r=GxpTbLY>4v$JC!E~~?Hz8N?^Ndu^6cq%-o7f>+JKkXTPIu#nTp1%Bf8oJEn+~#k zN$lGfo=h(}gTm<=NmRx#HWubhurWa9!z_j0mirhQKozcX)o-MCKS+U+)JmbYr=O&@ zqxm_+j`#c2m5$2FzBZCB1j*|si#Xvy3^!Fg04#vUxMh?he_JB87X1Pu^@Js}Al%lvRC}tTS?07wM`*eC|2fyacbu0nu1^PZ>k4AuS6p2pa8h}3!lXb z7r_gjW1#8@siJi4P7|_X)OLVfrXKQ1D=O4MjItz#=B=8o?40SD-1vq-P6EOgSr>U~Z9S?C>u(HvJCbLw4qC ztop8mY8GXcZ~_~n((s%NJy11JVUEbad`sQH;>i#eZ%GutbswFi`1%Pt)KH$zcr%DNDbV>DfG#DbOi8HOuFJpN&gT2;Iw>eOv}O#o z4R?4w{O&%K5Vb8@eB}{yeS>?T6RABQWkJM`{;QZIfGnGhyGq@IV*-6knvpw|-p9>L z8_Al3s`00QS`2aOB3S!KJ6PoClJHk*^e<9Ad|2h$i@?&-W7MU;?%kal^yz-r<+G^1 z3ePEaFu4kt4B8S>_b4Tog*3~bz8YIp2aKD9eM`&~kMoKBWiRy9>3*ex{3JikcJ}Fb z%F|>X-1Il#2ykyN?PknmKS5VQ>R)oG6|@i!HKt@e_*{`e6InENts%!y^}F{k;`8W< zOrqN3znhy>Y9D=`Y^b~%VAL%YTfa)04G_FL@T75=u?EDHHkKYcahGyN8oqe$#fkN- zL8ZX;gEHG~1>0NUj1-Y$rY3Fo=O%*5W=W@_?&iwRXu`HWXo{>Xyp@Hhxe!iZ?z&aD z4#nffwZ_Qzzrns#X;7I)Zjo{zoMhLa+xqy$Lg_DE<4d}V4`)a2&!Cd8UrIb`$7hQ~ z=rk3pL_>uShe-#nDQLLow4nimpL(^LXX95){J{Vs+#}lAx7hhMZKMAmM z@F@}Uj3|<`r$;{V-DHE@vA-qpGrh)EZ5nLHWL(KsXXqLi6M2tSeldQ*-*^A#+2(TN zh$e0D&p8p<0o2}CZ?Hhg*9_EEM8poNPOG1Aa2MN4ah2O+F;TTtw>uGr!H)Gh>J2rH zXFLlZh85r9yE4=+UxGnHePi3;6^A7(&UUa7E_@yVU?4Y_-Fl<@d%Quv-C`T%DQ|3``&(L^MPUn-q&sCZ zIsW1CvgOQcUB>3?@6N76^$4n~f@AH|@$r9Ikk}0E6n$%+>4bIhw}NC?o0k^zHGQCq zxp%a2gBW2V&eD+hK-KcNgv_rD{9j9$3M3nTudV&qOyVhqdTQ*bNTlgAZR#YREPi=I zfkqQU1+uZ!r~ zapTZw$fVK7r9vJg-B@Ml62+w5DO-4xdbOHw%~CT+&0R2hKK6+*aN;}#xCcXC8`-rj z#;6lm-Bt>#;*zI)V_WakvCNkFRBe|M;i6nIt8_Sqf)GD$y4Ebet;_EQ-h36+-}Hwi z*G}Fgdp~G<3==(#xp-|EIBy&Mupf-xtXVY1eM0f9a^eqffibJ*| zFeh(6S1byR5ldEw}h82UX3!s5W0g3eUd%q+f2x+?Q9?AJ$OF(NzRM^O0ul)+F&srRw4rpP9NNM zC+6g5Exi}AgJU;t`_6WH(mrCoZ3b*c%ri})d9Ihd2^NoS7gwNk za5jd{cQ*6X&O$wBl|Mpu%G zfG|V3AiCEMp;(0hIdu;xI$DRF-Q+5CzoEklgGPL8%wa`qXo-C(ae{e2;oprIn(;Y@Rg$=FML#BVB8#k+Rsl+tItuyeq~L*%@f2v&d2@{8TD zM4U=vKs?;y0D1T4AlMAjt@pZ4y~b5b@2%c%N=e{S-}#nshr*)&pdIT`hWpYx&!zQe zjQd!}?*!y1TmKrsOhSFkV0&vQpSUeJ3^??Yn_vhJE!C@OqdrT8p(8U?oK zh4%j8J@{vmM&n5g*a{t_Z9=H#&%@^O?8k?dY_{BgDp+AGs7eel>=}gdqYj%0RVi$( zsT+LAc6Q%axVf$PzQhzC+57B3hfK@;tUU~41cfVo{!Kj}NUffe)J3ZeQ!*z(w z>Yf&dPaI1$fq6}(4-q#NuR(Tjuk+8QT?>!Z%}?WO-j#B?w@`gzPQ`$y$X_?XzFGTR zq4hP-)!S%(Z9A9kK-iSIk7=8q-+i=TuFWi-ym*_>eUoPt=U@$W&Du0xolIbxFcuds z4|Sb9PnETL$71WkID^fx}bZ->Qs>AzZ!# z)c%0bGRnt2(({R^w`7S zQ7`JPVihS~JElzLcg&Jdd}{iZFO;O*+4PfZg117qLHd0iCL@#g)Gf`g%DXKUr@=Yy zaQwqceMb;fi5;K|T|B z`ANT$P7xM#`E`EtzTje-z>i*~rOcq&w0y=+5+UNB=7_ZR+xavh$!gMiy9+D2V)I5) zXmTO4S339dDqho((|)vpY7L~`^o1fNL?K(C>SAW7+0tP}5O6WnD~RdrArPuwYBrFn z0t9YDTYbmUanM0m#&K`|H1tT-76<{b^1V|*ZWLDqsJ;U0k+kIi?txp3rqAApczcKB zo-dSweIHV#%4W#2=aTn${B1Sv+UK<<0kN}qKR$ZB4bCuBx0k6_9x~vVoKV+ z&(}WQ=Jfd5nXXxN3SCvQlpXd}JoI-|b2eC!WgJd}PGeu$0!A_7d^#zIInYxi2_?*Ae@&^G z$PDnH`PPs*7BM*M79tWQTA8;<+CjnjahNS z)TAw}dr@;mwFV9luiSC7%1XKG3xtoE5sB2~ygqfPHmK?D`3S&-UbuAZDCpu%&f(5$ zZ=tm6>C+h!4NRlD7~_9!xK|Rw7kh7$EdN8&O|Q*;*ZCaD z4jJd=S~Xv{DiBm!zi9n!b0}i$`%OoeZgb9z_M07f<{%w$=I`(F7_&6GM`$zITB8MB8N6Ln8`vU|&v^H% zzlI7CK3Iehb#r8caRv?DU*F)1A3F@2*T^{A{zQd`>S=|uUQsZ&KA$%6(}JuU$Osz{88r^rp+Wi2e{`0T9QV1?p4 za~L#5T~1-Vhe|5^Tiu~ICc2J`73V*Tefm#B~4=bveHUwyMjMBL|;cX%8)=8 zoFo#i&)!T+)w-21=sR3;km9s1*flcnP%RDC*F=Tm+O94aEg_pD%leF8vta2*Az+P5 zADCIRacf?WQ5yN&B7R1q%5=w5DPM1NI*8FkNSjOkOD-biO1n=>Yb5tgEnr6RP3U8p z5Y3K}dS=;@c)-P$KCeSaK>{xIyvtA`@hFg}FUHmS*FTS48)2aw_y`Ge$ znPdOp^4YsOOpB;eHiXpO*`L}sIyT{J3b~>{{`Hm*>q&-6fwqLN*}Hm*SJZr0npYDr z?=PMOu;BO2GP-?w@jR;0&XjsqFWugHNL(Ya_7gUH7>j4_c5%P9E#H1=OZjV-#{l0u_)~I>-0fUVyiYkdf9XWUa zM1Xd3e6i;hJ1jx+30m4J7u2Est`0T%J8*(f$K%%KjgCZsHvMO3bvqCnPh3H|?xQma z4rSbdWu=z(`9a-Vy*y?Xf&ekh=h1@{dte9L4d-_~uQ60YMb*`Oc8Afv+%Yp?VF6=U zBVxaZSM8}7nHB{T5Ec5;B(df4+%q?_-G3OE5S=3EkUl8VV4L_ckv;LF(c9jrKJ0u# zcUAY~BU|YBk+VVlfiscRFj_~_Mj8R6yWmfL^BTYEytrmUr|}&luY{yq2gBhj`^c5Z z^S(cSkrU0?2?&(}>)0c{^rSVWrQMSY%$yc?UR!hrcSNmq+0&B!svJ0?5C~GA8}c>6 zj3N{*t4OCfKpu_^evK+tV7fprL3p;sL9(|iBI7Pia)v6MwpCc}&x=Mz?g403Xl<e;viOll%5G z0F13z2bFa2Hzg%Djq*8s(f={4DAR z_VYbC*mT3k8^YwXI%jshm2GBx>{5ieUdx1_gq9OvdT$5b@dmgLq=((RU{ZK6<-f+T zm}DK>i(S6*_7hf2xOTX|1-7HO4%Lop@E&^79{! z@9zg?%&B$Nbb{u$4&`iUl7ECne{W^Zt*<`qAxIkdiPu5@9OKNSobC�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/images/nf-core-scdownstream_logo_dark.png b/docs/images/nf-core-scdownstream_logo_dark.png index 621a366de7be545c59e5eb405a22763d89fba848..5ca57eb348a925baa8c24417a3f596245b46dee9 100644 GIT binary patch literal 27695 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 X1D38YyE)*WnL#W~ZQ=DMKL7m>sKoSM diff --git a/docs/images/nf-core-scdownstream_logo_light.png b/docs/images/nf-core-scdownstream_logo_light.png index e5dee97f683ec25f7db06bfb56f4c62b61de07dc..4d003eee59144f2a18f1b0873d22b78889897b37 100644 GIT binary patch delta 22967 zcmZU)Wmr_-8#cOUsG%eUq`On;?hXN^Q;;q}I%WVtI)-kM5=rT104Wg=Dd`%d8>Hc# z-~U|aoDc7pxu*7B>xuQm{oK2|3DnRGN+QP@f?xswAXre)^o=0~1U*+%lzZiud$8o2 z$^5!i=J@Dxs{C*_f3D+0#M|gFBpxwyCLz-&s{suI!kW22d>JHVHBskm9E?4Zi`_~d zBaJ-_hY?5BBb24yWjX6`SKNDfg>Jf@dqmUMuxw{8SZ2JQU|-uiZ&GUMwR^#F7fer` zqa^kJe@T%A>!!Q}lS1R))k%Cx)pObvUvC}HGsLxZhUHLZ>v1|hO&Xj865RrBrDAzO zzlRTt^it%|xKa0Lm2@x5vr}P}BJ14%=4e)_73_RTK^+jFlJP``sI^1f6&WkCbnfvM z-d^>}(h-Kbg%RGpoo$=a0wmLtq%7N0snQCtq>?L97a(*Y41B?Ebpi52d!L)2< zyZ=XqRifB}y8?R1G6pbqONaJA7&><_FY(ywZuIp4zsC}6BTF1A02?};8o?5o-zhli z`Zo`CUShtqEbp4+kVowkpQh=|OGjiN=(VCE`s2G%8sFf5bAv8WLdPx)D~i=|{dbnF zhY5j4*&hx$g$M-^D18bQ_W3URn}*)%TZPSym28;>&MqD0ZT}%ZYFc<1&(-Vv_;2-8 z+DErMwAi^8WdJSJq^@zyp8fCF?IekbLQwI4Ul-izcJ!N5DgD|oHBhp*JX!K?zXmM$ zz)4ptR7YKb)3%pt<>m4!|6Lv*>v()h&;KG%Cxi7#hK>(3HCz2X`hS;QMH!|5i0);- z%cVqZAK(A?`+33OoAbHlKn1;-`>d#>;!2Z7r(xUkDt)Y@wmt3>XrmN8fC0_je_$7y zcKFX$t`rHM6@HuCF@eIcpD^@{fO2tGjX{4taTV`)Nw$`Ml#P;LZI@Bk5~8%?D0xLC zxrrB+BmBdg$s#0-7ta`bDW{$9Hf{v5B z8?mS4%eV~!nMr~M3ZuaB!@G_LQaE$y(rEew?m<1uDp zpRlAbCP4|K`Het{C9uHvCa%-^zO=q-u5|@rdMRojgWGK@Ms$`|^v7%%{wO(dta?>C zS0(nKNjgkSth9YoF@L4*T`fxb)E(S9sE7rrWxS|Up&leSuQ7FPx#4b)4|HMIz7vca z+DBwt)APt_Iu3*Mj6On_>^m{y{(UI8`()+IqQ%&!K}U!Df48>lo`D zKpk~tBJ3)~uk|;jnb%{*_^i^YQ+N@`fc$6o`3HsgMj30Xzp7R7EU!>rAjFb75|N?* zlP{avXHB&vK;BY3weQZdKrlz(pWP2Mxx**Pu5wvC2tk}ktGEb|YM5Hgx&l|qnnXtH zHuT{wEmaA|PwZZ&R%H4?T^jS`2!sCPzH$_|SOfzhg)I7VNg~l5L-4@}0quPr*3ErK zS~fSOmA69$T|rApb4TdRn7jB>Q6l`>)NJC&&)ekmln1o$X(e0q$`==#wS~S-Zxv)Ya49eT>eFBjc;m=ks8z7&jS%xE=5Kk9m0;8k|~M582oQqqXV z$YX9eFhx@P4Ssd1$c1HFp07XaPBE#>kfO{`Xpjiix8W|N0uve+7JEH z&`|-bwQPlc8tkdzpG@s%VwMqqlSAZ^Kl2H?Is-!!U56en-q{ zY|Iyla>c#!Nf>78<)MnnA}P6(R}{HeR(krDJT3dFXz}=681!(-+0xuUYQI=vEu`{6 zL8!B_SQyx;=Tz$en=a+Qkm$8?KH;(WjtBb8sCM&=a!x0A|9fq1ec{UFEK-J{?k8^V z@;?)f=|~1bHeqpDMY31{nQcSp$AS7KCHHLJ_3j=7Ub7UB}D$@`xsNn)C&rRM+?H@@639W7M6-xbbdbRoeoZRkKu5)z)}

    {Ond8+9_XyDMq*)yym$`3>(nu) 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 Q!N3P?W{avk@A=RF0NXDqasU7T delta 22847 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 diff --git a/docs/usage.md b/docs/usage.md index be15164..0f9d35f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -85,9 +85,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/scdownstream -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -199,14 +199,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf index a6320ee..c911275 100644 --- a/main.nf +++ b/main.nf @@ -9,8 +9,6 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS @@ -20,7 +18,6 @@ nextflow.enable.dsl = 2 include { SCDOWNSTREAM } from './workflows/scdownstream' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_scdownstream_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_scdownstream_pipeline' - include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_scdownstream_pipeline' /* @@ -56,10 +53,8 @@ workflow NFCORE_SCDOWNSTREAM { SCDOWNSTREAM ( samplesheet ) - emit: multiqc_report = SCDOWNSTREAM.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -70,27 +65,24 @@ workflow NFCORE_SCDOWNSTREAM { workflow { main: - // // SUBWORKFLOW: Run initialisation tasks // PIPELINE_INITIALISATION ( params.version, - params.help, params.validate_params, params.monochrome_logs, args, params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // NFCORE_SCDOWNSTREAM ( PIPELINE_INITIALISATION.out.samplesheet ) - // // SUBWORKFLOW: Run completion tasks // diff --git a/modules.json b/modules.json index 0f44933..7ed4337 100644 --- a/modules.json +++ b/modules.json @@ -7,12 +7,12 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38..691d4c7 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c8..d8989f4 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // 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 // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e..4827da7 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4..e9d79a0 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
    Mon 2 Oct 2023
    test.gz
    + // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c31..d5db309 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb6..f1cd99b 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352..b9ccebd 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc3..b16c187 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ 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 - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - 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}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + 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: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - 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 b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242..33316a7 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd80..b779e46 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,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 0000000..c537a6a --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/nextflow.config b/nextflow.config index a859901..c5e71a2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -16,7 +16,6 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false - // MultiQC options multiqc_config = null multiqc_title = null @@ -33,48 +32,26 @@ params { monochrome_logs = false hook_url = null help = false + help_full = false + show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - // Config options config_profile_name = null config_profile_description = null + custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null - - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true + } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/scdownstream custom profiles from different institutions. -try { - includeConfig "${params.custom_config_base}/pipeline/scdownstream.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/scdownstream profiles: ${params.custom_config_base}/pipeline/scdownstream.config") -} profiles { debug { dumpHashes = true @@ -89,7 +66,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false - conda.channels = ['conda-forge', 'bioconda', 'defaults'] + conda.channels = ['conda-forge', 'bioconda'] apptainer.enabled = false } mamba { @@ -178,25 +155,23 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// Load nf-core custom profiles from different Institutions +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +// Load nf-core/scdownstream custom profiles from different institutions. +// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs +// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/scdownstream.config" : "/dev/null" +// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -208,8 +183,15 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// 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. +""" // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -238,43 +220,47 @@ manifest { homePage = 'https://github.com/nf-core/scdownstream' description = """A single cell transcriptomics pipeline for QC, integration and making the results presentable""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=24.04.2' version = '1.0dev' doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Nextflow plugins +plugins { + id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} + +validation { + defaultIgnoreParams = ["genomes"] + help { + enabled = true + command = "nextflow run $manifest.name -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 ${manifest.name} ${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" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } +* Software dependencies + https://github.com/${manifest.name}/blob/master/CITATIONS.md +""" + } + summary { + beforeText = validation.help.beforeText + afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' + diff --git a/nextflow_schema.json b/nextflow_schema.json index 25c6849..88fb117 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/scdownstream/master/nextflow_schema.json", "title": "nf-core/scdownstream pipeline parameters", "description": "A single cell transcriptomics pipeline for QC, integration and making the results presentable", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -71,6 +71,14 @@ "fa_icon": "fas fa-ban", "hidden": true, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "The base path to the igenomes reference files", + "fa_icon": "fas fa-ban", + "hidden": true, + "default": "s3://ngi-igenomes/igenomes/" } } }, @@ -122,41 +130,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -164,12 +137,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -245,27 +212,6 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, "pipelines_testdata_base_path": { "type": "string", "fa_icon": "far fa-check-circle", @@ -278,19 +224,16 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf b/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf index 1631ca4..3969313 100644 --- a/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf @@ -8,17 +8,14 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* ======================================================================================== @@ -30,7 +27,6 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit - help // boolean: Display help text validate_params // boolean: Boolean whether to validate parameters against the schema at runtime monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args @@ -51,20 +47,16 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) + // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( - help, - workflow_command, - pre_help_text, - post_help_text, + UTILS_NFSCHEMA_PLUGIN ( + workflow, validate_params, - "nextflow_schema.json" + null ) + // // Check config provided to the pipeline @@ -80,8 +72,9 @@ workflow PIPELINE_INITIALISATION { // // Create channel from input file provided through params.input // + Channel - .fromSamplesheet("input") + .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, fastq_1, fastq_2 -> if (!fastq_2) { @@ -91,8 +84,8 @@ workflow PIPELINE_INITIALISATION { } } .groupTuple() - .map { - validateInputSamplesheet(it) + .map { samplesheet -> + validateInputSamplesheet(samplesheet) } .map { meta, fastqs -> @@ -117,13 +110,13 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML + outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications multiqc_report // string: Path to MultiQC report main: - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") // @@ -131,11 +124,18 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_report.toList() + ) } completionSummary(monochrome_logs) - if (hook_url) { imNotification(summary_params, hook_url) } @@ -165,7 +165,7 @@ def validateInputSamplesheet(input) { def (metas, fastqs) = input[1..2] // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 if (!endedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } @@ -197,7 +197,6 @@ def genomeExistsError() { error(error_string) } } - // // Generate methods description for MultiQC // @@ -239,8 +238,10 @@ def methodsDescriptionText(mqc_methods_yaml) { // 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 def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi:
    ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) } else meta["doi_text"] = "" meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  1. If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  2. " @@ -261,3 +262,4 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } + diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28..28e32b2 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,10 +2,6 @@ // Subworkflow with functionality that may be useful for any Nextflow pipeline // -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -58,7 +54,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -79,10 +75,10 @@ def dumpParametersToJSON(outdir) { def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') def filename = "params_${timestamp}.json" def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,7 +86,7 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) @@ -102,14 +98,16 @@ def checkCondaChannels() { // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) + + required_channels_in_order.eachWithIndex { channel, index -> + if (index < required_channels_in_order.size() - 1) { + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + } } if (channels_missing | channel_priority_violation) { diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config index d0a926b..a09572e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -3,7 +3,7 @@ manifest { author = """nf-core""" homePage = 'https://127.0.0.1' description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=23.04.0' version = '9.9.9' doi = 'https://doi.org/10.5281/zenodo.5070524' } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 14558c3..cbd8495 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,9 +2,6 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -34,7 +31,7 @@ workflow UTILS_NFCORE_PIPELINE { // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + @@ -66,11 +63,13 @@ def checkProfileProvided(nextflow_cli_args) { // def workflowCitation() { def temp_doi_ref = "" - String[] manifest_doi = workflow.manifest.doi.tokenize(",") + def manifest_doi = workflow.manifest.doi.tokenize(",") // Using a loop to handle 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 - for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + 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" + @@ -84,7 +83,7 @@ def workflowCitation() { // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -102,8 +101,8 @@ def getWorkflowVersion() { // Get software versions for pipeline // def processVersionsFromYAML(yaml_file) { - Yaml yaml = new Yaml() - versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } return yaml.dumpAsMap(versions).trim() } @@ -124,7 +123,7 @@ def workflowVersionToYAML() { def softwareVersionsToYAML(ch_versions) { return ch_versions .unique() - .map { processVersionsFromYAML(it) } + .map { version -> processVersionsFromYAML(version) } .unique() .mix(Channel.of(workflowVersionToYAML())) } @@ -134,19 +133,19 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { + summary_params.keySet().each { group -> def group_params = summary_params.get(group) // This gets the parameters of that particular group if (group_params) { summary_section += "

    $group

    \n" summary_section += "
    \n" - for (param in group_params.keySet()) { + group_params.keySet().sort().each { param -> summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" } summary_section += "
    \n" } } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" @@ -161,7 +160,7 @@ def paramsSummaryMultiqc(summary_params) { // nf-core logo // def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map String.format( """\n ${dashedLine(monochrome_logs)} @@ -180,7 +179,7 @@ def nfCoreLogo(monochrome_logs=true) { // Return dashed line // def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map return "-${colors.dim}----------------------------------------------------${colors.reset}-" } @@ -188,7 +187,7 @@ def dashedLine(monochrome_logs=true) { // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -287,7 +286,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi } def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } @@ -344,10 +343,10 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { throw 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 } @@ -364,13 +363,13 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); output_tf.delete() } @@ -378,7 +377,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" @@ -395,7 +394,7 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 0000000..4994303 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,46 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // 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 + + main: + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + if(parameters_schema) { + log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) + } else { + log.info paramsSummaryLog(input_workflow) + } + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + if(parameters_schema) { + validateParameters(parameters_schema:parameters_schema) + } else { + validateParameters() + } + } + + emit: + dummy_emit = true +} + diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 0000000..f7d9f02 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 0000000..842dc43 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,117 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 0000000..0907ac5 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + 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/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json similarity index 95% rename from subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json rename to subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json index 7626c1c..331e0d2 100644 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", "title": ". pipeline parameters", "description": "", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -87,10 +87,10 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b0..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cff..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/workflows/scdownstream.nf b/workflows/scdownstream.nf index d381568..94dcf7e 100644 --- a/workflows/scdownstream.nf +++ b/workflows/scdownstream.nf @@ -3,10 +3,9 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_scdownstream_pipeline' @@ -21,12 +20,10 @@ workflow SCDOWNSTREAM { take: ch_samplesheet // channel: samplesheet read in from --input - main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // // MODULE: Run FastQC // @@ -42,11 +39,12 @@ workflow SCDOWNSTREAM { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', + name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } + // // MODULE: MultiQC // @@ -59,18 +57,19 @@ workflow SCDOWNSTREAM { Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() + summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - + ch_multiqc_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) ch_methods_description = Channel.value( methodsDescriptionText(ch_multiqc_custom_methods_description)) - ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( @@ -83,12 +82,14 @@ workflow SCDOWNSTREAM { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) - emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] + } /* From 3708616c56488c0f1f0736f6b92e54d6c7aa5b66 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 9 Oct 2024 11:07:31 +0000 Subject: [PATCH 2/2] Template update for nf-core/tools version 3.0.1 --- .editorconfig | 4 - .github/CONTRIBUTING.md | 2 +- .github/workflows/awsfulltest.yml | 6 +- .github/workflows/linting.yml | 4 +- .nf-core.yml | 2 +- .prettierignore | 1 - docs/output.md | 1 - modules.json | 6 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 26 +- nextflow.config | 8 +- .../main.nf | 12 +- .../nf-core/utils_nextflow_pipeline/main.nf | 46 ++- .../nf-core/utils_nfcore_pipeline/main.nf | 279 ++++++++++-------- 15 files changed, 209 insertions(+), 194 deletions(-) diff --git a/.editorconfig b/.editorconfig index e105881..72dda28 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,6 @@ 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 @@ -26,12 +25,9 @@ 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 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 7f28fb0..a358cc5 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -90,7 +90,7 @@ Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 2d7a0f0..43c4124 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,16 +14,18 @@ on: jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/scdownstream' && github.event.review.state == 'approved' + # 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/scdownstream' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - uses: octokit/request-action@v2.x id: check_approvals with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - 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') diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index b882838..a502573 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -42,10 +42,10 @@ jobs: architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: pietrobolcato/action-read-yaml@1.1.0 id: read_yml with: - config: ${{ github.workspace }}/.nf-core.yaml + config: ${{ github.workspace }}/.nf-core.yml - name: Install dependencies run: | diff --git a/.nf-core.yml b/.nf-core.yml index db32ffb..74ee960 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,6 @@ bump_version: null lint: null -nf_core_version: 3.0.0 +nf_core_version: 3.0.1 org_path: null repository_type: pipeline template: diff --git a/.prettierignore b/.prettierignore index 610e506..437d763 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ - email_template.html adaptivecard.json slackreport.json diff --git a/docs/output.md b/docs/output.md index 40aa0fa..160c5c3 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,7 +14,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [FastQC](#fastqc) - Raw read QC - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC diff --git a/modules.json b/modules.json index 7ed4337..66f128d 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", + "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", + "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f1cd99b..6f5b867 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.24.1 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index b9ccebd..9724d2f 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--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" + '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/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index b779e46..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,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T12:41:34.562023" + "timestamp": "2024-10-02T17:51:46.317523" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:27:11.933869532" + "timestamp": "2024-10-02T17:52:20.680978" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:26:56.709849369" + "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index c5e71a2..f583510 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,10 +12,12 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = null + // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false + // MultiQC options multiqc_config = null multiqc_title = null @@ -36,6 +38,7 @@ params { show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + // Config options config_profile_name = null config_profile_description = null @@ -44,9 +47,9 @@ params { custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null + // Schema validation default options validate_params = true - } // Load base.config by default for all pipelines @@ -161,6 +164,7 @@ includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${pa // Load nf-core/scdownstream custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs // includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/scdownstream.config" : "/dev/null" + // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers @@ -172,6 +176,7 @@ charliecloud.registry = 'quay.io' // Load igenomes.config if required includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -263,4 +268,3 @@ validation { // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' - diff --git a/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf b/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf index 3969313..6b73a9f 100644 --- a/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_scdownstream_pipeline/main.nf @@ -18,9 +18,9 @@ include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { @@ -99,9 +99,9 @@ workflow PIPELINE_INITIALISATION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { @@ -147,9 +147,9 @@ workflow PIPELINE_COMPLETION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 28e32b2..2b0dc67 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -22,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -45,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -72,11 +71,11 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = groovy.json.JsonOutput.toJson(params) - temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() @@ -91,9 +90,14 @@ def checkCondaChannels() { try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present @@ -106,19 +110,13 @@ def checkCondaChannels() { required_channels_in_order.eachWithIndex { channel, index -> if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) } } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn( + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index cbd8495..b78273c 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -22,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -33,12 +32,9 @@ workflow UTILS_NFCORE_PIPELINE { def checkConfigProvided() { def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -49,12 +45,14 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } @@ -70,13 +68,7 @@ def workflowCitation() { 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" + 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" } // @@ -102,7 +94,7 @@ def getWorkflowVersion() { // def processVersionsFromYAML(yaml_file) { def yaml = new org.yaml.snakeyaml.Yaml() - def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -112,8 +104,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -121,11 +113,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions - .unique() - .map { version -> processVersionsFromYAML(version) } - .unique() - .mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) } // @@ -133,25 +121,31 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - summary_params.keySet().each { group -> - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

    \n" - summary_section += "
    \n" - group_params.keySet().sort().each { param -> - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" + summary_params + .keySet() + .each { group -> + def group_params = summary_params.get(group) + // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } @@ -199,54 +193,54 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } @@ -261,14 +255,15 @@ def attachMultiqcReport(multiqc_report) { 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" + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") } mqc_report = mqc_report[0] } } - } catch (all) { + } + catch (Exception all) { if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") } } return mqc_report @@ -280,26 +275,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -337,7 +341,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // 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 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 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) def sendmail_html = sendmail_template.toString() @@ -346,30 +350,32 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { +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 (all) { + ['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 failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -380,12 +386,14 @@ def completionSummary(monochrome_logs=true) { def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } @@ -394,21 +402,30 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) { + misc_fields['repository'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['commitid'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['revision'] = workflow.revision + } + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] msg_fields['version'] = getWorkflowVersion() @@ -433,13 +450,13 @@ def imNotification(summary_params, hook_url) { def json_message = json_template.toString() // POST - def post = new URL(hook_url).openConnection(); + def post = new URL(hook_url).openConnection() post.setRequestMethod("POST") post.setDoOutput(true) post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + post.getOutputStream().write(json_message.getBytes("UTF-8")) + def postRC = post.getResponseCode() + if (!postRC.equals(200)) { + log.warn(post.getErrorStream().getText()) } }