From 711045acd4ab2cb2260350d2413a385f4a5d6bdf Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Fri, 1 Jul 2022 11:11:19 +0200 Subject: [PATCH 01/43] refactor: fgbio read clipping (#545) * change primer file formatting * change read clipping * fmt * fix primer clipping plot * fix primer clipping plot * fix * fix * typo * test --- workflow/rules/read_clipping.smk | 51 +++++++------------ .../{bed-to-bedpe.py => bed-to-tsv.py} | 5 +- workflow/scripts/plot-primer-clipping.py | 8 +-- 3 files changed, 25 insertions(+), 39 deletions(-) rename workflow/scripts/{bed-to-bedpe.py => bed-to-tsv.py} (85%) diff --git a/workflow/rules/read_clipping.smk b/workflow/rules/read_clipping.smk index 8abdde7ed..4502dfcbb 100644 --- a/workflow/rules/read_clipping.smk +++ b/workflow/rules/read_clipping.smk @@ -21,63 +21,48 @@ rule samtools_sort: "0.74.0/bio/samtools/sort" -rule bed_to_bedpe: +rule bed_to_tsv: input: check_bed_for_URL(config["preprocessing"]["amplicon-primers"]), output: - "resources/primer.bedpe", + "resources/primer.tsv", log: "logs/bed-to-bedpe.log", conda: "../envs/python.yaml" script: - "../scripts/bed-to-bedpe.py" + "../scripts/bed-to-tsv.py" -rule bamclipper: +rule trim_primers_fgbio: input: bam="results/{date}/read-sorted/{read_type}~position/{sample}.initial.bam", bai="results/{date}/read-sorted/{read_type}~position/{sample}.initial.bam.bai", - bedpe="resources/primer.bedpe", - output: - temp( - "results/{date}/read-clipping/softclipped/{read_type}/{sample}/{sample}.initial.primerclipped.bam" + ref="resources/genomes/{reference}.fasta".format( + reference=config["preprocessing"]["amplicon-reference"] ), - params: - output_dir=get_output_dir, - cwd=lambda w: os.getcwd(), - bed_path=lambda w, input: os.path.join(os.getcwd(), input.bedpe), - bam=lambda w, input: os.path.basename(input.bam), + primers="resources/primer.tsv", + output: + "results/{date}/read-clipping/hardclipped/{read_type}/{sample}/{sample}.bam", log: - "logs/{date}/bamclipper/{read_type}/{sample}.log", + "logs/{date}/fgbio_primer_clipping/{read_type}/{sample}.log", conda: - "../envs/bamclipper.yaml" - threads: 6 + "../envs/fgbio.yaml" shell: - "(cp {input.bam} {params.output_dir} &&" - " cp {input.bai} {params.output_dir} &&" - " cd {params.output_dir} &&" - " bamclipper.sh -b {params.bam} -p {params.bed_path} -n {threads} -u 5 -d 5) " - " > {params.cwd}/{log} 2>&1" + "fgbio TrimPrimers -i {input.bam} -p {input.primers} -o {output} -H true -r {input.ref} > {log} 2>&1" -rule fgbio: +rule filter_bam_fgbio: input: - bam="results/{date}/read-clipping/softclipped/{read_type}/{sample}/{sample}.initial.primerclipped.bam", - bai="results/{date}/read-clipping/softclipped/{read_type}/{sample}/{sample}.initial.primerclipped.bam.bai", - ref="resources/genomes/{reference}.fasta".format( - reference=config["preprocessing"]["amplicon-reference"] - ), + bam="results/{date}/read-clipping/hardclipped/{read_type}/{sample}/{sample}.bam", output: - temp( - "results/{date}/read-clipping/hardclipped/{read_type}/{sample}/{sample}.bam" - ), + "results/{date}/read-clipping/hc_filtered/{read_type}/{sample}/{sample}.bam", log: - "logs/{date}/fgbio/{read_type}/{sample}.log", + "logs/{date}/fgbio_filter_bam/{read_type}/{sample}.log", conda: "../envs/fgbio.yaml" shell: - "fgbio --sam-validation-stringency=LENIENT ClipBam -i {input.bam} -o {output} -H true -r {input.ref} > {log} 2>&1" + "fgbio FilterBam -i {input.bam} -o {output} --min-insert-size 100 --remove-single-end-mappings > {log} 2>&1" rule samtools_fastq_pe: @@ -132,7 +117,7 @@ rule plot_primer_clipping: ), params: samples=lambda wildcards: get_samples_for_date(wildcards.date), - bedpe="resources/primer.bedpe", + bedpe="resources/primer.tsv", log: "logs/{date}/plot-primer-clipping.log", conda: diff --git a/workflow/scripts/bed-to-bedpe.py b/workflow/scripts/bed-to-tsv.py similarity index 85% rename from workflow/scripts/bed-to-bedpe.py rename to workflow/scripts/bed-to-tsv.py index 4a3b343df..098a18cb7 100644 --- a/workflow/scripts/bed-to-bedpe.py +++ b/workflow/scripts/bed-to-tsv.py @@ -23,10 +23,9 @@ df_sense["chrom"], df_sense["start"], df_sense["end"], - df_antisense["chrom"], df_antisense["start"], df_antisense["end"], ] -headers = ["chrom1", "start1", "end1", "chrom2", "start2", "end2"] +headers = ["chrom", "left_start", "left_end", "right_start", "right_end"] df_bedpe = pd.concat(data, axis=1, keys=headers) -df_bedpe.to_csv(snakemake.output[0], header=None, index=None, sep="\t", mode="a") +df_bedpe.to_csv(snakemake.output[0], index=None, sep="\t", mode="a") diff --git a/workflow/scripts/plot-primer-clipping.py b/workflow/scripts/plot-primer-clipping.py index c6dabb8e3..a99b55a8f 100644 --- a/workflow/scripts/plot-primer-clipping.py +++ b/workflow/scripts/plot-primer-clipping.py @@ -13,8 +13,10 @@ from intervaltree import IntervalTree # read primer bedpe to df -PRIMER = pd.read_csv(snakemake.params.get("bedpe", ""), delimiter="\t", header=None) -PRIMER.drop(PRIMER.columns[[0, 3]], axis=1, inplace=True) +PRIMER = pd.read_csv(snakemake.params.get("bedpe", ""), delimiter="\t", header=0) +print(PRIMER) +PRIMER.drop(PRIMER.columns[[0]], axis=1, inplace=True) +print(PRIMER) PRIMER.columns = ["p1_start", "p1_end", "p2_start", "p2_end"] # convert df to interval trees @@ -116,7 +118,7 @@ def count_intervals(file): "uncut primer within", "cut primer exact", "cut primer within", - "no mathing win", + "no matching win", ], } ) From 08b19cf6377cd7af9f47c4f0557f614e8d591bd9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:17:47 +0200 Subject: [PATCH 02/43] Update pangolin to 4.1 (#546) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: thomasbtf Co-authored-by: Ann-Kathrin Brüggemann <90249112+AKBrueggemann@users.noreply.github.com> --- workflow/envs/pangolin.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index a36746fcb..2af1a4e7b 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -2,4 +2,4 @@ channels: - bioconda - conda-forge dependencies: - - pangolin =4.0.6 + - pangolin =4.1 From 57e868e877976324164973234496e99c215eb26f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Jul 2022 08:56:58 +0200 Subject: [PATCH 03/43] Update pangolin to 4.1.1 (#547) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: thomasbtf Co-authored-by: Ann-Kathrin Brüggemann <90249112+AKBrueggemann@users.noreply.github.com> --- workflow/envs/pangolin.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index 2af1a4e7b..6c35b9d1f 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -2,4 +2,4 @@ channels: - bioconda - conda-forge dependencies: - - pangolin =4.1 + - pangolin =4.1.1 From 56e46ef7e1663b4de3447068df7cb8b9d1d7b67f Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Tue, 2 Aug 2022 09:09:56 +0200 Subject: [PATCH 04/43] fix: disable ont actions (#555) --- .github/workflows/main.yml | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0be53d2b3..fbc4299df 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,7 +67,9 @@ jobs: strategy: matrix: rule: [all, all -npr] - technology: [all, illumina, ont, ion] + # disable ont actions + # technology: [all, illumina, ont, ion] + technology: [all, illumina, ion] seq_method: [shotgun, amplicon] steps: - uses: actions/checkout@v2 @@ -85,11 +87,9 @@ jobs: mkdir -p .tests/data curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/B.1.1.7.reads.1.fastq.gz > .tests/data/B117.1.fastq.gz curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/B.1.1.7.reads.1.fastq.gz > .tests/data/B117.2.fastq.gz - curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/ont_reads.fastq.gz > .tests/data/ont_reads.fastq.gz curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/ERR5745913.fastq.gz > .tests/data/ion_reads.fastq.gz echo sample_name,fq1,fq2,date,is_amplicon_data,technology > .tests/config/pep/samples.csv echo illumina-test,data/B117.1.fastq.gz,data/B117.2.fastq.gz,2022-01-01,$AMPLICON,illumina >> .tests/config/pep/samples.csv - echo ont-test,data/ont_reads.fastq.gz,,2022-01-01,$AMPLICON,ont >> .tests/config/pep/samples.csv echo ion-test,data/ion_reads.fastq.gz,,2022-01-01,$AMPLICON,ion >> .tests/config/pep/samples.csv - name: Prepare test data for Illumina if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'illumina' || matrix.rule == 'compare_assemblers') @@ -100,14 +100,14 @@ jobs: curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/B.1.1.7.reads.1.fastq.gz > .tests/data/B117.2.fastq.gz echo sample_name,fq1,fq2,date,is_amplicon_data,technology > .tests/config/pep/samples.csv echo illumina-test,data/B117.1.fastq.gz,data/B117.2.fastq.gz,2022-01-01,$AMPLICON,illumina >> .tests/config/pep/samples.csv - - name: Prepare test data for Oxford Nanopore - if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'ont' || matrix.rule == 'compare_assemblers') - run: | - if [[ "${{ matrix.seq_method }}" = "shotgun" ]] ; then export AMPLICON=0; else export AMPLICON=1; fi - mkdir -p .tests/data - curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/ont_reads.fastq.gz > .tests/data/ont_reads.fastq.gz - echo sample_name,fq1,date,is_amplicon_data,technology > .tests/config/pep/samples.csv - echo ont-test,data/ont_reads.fastq.gz,2022-01-01,$AMPLICON,ont >> .tests/config/pep/samples.csv + # - name: Prepare test data for Oxford Nanopore + # if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'ont' || matrix.rule == 'compare_assemblers') + # run: | + # if [[ "${{ matrix.seq_method }}" = "shotgun" ]] ; then export AMPLICON=0; else export AMPLICON=1; fi + # mkdir -p .tests/data + # curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/ont_reads.fastq.gz > .tests/data/ont_reads.fastq.gz + # echo sample_name,fq1,date,is_amplicon_data,technology > .tests/config/pep/samples.csv + # echo ont-test,data/ont_reads.fastq.gz,2022-01-01,$AMPLICON,ont >> .tests/config/pep/samples.csv - name: Prepare test data for Ion Torrent if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'ion' || matrix.rule == 'compare_assemblers') run: | @@ -176,15 +176,14 @@ jobs: - Pre-Commit strategy: matrix: - rule: - [ + rule: [ benchmark_strain_calling, benchmark_assembly, benchmark_mixtures, benchmark_non_sars_cov_2, benchmark_reads, compare_assemblers, - generate_test_cases, + # generate_test_cases, ] steps: - uses: actions/checkout@v2 From 2c2bde32b0bdf00fccd9eba39a0e8d974f448ffd Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Tue, 2 Aug 2022 10:33:56 +0200 Subject: [PATCH 05/43] Revert "refactor: fgbio read clipping (#545)" (#551) --- workflow/rules/read_clipping.smk | 51 ++++++++++++------- .../{bed-to-tsv.py => bed-to-bedpe.py} | 5 +- workflow/scripts/plot-primer-clipping.py | 8 ++- 3 files changed, 39 insertions(+), 25 deletions(-) rename workflow/scripts/{bed-to-tsv.py => bed-to-bedpe.py} (85%) diff --git a/workflow/rules/read_clipping.smk b/workflow/rules/read_clipping.smk index 4502dfcbb..8abdde7ed 100644 --- a/workflow/rules/read_clipping.smk +++ b/workflow/rules/read_clipping.smk @@ -21,48 +21,63 @@ rule samtools_sort: "0.74.0/bio/samtools/sort" -rule bed_to_tsv: +rule bed_to_bedpe: input: check_bed_for_URL(config["preprocessing"]["amplicon-primers"]), output: - "resources/primer.tsv", + "resources/primer.bedpe", log: "logs/bed-to-bedpe.log", conda: "../envs/python.yaml" script: - "../scripts/bed-to-tsv.py" + "../scripts/bed-to-bedpe.py" -rule trim_primers_fgbio: +rule bamclipper: input: bam="results/{date}/read-sorted/{read_type}~position/{sample}.initial.bam", bai="results/{date}/read-sorted/{read_type}~position/{sample}.initial.bam.bai", - ref="resources/genomes/{reference}.fasta".format( - reference=config["preprocessing"]["amplicon-reference"] - ), - primers="resources/primer.tsv", + bedpe="resources/primer.bedpe", output: - "results/{date}/read-clipping/hardclipped/{read_type}/{sample}/{sample}.bam", + temp( + "results/{date}/read-clipping/softclipped/{read_type}/{sample}/{sample}.initial.primerclipped.bam" + ), + params: + output_dir=get_output_dir, + cwd=lambda w: os.getcwd(), + bed_path=lambda w, input: os.path.join(os.getcwd(), input.bedpe), + bam=lambda w, input: os.path.basename(input.bam), log: - "logs/{date}/fgbio_primer_clipping/{read_type}/{sample}.log", + "logs/{date}/bamclipper/{read_type}/{sample}.log", conda: - "../envs/fgbio.yaml" + "../envs/bamclipper.yaml" + threads: 6 shell: - "fgbio TrimPrimers -i {input.bam} -p {input.primers} -o {output} -H true -r {input.ref} > {log} 2>&1" + "(cp {input.bam} {params.output_dir} &&" + " cp {input.bai} {params.output_dir} &&" + " cd {params.output_dir} &&" + " bamclipper.sh -b {params.bam} -p {params.bed_path} -n {threads} -u 5 -d 5) " + " > {params.cwd}/{log} 2>&1" -rule filter_bam_fgbio: +rule fgbio: input: - bam="results/{date}/read-clipping/hardclipped/{read_type}/{sample}/{sample}.bam", + bam="results/{date}/read-clipping/softclipped/{read_type}/{sample}/{sample}.initial.primerclipped.bam", + bai="results/{date}/read-clipping/softclipped/{read_type}/{sample}/{sample}.initial.primerclipped.bam.bai", + ref="resources/genomes/{reference}.fasta".format( + reference=config["preprocessing"]["amplicon-reference"] + ), output: - "results/{date}/read-clipping/hc_filtered/{read_type}/{sample}/{sample}.bam", + temp( + "results/{date}/read-clipping/hardclipped/{read_type}/{sample}/{sample}.bam" + ), log: - "logs/{date}/fgbio_filter_bam/{read_type}/{sample}.log", + "logs/{date}/fgbio/{read_type}/{sample}.log", conda: "../envs/fgbio.yaml" shell: - "fgbio FilterBam -i {input.bam} -o {output} --min-insert-size 100 --remove-single-end-mappings > {log} 2>&1" + "fgbio --sam-validation-stringency=LENIENT ClipBam -i {input.bam} -o {output} -H true -r {input.ref} > {log} 2>&1" rule samtools_fastq_pe: @@ -117,7 +132,7 @@ rule plot_primer_clipping: ), params: samples=lambda wildcards: get_samples_for_date(wildcards.date), - bedpe="resources/primer.tsv", + bedpe="resources/primer.bedpe", log: "logs/{date}/plot-primer-clipping.log", conda: diff --git a/workflow/scripts/bed-to-tsv.py b/workflow/scripts/bed-to-bedpe.py similarity index 85% rename from workflow/scripts/bed-to-tsv.py rename to workflow/scripts/bed-to-bedpe.py index 098a18cb7..4a3b343df 100644 --- a/workflow/scripts/bed-to-tsv.py +++ b/workflow/scripts/bed-to-bedpe.py @@ -23,9 +23,10 @@ df_sense["chrom"], df_sense["start"], df_sense["end"], + df_antisense["chrom"], df_antisense["start"], df_antisense["end"], ] -headers = ["chrom", "left_start", "left_end", "right_start", "right_end"] +headers = ["chrom1", "start1", "end1", "chrom2", "start2", "end2"] df_bedpe = pd.concat(data, axis=1, keys=headers) -df_bedpe.to_csv(snakemake.output[0], index=None, sep="\t", mode="a") +df_bedpe.to_csv(snakemake.output[0], header=None, index=None, sep="\t", mode="a") diff --git a/workflow/scripts/plot-primer-clipping.py b/workflow/scripts/plot-primer-clipping.py index a99b55a8f..c6dabb8e3 100644 --- a/workflow/scripts/plot-primer-clipping.py +++ b/workflow/scripts/plot-primer-clipping.py @@ -13,10 +13,8 @@ from intervaltree import IntervalTree # read primer bedpe to df -PRIMER = pd.read_csv(snakemake.params.get("bedpe", ""), delimiter="\t", header=0) -print(PRIMER) -PRIMER.drop(PRIMER.columns[[0]], axis=1, inplace=True) -print(PRIMER) +PRIMER = pd.read_csv(snakemake.params.get("bedpe", ""), delimiter="\t", header=None) +PRIMER.drop(PRIMER.columns[[0, 3]], axis=1, inplace=True) PRIMER.columns = ["p1_start", "p1_end", "p2_start", "p2_end"] # convert df to interval trees @@ -118,7 +116,7 @@ def count_intervals(file): "uncut primer within", "cut primer exact", "cut primer within", - "no matching win", + "no mathing win", ], } ) From d7539105fdd201e10ae5974ea7057af492f3f29a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 10:56:20 +0200 Subject: [PATCH 06/43] Update pangolin to 4.1.2 (#550) --- workflow/envs/pangolin.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index 6c35b9d1f..4cbee4451 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -2,4 +2,4 @@ channels: - bioconda - conda-forge dependencies: - - pangolin =4.1.1 + - pangolin =4.1.2 From cf2e08e1696b0233104e51ddf09d500ee6d60fa5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 13:49:02 +0200 Subject: [PATCH 07/43] chore(deps): bump actions/setup-python from 3 to 4.1.0 (#548) --- .github/workflows/documentation.yml | 2 +- .github/workflows/main.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index f2aa22e9d..226a47ce4 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v2 - name: SetUp Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: 3.x diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fbc4299df..042365385 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -53,7 +53,7 @@ jobs: if: github.ref != 'refs/heads/master' steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 - uses: pre-commit/action@v3.0.0 Technology-Tests: From bb00f7836500c28bf5eeb0e5f7c1d8e66a3318d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 16:47:12 +0200 Subject: [PATCH 08/43] chore(deps): bump github/super-linter from 4.9.2 to 4.9.4 (#540) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 042365385..160074f69 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Formatting - uses: github/super-linter@v4.9.2 + uses: github/super-linter@v4.9.4 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master From a4951a60f16548e93cbc99d0544eef4837fb2a19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Aug 2022 11:06:33 +0200 Subject: [PATCH 09/43] chore(deps): bump github/super-linter from 4.9.4 to 4.9.6 (#557) Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.4 to 4.9.6. - [Release notes](https://github.com/github/super-linter/releases) - [Changelog](https://github.com/github/super-linter/blob/main/docs/release-process.md) - [Commits](https://github.com/github/super-linter/compare/v4.9.4...v4.9.6) --- updated-dependencies: - dependency-name: github/super-linter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 160074f69..c0e32dfed 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Formatting - uses: github/super-linter@v4.9.4 + uses: github/super-linter@v4.9.6 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master From a0b6fd0557b7e6cb3aeddd22e6a3350560c18415 Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Wed, 12 Oct 2022 16:07:19 +0200 Subject: [PATCH 10/43] fix: update channel priorities and snakemake wrappers (#562) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * change channel priorities in all environments * fix * change python version * fix typo * remove stage in * revert python version pinning * updated versions of wrappers in rules * removed dependency of entrez-direct from entrez.yaml as a test because of error message * fix entrez env * Update bcftools concat wrapper * update bcftools concat wrapper * bump to latest entrez * fix output file names for bwa index wrappers * adapt sort argument of bwa mem wrapper to latest version * adapt mark duplicates to wrapper changes * bump pangolin * requre older tabulate version * fmt * try bumping notebook version * fix: notebook versions * fix wrapper name * bump bcftools concat wrapper * updated and checked all wrappers * cleanup * fix extra args Co-authored-by: lenakinzel Co-authored-by: Johannes Köster Co-authored-by: Johannes Köster --- .github/workflows/main.yml | 1 - workflow/envs/abyss.yaml | 3 ++- workflow/envs/bamclipper.yaml | 3 ++- workflow/envs/bcftools.yaml | 3 ++- workflow/envs/bedtools.yaml | 3 ++- workflow/envs/canu.yaml | 3 ++- workflow/envs/delly.yaml | 3 ++- workflow/envs/entrez.yaml | 5 ++-- workflow/envs/fgbio.yaml | 3 ++- workflow/envs/genometools.yaml | 3 ++- workflow/envs/gff3sort.yaml | 3 ++- workflow/envs/kraken.yaml | 3 ++- workflow/envs/longshot.yaml | 2 ++ workflow/envs/mason.yaml | 3 ++- workflow/envs/medaka.yaml | 3 ++- workflow/envs/megahit.yaml | 3 ++- workflow/envs/minimap2.yaml | 3 ++- workflow/envs/multiqc.yaml | 3 ++- workflow/envs/nanofilt.yaml | 3 ++- workflow/envs/nanoqc.yaml | 2 ++ workflow/envs/notramp.yaml | 3 ++- workflow/envs/pangolin.yaml | 4 ++- workflow/envs/pysam.yaml | 1 + workflow/envs/python.yaml | 1 + workflow/envs/quast.yaml | 3 ++- workflow/envs/ragoo.yaml | 3 ++- workflow/envs/rbt.yaml | 3 ++- workflow/envs/samtools.yaml | 3 ++- workflow/envs/seqtk.yaml | 3 ++- workflow/envs/snakemake.yaml | 3 ++- workflow/envs/sourmash.yaml | 3 ++- workflow/envs/spades.yaml | 3 ++- workflow/envs/svn.yaml | 1 + workflow/envs/tabix.yaml | 3 ++- workflow/envs/trinity.yaml | 4 +-- workflow/envs/ucsc.yaml | 3 ++- workflow/envs/unix.yaml | 3 ++- workflow/envs/varlociraptor.yaml | 3 ++- workflow/envs/velvet.yaml | 3 ++- .../assembly-benchmark-results.py.ipynb | 2 +- workflow/notebooks/call-strains.py.ipynb | 2 +- .../plot-all-strains-kallisto.py.ipynb | 2 +- .../plot-all-strains-pangolin.py.ipynb | 2 +- workflow/notebooks/plot-read-call.py.ipynb | 2 +- .../notebooks/plot-strains-kallisto.py.ipynb | 2 +- .../notebooks/test-benchmark-results.py.ipynb | 2 +- workflow/rules/common.smk | 4 --- workflow/rules/lineage_variant_calling.smk | 9 +++++++ workflow/rules/qc.smk | 12 ++++----- workflow/rules/read_clipping.smk | 3 +-- workflow/rules/read_mapping.smk | 27 +++++++------------ workflow/rules/read_trimming.smk | 4 +-- workflow/rules/strain_calling.smk | 6 ++--- workflow/rules/utils.smk | 6 ++--- workflow/rules/variant_annotation.smk | 4 +-- workflow/rules/variant_calling.smk | 14 +++++----- workflow/rules/variant_filtration.smk | 10 +++---- 57 files changed, 129 insertions(+), 95 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c0e32dfed..f2ff33e4d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -133,7 +133,6 @@ jobs: - name: Test rule ${{ matrix.rule }} on ${{ matrix.technology }} ${{ matrix.seq_method }} data uses: snakemake/snakemake-github-action@v1.24.0 with: - stagein: mamba env create -f workflow/envs/trinity.yaml -n trinity directory: .tests snakefile: workflow/Snakefile args: "-pr --use-conda --show-failed-logs --cores 2 --resources ncbi_api_requests=1 --conda-cleanup-pkgs cache --conda-frontend mamba ${{ matrix.rule }}" diff --git a/workflow/envs/abyss.yaml b/workflow/envs/abyss.yaml index d108c4bbe..d78e585d5 100644 --- a/workflow/envs/abyss.yaml +++ b/workflow/envs/abyss.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - abyss =2.3.1 diff --git a/workflow/envs/bamclipper.yaml b/workflow/envs/bamclipper.yaml index 403412f2b..bffea9bdf 100644 --- a/workflow/envs/bamclipper.yaml +++ b/workflow/envs/bamclipper.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - bamclipper =1.0 - samtools =1.14 # see https://github.com/merenlab/anvio/issues/1479 diff --git a/workflow/envs/bcftools.yaml b/workflow/envs/bcftools.yaml index 22df755f9..af0652bb7 100644 --- a/workflow/envs/bcftools.yaml +++ b/workflow/envs/bcftools.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - bcftools =1.10 diff --git a/workflow/envs/bedtools.yaml b/workflow/envs/bedtools.yaml index 9a8a4f74c..3df68a030 100644 --- a/workflow/envs/bedtools.yaml +++ b/workflow/envs/bedtools.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - bedtools =2.30.0 diff --git a/workflow/envs/canu.yaml b/workflow/envs/canu.yaml index a8fec4951..c181758e3 100644 --- a/workflow/envs/canu.yaml +++ b/workflow/envs/canu.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: # do not use canu 2.2 ! - canu =2.1.1 diff --git a/workflow/envs/delly.yaml b/workflow/envs/delly.yaml index 5e84c3e7e..0915d03b6 100644 --- a/workflow/envs/delly.yaml +++ b/workflow/envs/delly.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - delly =0.8.7 - pysam =0.16 diff --git a/workflow/envs/entrez.yaml b/workflow/envs/entrez.yaml index 3387557de..8378303d8 100644 --- a/workflow/envs/entrez.yaml +++ b/workflow/envs/entrez.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - - entrez-direct =13.9 + - entrez-direct =16.2 diff --git a/workflow/envs/fgbio.yaml b/workflow/envs/fgbio.yaml index 14ee90356..51f5e3524 100644 --- a/workflow/envs/fgbio.yaml +++ b/workflow/envs/fgbio.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - fgbio =1.3 diff --git a/workflow/envs/genometools.yaml b/workflow/envs/genometools.yaml index 8b295f90f..975fd5b6c 100644 --- a/workflow/envs/genometools.yaml +++ b/workflow/envs/genometools.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - genometools-genometools =1.6.2 diff --git a/workflow/envs/gff3sort.yaml b/workflow/envs/gff3sort.yaml index c3a285ae4..d554c69ff 100644 --- a/workflow/envs/gff3sort.yaml +++ b/workflow/envs/gff3sort.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - gff3sort = 0.1 diff --git a/workflow/envs/kraken.yaml b/workflow/envs/kraken.yaml index 1e279c562..979d75cff 100644 --- a/workflow/envs/kraken.yaml +++ b/workflow/envs/kraken.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - kraken2 =2.1.1 - krona =2.7.1 diff --git a/workflow/envs/longshot.yaml b/workflow/envs/longshot.yaml index e9874cc14..244a10869 100644 --- a/workflow/envs/longshot.yaml +++ b/workflow/envs/longshot.yaml @@ -1,4 +1,6 @@ channels: + - conda-forge - bioconda + - nodefaults dependencies: - longshot =0.4 diff --git a/workflow/envs/mason.yaml b/workflow/envs/mason.yaml index cd253e39e..5025c1576 100644 --- a/workflow/envs/mason.yaml +++ b/workflow/envs/mason.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - mason =2.0 diff --git a/workflow/envs/medaka.yaml b/workflow/envs/medaka.yaml index 591aae2cb..dc5efb316 100644 --- a/workflow/envs/medaka.yaml +++ b/workflow/envs/medaka.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - medaka =1.0 - tensorflow =1.14 diff --git a/workflow/envs/megahit.yaml b/workflow/envs/megahit.yaml index 19b84287a..278221b32 100644 --- a/workflow/envs/megahit.yaml +++ b/workflow/envs/megahit.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - megahit =1.2 diff --git a/workflow/envs/minimap2.yaml b/workflow/envs/minimap2.yaml index a44e24867..b8696b0df 100644 --- a/workflow/envs/minimap2.yaml +++ b/workflow/envs/minimap2.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - minimap2 =2.22 diff --git a/workflow/envs/multiqc.yaml b/workflow/envs/multiqc.yaml index e01cee038..990cfe07c 100644 --- a/workflow/envs/multiqc.yaml +++ b/workflow/envs/multiqc.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - multiqc =1.11 diff --git a/workflow/envs/nanofilt.yaml b/workflow/envs/nanofilt.yaml index e845b6fba..5c556e2c4 100644 --- a/workflow/envs/nanofilt.yaml +++ b/workflow/envs/nanofilt.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - nanofilt =2.8 - gzip =1.11 diff --git a/workflow/envs/nanoqc.yaml b/workflow/envs/nanoqc.yaml index 24ef61680..a772998c8 100644 --- a/workflow/envs/nanoqc.yaml +++ b/workflow/envs/nanoqc.yaml @@ -1,4 +1,6 @@ channels: + - conda-forge - bioconda + - nodefaults dependencies: - nanoqc =0.9 diff --git a/workflow/envs/notramp.yaml b/workflow/envs/notramp.yaml index 2a57c7ba6..4f35530d1 100644 --- a/workflow/envs/notramp.yaml +++ b/workflow/envs/notramp.yaml @@ -1,7 +1,8 @@ channels: - simakro - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - notramp =1.0.5 - minimap2 =2.22 diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index 4cbee4451..52f9310fd 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -1,5 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - pangolin =4.1.2 + - tabulate <0.9 # TODO remove once pangolin 4.1.3 is available in bioconda diff --git a/workflow/envs/pysam.yaml b/workflow/envs/pysam.yaml index 125149cd4..2b748a104 100644 --- a/workflow/envs/pysam.yaml +++ b/workflow/envs/pysam.yaml @@ -1,6 +1,7 @@ channels: - conda-forge - bioconda + - nodefaults dependencies: - jupyter =1.0 - pysam =0.16 diff --git a/workflow/envs/python.yaml b/workflow/envs/python.yaml index 15b460ad8..d918d4686 100644 --- a/workflow/envs/python.yaml +++ b/workflow/envs/python.yaml @@ -2,6 +2,7 @@ channels: - conda-forge - bioconda - anaconda + - nodefaults dependencies: - pandas =1.2 - jupyter =1.0 diff --git a/workflow/envs/quast.yaml b/workflow/envs/quast.yaml index fd77ea287..3f361e8a3 100644 --- a/workflow/envs/quast.yaml +++ b/workflow/envs/quast.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - quast =5.0 diff --git a/workflow/envs/ragoo.yaml b/workflow/envs/ragoo.yaml index 19ba3af9b..3e3edfcd9 100644 --- a/workflow/envs/ragoo.yaml +++ b/workflow/envs/ragoo.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda - imperial-college-research-computing + - nodefaults dependencies: - ragoo =1.1 diff --git a/workflow/envs/rbt.yaml b/workflow/envs/rbt.yaml index c02a4aa57..b587821b4 100644 --- a/workflow/envs/rbt.yaml +++ b/workflow/envs/rbt.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - rust-bio-tools =0.39 diff --git a/workflow/envs/samtools.yaml b/workflow/envs/samtools.yaml index 8de8caf4e..5c86db4c8 100644 --- a/workflow/envs/samtools.yaml +++ b/workflow/envs/samtools.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - samtools =1.14 diff --git a/workflow/envs/seqtk.yaml b/workflow/envs/seqtk.yaml index 101cc3c9d..3db1b1995 100644 --- a/workflow/envs/seqtk.yaml +++ b/workflow/envs/seqtk.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - seqtk =1.3 diff --git a/workflow/envs/snakemake.yaml b/workflow/envs/snakemake.yaml index 522c65b4d..bf82582ac 100644 --- a/workflow/envs/snakemake.yaml +++ b/workflow/envs/snakemake.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - snakemake =7.0 diff --git a/workflow/envs/sourmash.yaml b/workflow/envs/sourmash.yaml index f24fcfd79..8182f7cea 100644 --- a/workflow/envs/sourmash.yaml +++ b/workflow/envs/sourmash.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - sourmash =3.5 diff --git a/workflow/envs/spades.yaml b/workflow/envs/spades.yaml index 4e37a04a2..d88fde2cb 100644 --- a/workflow/envs/spades.yaml +++ b/workflow/envs/spades.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - spades =3.15 diff --git a/workflow/envs/svn.yaml b/workflow/envs/svn.yaml index 19014f0ed..f803222eb 100644 --- a/workflow/envs/svn.yaml +++ b/workflow/envs/svn.yaml @@ -1,4 +1,5 @@ channels: - anaconda + - nodefaults dependencies: - svn =1.10 diff --git a/workflow/envs/tabix.yaml b/workflow/envs/tabix.yaml index 6db26455c..7fa9caf2c 100644 --- a/workflow/envs/tabix.yaml +++ b/workflow/envs/tabix.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - tabix =0.2 - curl diff --git a/workflow/envs/trinity.yaml b/workflow/envs/trinity.yaml index 90993fc33..8476259a8 100644 --- a/workflow/envs/trinity.yaml +++ b/workflow/envs/trinity.yaml @@ -1,7 +1,7 @@ channels: - - bioconda - conda-forge - - defaults + - bioconda + - nodefaults dependencies: - trinity =2.13 # ensure that we use a bowtie2 that already contains fixed dependency constraints diff --git a/workflow/envs/ucsc.yaml b/workflow/envs/ucsc.yaml index 46f35cd28..47e50dbbd 100644 --- a/workflow/envs/ucsc.yaml +++ b/workflow/envs/ucsc.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - ucsc-bigbedtobed =377 diff --git a/workflow/envs/unix.yaml b/workflow/envs/unix.yaml index f1899ae37..56a2099aa 100644 --- a/workflow/envs/unix.yaml +++ b/workflow/envs/unix.yaml @@ -1,6 +1,7 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - curl - sed diff --git a/workflow/envs/varlociraptor.yaml b/workflow/envs/varlociraptor.yaml index 10b6135e9..39ff16514 100644 --- a/workflow/envs/varlociraptor.yaml +++ b/workflow/envs/varlociraptor.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - varlociraptor =4.9 diff --git a/workflow/envs/velvet.yaml b/workflow/envs/velvet.yaml index eca4e7763..6c7e886a1 100644 --- a/workflow/envs/velvet.yaml +++ b/workflow/envs/velvet.yaml @@ -1,5 +1,6 @@ channels: - - bioconda - conda-forge + - bioconda + - nodefaults dependencies: - velvet =1.2 diff --git a/workflow/notebooks/assembly-benchmark-results.py.ipynb b/workflow/notebooks/assembly-benchmark-results.py.ipynb index d8aa95695..46e7dbc64 100644 --- a/workflow/notebooks/assembly-benchmark-results.py.ipynb +++ b/workflow/notebooks/assembly-benchmark-results.py.ipynb @@ -197,5 +197,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/notebooks/call-strains.py.ipynb b/workflow/notebooks/call-strains.py.ipynb index ff610b737..686f045a9 100644 --- a/workflow/notebooks/call-strains.py.ipynb +++ b/workflow/notebooks/call-strains.py.ipynb @@ -74,5 +74,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/notebooks/plot-all-strains-kallisto.py.ipynb b/workflow/notebooks/plot-all-strains-kallisto.py.ipynb index abe135106..24b3e31aa 100644 --- a/workflow/notebooks/plot-all-strains-kallisto.py.ipynb +++ b/workflow/notebooks/plot-all-strains-kallisto.py.ipynb @@ -53,5 +53,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/notebooks/plot-all-strains-pangolin.py.ipynb b/workflow/notebooks/plot-all-strains-pangolin.py.ipynb index 502048479..7785d2b1d 100644 --- a/workflow/notebooks/plot-all-strains-pangolin.py.ipynb +++ b/workflow/notebooks/plot-all-strains-pangolin.py.ipynb @@ -46,5 +46,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/notebooks/plot-read-call.py.ipynb b/workflow/notebooks/plot-read-call.py.ipynb index aab051f9a..3ccc4d147 100644 --- a/workflow/notebooks/plot-read-call.py.ipynb +++ b/workflow/notebooks/plot-read-call.py.ipynb @@ -100,5 +100,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/notebooks/plot-strains-kallisto.py.ipynb b/workflow/notebooks/plot-strains-kallisto.py.ipynb index c2a26048a..bcfede786 100644 --- a/workflow/notebooks/plot-strains-kallisto.py.ipynb +++ b/workflow/notebooks/plot-strains-kallisto.py.ipynb @@ -60,5 +60,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/notebooks/test-benchmark-results.py.ipynb b/workflow/notebooks/test-benchmark-results.py.ipynb index 038f91089..616ac7ec7 100644 --- a/workflow/notebooks/test-benchmark-results.py.ipynb +++ b/workflow/notebooks/test-benchmark-results.py.ipynb @@ -52,5 +52,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index 6400076ac..d29581213 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -386,10 +386,6 @@ def get_reference(suffix=""): return inner -def get_bwa_index_prefix(index_paths): - return os.path.splitext(index_paths[0])[0] - - def get_reads(wildcards): # alignment against the human reference genome is done with trimmed reads, # since this alignment is used to generate the ordered, non human reads diff --git a/workflow/rules/lineage_variant_calling.smk b/workflow/rules/lineage_variant_calling.smk index 3f6bbeed1..f50053f1f 100644 --- a/workflow/rules/lineage_variant_calling.smk +++ b/workflow/rules/lineage_variant_calling.smk @@ -48,6 +48,15 @@ rule generate_lineage_variant_table: "../scripts/generate-lineage-variant-table.py" +rule get_lineage_variant_table: + input: + expand( + "results/{date}/lineage-variant-report/{sample}.csv", + date="2022-05-16", + sample=get_samples_for_date("2022-05-16"), + ), + + use rule overview_table_html as generate_lineage_variant_report with: input: "results/{date}/lineage-variant-report/{sample}.csv", diff --git a/workflow/rules/qc.smk b/workflow/rules/qc.smk index 5e1e26231..d45cd0a38b 100644 --- a/workflow/rules/qc.smk +++ b/workflow/rules/qc.smk @@ -13,7 +13,7 @@ rule fastqc: log: "logs/{date}/fastqc/{sample}.log", wrapper: - "0.69.0/bio/fastqc" + "v1.12.2/bio/fastqc" # TODO Change multiqc rules back to MultiQC wrapper once v1.11 is released @@ -38,13 +38,13 @@ rule multiqc: output: "results/{date}/qc/multiqc.html", params: - params=( + extra=( "--config config/multiqc_config.yaml --title 'Results for data from {date}'" ), log: "logs/{date}/multiqc.log", wrapper: - "v0.86.0/bio/multiqc" + "v1.15.1/bio/multiqc" rule multiqc_lab: @@ -66,11 +66,11 @@ rule multiqc_lab: subcategory="1. Quality Control", ), params: - params="--config config/multiqc_config_lab.yaml --title 'Results for data from {date}'", + extra="--config config/multiqc_config_lab.yaml --title 'Results for data from {date}'", log: "logs/{date}/multiqc.log", wrapper: - "v0.86.0/bio/multiqc" + "v1.15.1/bio/multiqc" rule samtools_flagstat: @@ -81,7 +81,7 @@ rule samtools_flagstat: log: "logs/{date}/samtools/{sample}_flagstat.log", wrapper: - "0.70.0/bio/samtools/flagstat" + "v1.15.1/bio/samtools/flagstat" rule samtools_depth: diff --git a/workflow/rules/read_clipping.smk b/workflow/rules/read_clipping.smk index 8abdde7ed..8d93acc74 100644 --- a/workflow/rules/read_clipping.smk +++ b/workflow/rules/read_clipping.smk @@ -13,12 +13,11 @@ rule samtools_sort: extra=( lambda wildcards: "-n -m 4G" if wildcards.sorted_by == "name" else "-m 4G" ), - tmp_dir="/tmp/", log: "logs/{date}/sort-bam/{read_type}~{sorted_by}/{sample}.{stage}.log", threads: 8 wrapper: - "0.74.0/bio/samtools/sort" + "v1.15.1/bio/samtools/sort" rule bed_to_bedpe: diff --git a/workflow/rules/read_mapping.smk b/workflow/rules/read_mapping.smk index b4b2243b2..5c369aef5 100644 --- a/workflow/rules/read_mapping.smk +++ b/workflow/rules/read_mapping.smk @@ -8,7 +8,7 @@ rule bwa_index: input: get_reference(), output: - multiext( + idx=multiext( "results/{date}/bwa/index/ref~{reference}.fasta", ".amb", ".ann", @@ -16,19 +16,17 @@ rule bwa_index: ".pac", ".sa", ), - params: - prefix=lambda w, output: get_bwa_index_prefix(output), log: "logs/{date}/bwa-index/ref~{reference}.log", wrapper: - "0.69.0/bio/bwa/index" + "v1.15.1/bio/bwa/index" rule bwa_large_index: input: get_reference(), output: - multiext( + idx=multiext( "resources/bwa/index/ref~{reference}.fasta", ".amb", ".ann", @@ -36,12 +34,10 @@ rule bwa_large_index: ".pac", ".sa", ), - params: - prefix=lambda w, output: get_bwa_index_prefix(output), log: "logs/bwa-index/ref~{reference}.log", wrapper: - "0.69.0/bio/bwa/index" + "v1.15.1/bio/bwa/index" rule map_reads: @@ -53,27 +49,24 @@ rule map_reads: log: "logs/{date}/bwa-mem/ref~{reference}/{sample}.log", params: - index=lambda w, input: get_bwa_index_prefix(input.idx), extra="", - sort="samtools", + sorting="samtools", sort_order="coordinate", threads: 8 wrapper: - "0.69.0/bio/bwa/mem" + "v1.15.1/bio/bwa/mem" rule mark_duplicates: input: - "results/{date}/mapped/ref~{reference}/{sample}.bam", + bams="results/{date}/mapped/ref~{reference}/{sample}.bam", output: bam=temp("results/{date}/dedup/ref~{reference}/{sample}.bam"), metrics="results/{date}/qc/dedup/ref~{reference}/{sample}.metrics.txt", log: "logs/{date}/picard/dedup/ref~{reference}/{sample}.log", - params: - "", wrapper: - "0.69.0/bio/picard/markduplicates" + "v1.15.1/bio/picard/markduplicates" rule samtools_calmd: @@ -85,7 +78,7 @@ rule samtools_calmd: log: "logs/{date}/samtools-calmd/ref~{reference}/{sample}.log", params: - "-A", + extra="-A", threads: 8 wrapper: - "0.69.0/bio/samtools/calmd" + "v1.15.1/bio/samtools/calmd" diff --git a/workflow/rules/read_trimming.smk b/workflow/rules/read_trimming.smk index adad21cb0..0c1f4bdcf 100644 --- a/workflow/rules/read_trimming.smk +++ b/workflow/rules/read_trimming.smk @@ -28,7 +28,7 @@ rule fastp_pe: "logs/{date}/fastp/fastp-pe/{sample}.log", threads: 2 wrapper: - "0.70.0/bio/fastp" + "v1.15.1/bio/fastp" rule fastp_se: @@ -50,4 +50,4 @@ rule fastp_se: "results/{date}/trimmed/fastp-se/{sample}.log", threads: 2 wrapper: - "0.80.2/bio/fastp" + "v1.15.1/bio/fastp" diff --git a/workflow/rules/strain_calling.smk b/workflow/rules/strain_calling.smk index 2ace90fe7..0d86db0a5 100644 --- a/workflow/rules/strain_calling.smk +++ b/workflow/rules/strain_calling.smk @@ -37,13 +37,11 @@ rule kallisto_index: fasta="results/{date}/kallisto/strain-genomes.fasta", output: index=temp("results/{date}/kallisto/strain-genomes.idx"), - params: - extra="", log: "logs/{date}/kallisto-index.log", threads: 8 wrapper: - "0.70.0/bio/kallisto/index" + "v1.15.1/bio/kallisto/index" rule kallisto_metrics: @@ -74,7 +72,7 @@ rule kallisto_quant: "logs/{date}/kallisto_quant/{sample}.log", threads: 8 wrapper: - "0.70.0/bio/kallisto/quant" + "v1.15.1/bio/kallisto/quant" rule kallisto_call_strains: diff --git a/workflow/rules/utils.smk b/workflow/rules/utils.smk index e9efda07f..0b8749070 100644 --- a/workflow/rules/utils.smk +++ b/workflow/rules/utils.smk @@ -14,7 +14,7 @@ rule tabix_index: log: "logs/tabix-{fmt}/{prefix}.log", wrapper: - "0.70.0/bio/tabix" + "v1.15.1/bio/tabix/index" rule bam_index: @@ -25,7 +25,7 @@ rule bam_index: log: "logs/bam-index/{prefix}.log", wrapper: - "0.70.0/bio/samtools/index" + "v1.15.1/bio/samtools/index" rule bcf_index: @@ -62,7 +62,7 @@ rule faidx: log: "logs/faidx/{prefix}.log", wrapper: - "0.70.0/bio/samtools/faidx" + "v1.15.1/bio/samtools/faidx" rule gzip: diff --git a/workflow/rules/variant_annotation.smk b/workflow/rules/variant_annotation.smk index 687eb73ad..2d58cec4f 100644 --- a/workflow/rules/variant_annotation.smk +++ b/workflow/rules/variant_annotation.smk @@ -12,7 +12,7 @@ rule get_vep_plugins: log: "logs/vep-plugins.log", wrapper: - "0.69.0/bio/vep/plugins" + "v1.15.1/bio/vep/plugins" rule annotate_variants: @@ -36,4 +36,4 @@ rule annotate_variants: log: "logs/{date}/vep/{annotation}/{sample}.log", wrapper: - "0.72.0/bio/vep/annotate" + "v1.15.1/bio/vep/annotate" diff --git a/workflow/rules/variant_calling.smk b/workflow/rules/variant_calling.smk index 8f757352c..ce9f060ec 100644 --- a/workflow/rules/variant_calling.smk +++ b/workflow/rules/variant_calling.smk @@ -10,9 +10,9 @@ rule freebayes: ref_idx=get_reference(".fai"), # you can have a list of samples here samples="results/{date}/recal/ref~{reference}/{sample}.bam", - index="results/{date}/recal/ref~{reference}/{sample}.bam.bai", + indexes="results/{date}/recal/ref~{reference}/{sample}.bam.bai", output: - temp("results/{date}/candidate-calls/ref~{reference}/{sample}.small.bcf"), + "results/{date}/candidate-calls/ref~{reference}/{sample}.small.bcf", params: # genotyping is performed by varlociraptor, hence we deactivate it in freebayes by # always setting --pooled-continuous @@ -22,7 +22,7 @@ rule freebayes: log: "logs/{date}/freebayes/ref~{reference}/{sample}.log", wrapper: - "0.80.1/bio/freebayes" + "v1.15.1/bio/freebayes" # TODO check delly single end mode @@ -33,7 +33,7 @@ rule delly: sample="results/{date}/recal/ref~{reference}/{sample}.bam", sample_idx="results/{date}/recal/ref~{reference}/{sample}.bam.bai", output: - temp("results/{date}/candidate-calls/ref~{reference}/{sample}.structural.bcf"), + "results/{date}/candidate-calls/ref~{reference}/{sample}.structural.bcf", log: "logs/{date}/delly/ref~{reference}/{sample}.log", conda: @@ -100,7 +100,7 @@ rule vcf_2_bcf: conda: "../envs/bcftools.yaml" shell: - "bcftools view -Oz -o {output} {input} 2> {log}" + "bcftools view -Oz -o {output} {input} 2> {log}" # TODO -Oz generates a .vcf.gz!! rule render_scenario: @@ -184,6 +184,6 @@ rule merge_varranges: log: "logs/{date}/merge-calls/ref~{reference}/{sample}.log", params: - "-a -Ob", + extra="-a", wrapper: - "0.69.0/bio/bcftools/concat" + "v1.15.1/bio/bcftools/concat" diff --git a/workflow/rules/variant_filtration.smk b/workflow/rules/variant_filtration.smk index 0c81778c3..ab81d6d2b 100644 --- a/workflow/rules/variant_filtration.smk +++ b/workflow/rules/variant_filtration.smk @@ -6,9 +6,9 @@ rule vembrane_filter: input: - "results/{date}/annotated-calls/ref~main/annot~{annotation}/{sample}.bcf", + vcf="results/{date}/annotated-calls/ref~main/annot~{annotation}/{sample}.bcf", output: - temp( + vcf=temp( "results/{date}/filtered-calls/ref~main/annot~{annotation}/{sample}.{filter}.bcf" ), params: @@ -17,7 +17,7 @@ rule vembrane_filter: log: "logs/{date}/vembrane/{sample}.{filter}.{annotation}.log", wrapper: - "0.71.1/bio/vembrane/filter" + "v1.15.1/bio/vembrane/filter" rule control_fdr: @@ -48,6 +48,6 @@ rule merge_calls: log: "logs/{date}/merge-calls/ref~{reference}/{sample}.{clonality}.{filter}.{annotation}.log", params: - "-a -Ob", + extra="-a", wrapper: - "0.69.0/bio/bcftools/concat" + "v1.15.1/bio/bcftools/concat" From f34330b9e7228b22411a67cd8002ab21a2d85aca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 18:30:24 +0200 Subject: [PATCH 11/43] Update pangolin to 4.1.3 (#568) Co-authored-by: thomasbtf --- workflow/envs/pangolin.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index 52f9310fd..93a50ace5 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -3,5 +3,5 @@ channels: - bioconda - nodefaults dependencies: - - pangolin =4.1.2 + - pangolin =4.1.3 - tabulate <0.9 # TODO remove once pangolin 4.1.3 is available in bioconda From 3ae213ca97d48066cfc98a8fdb556cf77adc27c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 11:15:23 +0100 Subject: [PATCH 12/43] chore(deps): bump amannn/action-semantic-pull-request from 4 to 5 (#567) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [amannn/action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request) from 4 to 5. - [Release notes](https://github.com/amannn/action-semantic-pull-request/releases) - [Changelog](https://github.com/amannn/action-semantic-pull-request/blob/main/CHANGELOG.md) - [Commits](https://github.com/amannn/action-semantic-pull-request/compare/v4...v5) --- updated-dependencies: - dependency-name: amannn/action-semantic-pull-request dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Johannes Köster --- .github/workflows/conventional-prs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-prs.yml b/.github/workflows/conventional-prs.yml index 363efbd45..847189c08 100644 --- a/.github/workflows/conventional-prs.yml +++ b/.github/workflows/conventional-prs.yml @@ -12,6 +12,6 @@ jobs: title-format: runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v4 + - uses: amannn/action-semantic-pull-request@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 7f9ef833efff63f29b136741e5d731832d6697b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 11:15:36 +0100 Subject: [PATCH 13/43] chore(deps): bump github/super-linter from 4.9.6 to 4.9.7 (#565) Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.6 to 4.9.7. - [Release notes](https://github.com/github/super-linter/releases) - [Changelog](https://github.com/github/super-linter/blob/main/docs/release-process.md) - [Commits](https://github.com/github/super-linter/compare/v4.9.6...v4.9.7) --- updated-dependencies: - dependency-name: github/super-linter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f2ff33e4d..c93e2e629 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Formatting - uses: github/super-linter@v4.9.6 + uses: github/super-linter@v4.9.7 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master From 3d39461576fc16ab9fc92984c2917923805d1093 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 11:15:48 +0100 Subject: [PATCH 14/43] chore(deps): bump snakemake/snakemake-github-action (#563) Bumps [snakemake/snakemake-github-action](https://github.com/snakemake/snakemake-github-action) from 1.23.0 to 1.24.0. - [Release notes](https://github.com/snakemake/snakemake-github-action/releases) - [Changelog](https://github.com/snakemake/snakemake-github-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/snakemake/snakemake-github-action/compare/v1.23.0...v1.24.0) --- updated-dependencies: - dependency-name: snakemake/snakemake-github-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index cc87ad4f7..acb36005b 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -111,7 +111,7 @@ jobs: - name: Create Dockerfile if: ${{ steps.release.outputs.release_created == 'true' }} - uses: snakemake/snakemake-github-action@v1.23.0 + uses: snakemake/snakemake-github-action@v1.24.0 with: directory: . snakefile: workflow/Snakefile From 3b9e9862b216eaa7e3e0f9c96aa0c261f7633b98 Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Mon, 31 Oct 2022 11:20:58 +0100 Subject: [PATCH 15/43] fix kraken db (#574) --- workflow/envs/kraken.yaml | 2 +- workflow/rules/ref.smk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/envs/kraken.yaml b/workflow/envs/kraken.yaml index 979d75cff..ca1a271e8 100644 --- a/workflow/envs/kraken.yaml +++ b/workflow/envs/kraken.yaml @@ -3,5 +3,5 @@ channels: - bioconda - nodefaults dependencies: - - kraken2 =2.1.1 + - kraken2 =2.1.2 - krona =2.7.1 diff --git a/workflow/rules/ref.smk b/workflow/rules/ref.smk index 3f469ea3b..fa19e65b1 100644 --- a/workflow/rules/ref.smk +++ b/workflow/rules/ref.smk @@ -163,7 +163,7 @@ rule get_genome_db_for_kraken: conda: "../envs/unix.yaml" shell: - "mkdir {output} && curl -SL ftp://ftp.ccb.jhu.edu/pub/data/kraken2_dbs/minikraken_8GB_202003.tgz | tar zxvf - -C {output} --strip 1 2> {log}" + "mkdir {output} && curl -SL https://genome-idx.s3.amazonaws.com/kraken/k2_standard_08gb_20220926.tar.gz | tar zxvf - -C {output} 2> {log}" rule get_taxonomie_db_for_krona: From fa957fd44594920c12df3821a23905055b1de9c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Tue, 8 Nov 2022 12:34:21 +0100 Subject: [PATCH 16/43] fix: use latest varlociraptor release and ignore all biases in case of known lineage variant calling (#575) * fix: use latest varlociraptor release and ignore all biases in case of known lineage variant calling * Update common.smk --- workflow/envs/varlociraptor.yaml | 2 +- workflow/rules/common.smk | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/workflow/envs/varlociraptor.yaml b/workflow/envs/varlociraptor.yaml index 39ff16514..50d1bbeea 100644 --- a/workflow/envs/varlociraptor.yaml +++ b/workflow/envs/varlociraptor.yaml @@ -3,4 +3,4 @@ channels: - bioconda - nodefaults dependencies: - - varlociraptor =4.9 + - varlociraptor =5.3 diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index d29581213..fe79af15d 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -805,6 +805,16 @@ def get_list_of_amplicon_states_assembler(samples): def get_varlociraptor_bias_flags(wildcards): + if wildcards.varrange == "lineage-variants": + # Known variants, we don't want to use bias detection at all. + # Rationale: the determined biases are hints for artifacts, which are particularly + # important to maintain a high precision with denovo calls. When there is prior knowledge + # about a variant like here, they are too conservative. E.g., when I see a typical omicron + # variant in a sample, I tend to believe it even if it happens to have a strand bias. + return ( + "--omit-strand-bias --omit-read-orientation-bias --omit-read-position-bias " + "--omit-softclip-bias --omit-homopolymer-artifact-detection --omit-alt-locus-bias" + ) if is_amplicon_data(wildcards.sample): # no bias detection possible return ( From cacd8b9a0bfc36d79c1d56af899de406fdcc0a35 Mon Sep 17 00:00:00 2001 From: simakro <74452164+simakro@users.noreply.github.com> Date: Wed, 30 Nov 2022 10:31:42 +0100 Subject: [PATCH 17/43] refactor: Update medaka and deps for ont (#561) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update medaka version, dependencies and mode * cleanup * use alternative output-folder for medaka results * reset sample-sheet * style: linting * style: nl eof * small change * fix actions run * change priority * change dependency order * chore: use safer path for temp-output of medaka_variant. Co-authored-by: Simon Magin Co-authored-by: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Co-authored-by: Alex Thomas Co-authored-by: Johannes Köster --- workflow/envs/medaka.yaml | 8 +++++--- workflow/rules/variant_calling.smk | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/workflow/envs/medaka.yaml b/workflow/envs/medaka.yaml index dc5efb316..c345bbf77 100644 --- a/workflow/envs/medaka.yaml +++ b/workflow/envs/medaka.yaml @@ -3,6 +3,8 @@ channels: - bioconda - nodefaults dependencies: - - medaka =1.0 - - tensorflow =1.14 - - h5py =2.7 + - python =3.8 + - xz =5.2.6 + - medaka =1.7.0 + - tensorflow =2.7.0 + - h5py =3.7.0 diff --git a/workflow/rules/variant_calling.smk b/workflow/rules/variant_calling.smk index ce9f060ec..af5eda904 100644 --- a/workflow/rules/variant_calling.smk +++ b/workflow/rules/variant_calling.smk @@ -1,4 +1,4 @@ -# Copyright 2022 Thomas Battenfeld, Alexander Thomas, Johannes Köster. +# Copyright 2022 Thomas Battenfeld, Alexander Thomas, Simon Magin, Johannes Köster. # Licensed under the BSD 2-Clause License (https://opensource.org/licenses/BSD-2-Clause) # This file may not be copied, modified, or distributed # except according to those terms. @@ -45,23 +45,24 @@ rule delly: rule medaka_variant: input: ref=get_reference(), - sample="results/{date}/recal/ref~{reference}/{sample}.bam", - bai="results/{date}/recal/ref~{reference}/{sample}.bam.bai", + sample="results/{date}/norm_trim_raw_reads/{sample}/{sample}.cap.clip.fasta", output: - temp( - "results/{date}/candidate-calls/ref~{reference}/{sample}.homopolymer-medaka.vcf" - ), + "results/{date}/candidate-calls/ref~{reference}/{sample}.homopolymer-medaka.vcf", params: outdir=get_output_dir, + # The default model covers almost all current use cases on MinION & GridION. For best results + # with PromethION and future pores etc an option to switch between models would be required, + # e.g. add col model in sample-sheet & use default (will still work for all) if not provided. + model="r941_min_hac_variant_g507", log: "logs/{date}/medaka/variant/ref~{reference}/{sample}.log", conda: "../envs/medaka.yaml" threads: 4 shell: - "(medaka_variant -i {input.sample} -f {input.ref} -o {params.outdir}/{wildcards.sample} -t {threads} &&" - " mv $(cat {log}| grep '\- Final VCF written to' | sed s/'- Final VCF written to '//\ ) {output})" - " > {log} 2>&1" + "(medaka_haploid_variant -i {input.sample} -r {input.ref} -o medaka_tmp/medaka/{wildcards.date}/{wildcards.reference}/{wildcards.sample}" + " -t {threads} -m {params.model} && mv medaka_tmp/medaka/{wildcards.date}/{wildcards.reference}/{wildcards.sample}/medaka.annotated.vcf {output} &&" + " rm -r medaka_tmp/medaka/{wildcards.date}/{wildcards.reference}/{wildcards.sample}) > {log} 2>&1" rule longshot: From 79d288cfa7c5870932635a79dacb7c8bbf2bdefa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 12:00:09 +0100 Subject: [PATCH 18/43] chore(master): release 0.15.1 (#536) * chore(master): release 0.15.1 * Changed containerized tag to 0.15.1 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] --- CHANGELOG.md | 12 ++++++++++++ version.txt | 2 +- workflow/Snakefile | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f86ac484b..ac27577da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.15.1](https://github.com/IKIM-Essen/uncovar/compare/v0.15.0...v0.15.1) (2022-11-30) + + +### Bug Fixes + +* **ci:** update black to rev 22.3.0 ([#523](https://github.com/IKIM-Essen/uncovar/issues/523)) ([2273b7d](https://github.com/IKIM-Essen/uncovar/commit/2273b7d49d21dfe48812f7e3e4d33969b62e1d9e)) +* disable ont actions ([#555](https://github.com/IKIM-Essen/uncovar/issues/555)) ([56e46ef](https://github.com/IKIM-Essen/uncovar/commit/56e46ef7e1663b4de3447068df7cb8b9d1d7b67f)) +* Replace outdated df append ([#544](https://github.com/IKIM-Essen/uncovar/issues/544)) ([4a40003](https://github.com/IKIM-Essen/uncovar/commit/4a4000310cba4f3e8640172eadebcd35239b2e34)) +* update channel priorities and snakemake wrappers ([#562](https://github.com/IKIM-Essen/uncovar/issues/562)) ([a0b6fd0](https://github.com/IKIM-Essen/uncovar/commit/a0b6fd0557b7e6cb3aeddd22e6a3350560c18415)) +* use latest varlociraptor release and ignore all biases in case of known lineage variant calling ([#575](https://github.com/IKIM-Essen/uncovar/issues/575)) ([fa957fd](https://github.com/IKIM-Essen/uncovar/commit/fa957fd44594920c12df3821a23905055b1de9c9)) +* voc probability ([#541](https://github.com/IKIM-Essen/uncovar/issues/541)) ([db6eb17](https://github.com/IKIM-Essen/uncovar/commit/db6eb175aa7c25948677a9b64258afd377016d8c)) + ## [0.15.0](https://github.com/IKIM-Essen/uncovar/compare/v0.14.0...v0.15.0) (2022-03-24) diff --git a/version.txt b/version.txt index a55105169..e815b861f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.15.0 +0.15.1 diff --git a/workflow/Snakefile b/workflow/Snakefile index 4abff6178..51ee6aedb 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -21,7 +21,7 @@ report: "report/workflow.rst" container: "docker://condaforge/mambaforge" -containerized: "quay.io/uncovar/uncovar#0.15.0" +containerized: "quay.io/uncovar/uncovar#0.15.1" if config["strain-calling"]["use-gisaid"]: From c11ee96f3fdb5f9ac66085f463ab83cff8f84fb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 12:23:46 +0100 Subject: [PATCH 19/43] chore(deps): bump github/super-linter from 4.9.7 to 4.10.1 (#577) Bumps [github/super-linter](https://github.com/github/super-linter) from 4.9.7 to 4.10.1. - [Release notes](https://github.com/github/super-linter/releases) - [Changelog](https://github.com/github/super-linter/blob/main/docs/release-process.md) - [Commits](https://github.com/github/super-linter/compare/v4.9.7...v4.10.1) --- updated-dependencies: - dependency-name: github/super-linter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c93e2e629..efa286b4a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Formatting - uses: github/super-linter@v4.9.7 + uses: github/super-linter@v4.10.1 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master From 444f89c5426ceec5da7c3ce04942ae6f5d1f3c1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Thu, 26 Jan 2023 20:22:41 +0100 Subject: [PATCH 20/43] refactor: work around bug in snakefmt that adds two lines after each include by moving an if statement into common.smk (#578) * refactor: work around bug in snakefmt that adds two lines after each include by moving an if statement into common.smk * more refactoring --- workflow/Snakefile | 12 ++---------- workflow/rules/common.smk | 10 ++++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/workflow/Snakefile b/workflow/Snakefile index 51ee6aedb..d8f339ce5 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -24,12 +24,6 @@ container: "docker://condaforge/mambaforge" containerized: "quay.io/uncovar/uncovar#0.15.1" -if config["strain-calling"]["use-gisaid"]: - - envvars: - "GISAID_API_TOKEN", - - include: "rules/common.smk" include: "rules/benchmarking_common.smk" include: "rules/utils.smk" @@ -47,6 +41,8 @@ include: "rules/variant_filtration.smk" include: "rules/variant_report.smk" include: "rules/generate_output.smk" include: "rules/benchmarking.smk" +include: "rules/long_read.smk" +include: "rules/lineage_variant_calling.smk" if config["data-handling"]["use-data-handling"]: @@ -54,10 +50,6 @@ if config["data-handling"]["use-data-handling"]: include: "rules/preprocessing.smk" -include: "rules/long_read.smk" -include: "rules/lineage_variant_calling.smk" - - if config["data-handling"]["archive-data"]: rule save_latest_run: diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index fe79af15d..3cb8c7b49 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -11,8 +11,18 @@ import urllib.request from snakemake.utils import validate +if config["strain-calling"]["use-gisaid"]: + + envvars: + "GISAID_API_TOKEN", + + VARTYPES = ["SNV", "MNV", "INS", "DEL", "REP", "INV", "DUP"] + + ILLUMINA_VARRANGE = ["small", "structural"] + + ONT_VARRANGE = ["homopolymer-medaka", "homopolymer-longshot"] ION_VARRANGE = ["small", "structural"] From 505a2714ba0e5642312051f5e5154f7d454ff57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Wed, 1 Mar 2023 15:57:28 +0100 Subject: [PATCH 21/43] fix: use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads --- workflow/rules/common.smk | 10 ++++++++++ workflow/rules/variant_calling.smk | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index 3cb8c7b49..9491bdd9f 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -1587,6 +1587,16 @@ def get_checked_mode(): raise TypeError(f'Mode {mode} not recognized. Can be "patient" or "environment".') +def get_varlociraptor_preprocess_flags(wildcards): + technology = samples.loc[wildcards.sample, "technology"] + if technology == "ont": + return "--pairhmm-mode homopolymer" + elif technolgy == "illumina" or technology == "ion": + return "" + else: + raise NotImplementedError(f"Technology {technology} not supported.") + + def get_input_by_mode(wildcard): paths = [ expand( diff --git a/workflow/rules/variant_calling.smk b/workflow/rules/variant_calling.smk index af5eda904..8682bc980 100644 --- a/workflow/rules/variant_calling.smk +++ b/workflow/rules/variant_calling.smk @@ -143,12 +143,13 @@ rule varlociraptor_preprocess: temp("results/{date}/observations/ref~{reference}/{sample}.{varrange}.bcf"), params: depth=config["variant-calling"]["max-read-depth"], + extra=get_varlociraptor_preprocess_flags, log: "logs/{date}/varlociraptor/preprocess/ref~{reference}/{sample}.{varrange}.log", conda: "../envs/varlociraptor.yaml" shell: - "varlociraptor preprocess variants --candidates {input.candidates} " + "varlociraptor preprocess variants {params.extra} --candidates {input.candidates} " "{input.ref} --bam {input.bam} --max-depth {params.depth} --output {output} 2> {log}" From 91274a59de8f8802cb524655c2b202e43d10d236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Wed, 1 Mar 2023 15:58:03 +0100 Subject: [PATCH 22/43] Revert "fix: use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads" This reverts commit 505a2714ba0e5642312051f5e5154f7d454ff57f. --- workflow/rules/common.smk | 10 ---------- workflow/rules/variant_calling.smk | 3 +-- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index 9491bdd9f..3cb8c7b49 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -1587,16 +1587,6 @@ def get_checked_mode(): raise TypeError(f'Mode {mode} not recognized. Can be "patient" or "environment".') -def get_varlociraptor_preprocess_flags(wildcards): - technology = samples.loc[wildcards.sample, "technology"] - if technology == "ont": - return "--pairhmm-mode homopolymer" - elif technolgy == "illumina" or technology == "ion": - return "" - else: - raise NotImplementedError(f"Technology {technology} not supported.") - - def get_input_by_mode(wildcard): paths = [ expand( diff --git a/workflow/rules/variant_calling.smk b/workflow/rules/variant_calling.smk index 8682bc980..af5eda904 100644 --- a/workflow/rules/variant_calling.smk +++ b/workflow/rules/variant_calling.smk @@ -143,13 +143,12 @@ rule varlociraptor_preprocess: temp("results/{date}/observations/ref~{reference}/{sample}.{varrange}.bcf"), params: depth=config["variant-calling"]["max-read-depth"], - extra=get_varlociraptor_preprocess_flags, log: "logs/{date}/varlociraptor/preprocess/ref~{reference}/{sample}.{varrange}.log", conda: "../envs/varlociraptor.yaml" shell: - "varlociraptor preprocess variants {params.extra} --candidates {input.candidates} " + "varlociraptor preprocess variants --candidates {input.candidates} " "{input.ref} --bam {input.bam} --max-depth {params.depth} --output {output} 2> {log}" From 9455a572dead7f448cb8af7679f1f89ce7033a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Wed, 1 Mar 2023 22:09:49 +0100 Subject: [PATCH 23/43] chore: temporarily disable pre-commit ci action as it currently fails during installation (waiting for new release) (#588) --- .github/workflows/main.yml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index efa286b4a..57eb14142 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -48,13 +48,16 @@ jobs: stagein: mamba install -n snakemake -c conda-forge peppy args: "--lint" - Pre-Commit: - runs-on: ubuntu-latest - if: github.ref != 'refs/heads/master' - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v4 - - uses: pre-commit/action@v3.0.0 + # pre-commit action currently fails: + # https://github.com/IKIM-Essen/uncovar/actions/runs/4304753941/jobs/7506225198#step:4:115 + # revisit when new pre-commit release >3.0.0 is out + # Pre-Commit: + # runs-on: ubuntu-latest + # if: github.ref != 'refs/heads/master' + # steps: + # - uses: actions/checkout@v2 + # - uses: actions/setup-python@v4 + # - uses: pre-commit/action@v3.0.0 Technology-Tests: runs-on: ubuntu-latest @@ -63,7 +66,7 @@ jobs: needs: - Formatting - Linting - - Pre-Commit + #- Pre-Commit strategy: matrix: rule: [all, all -npr] @@ -172,18 +175,19 @@ jobs: needs: - Formatting - Linting - - Pre-Commit + #- Pre-Commit strategy: matrix: - rule: [ + rule: + [ benchmark_strain_calling, benchmark_assembly, benchmark_mixtures, benchmark_non_sars_cov_2, benchmark_reads, compare_assemblers, - # generate_test_cases, ] + # generate_test_cases, steps: - uses: actions/checkout@v2 From 406d456edd15715f7e14338b8195d2a09a807e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ann-Kathrin=20Br=C3=BCggemann?= <90249112+AKBrueggemann@users.noreply.github.com> Date: Thu, 23 Mar 2023 13:53:47 +0100 Subject: [PATCH 24/43] fix: changes in path requirements for snakedeploy (#590) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Changes in path requirements for snakedeploy * fmt * Changed path * Different approach to url passing * fmt * Changed path creation * Update workflow/rules/common.smk Co-authored-by: Johannes Köster * fmt * Rewind change * Change in directory call * Revert "Change in directory call" This reverts commit b5501c414a7275e8ad0cb41bfc918e8a663a88d2. --------- Co-authored-by: Johannes Köster Co-authored-by: Johannes Köster --- workflow/rules/common.smk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index 3cb8c7b49..e3b72a97f 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -4,6 +4,7 @@ # except according to those terms. from pathlib import Path +import os.path import pandas as pd import re import random @@ -212,7 +213,7 @@ def get_fastqs(wildcards): def get_resource(name): - return str((Path(workflow.snakefile).parent.parent.parent / "resources") / name) + return workflow.source_path(f"../../resources/{name}") def get_report_input(pattern): From aced95e798fd0483e99120550f49614e680f56dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Thu, 23 Mar 2023 16:22:55 +0100 Subject: [PATCH 25/43] fix: improved clonality event definition, usage of major subclone for assembly polishing; upgrade to varlociraptor 6.0 (#585) * fix: improved clonality event definition, usage of major subclone for assembly polishing; upgrade to varlociraptor 6.0 * adapt wildcard constraints --- workflow/envs/varlociraptor.yaml | 2 +- workflow/rules/assembly.smk | 4 ++-- workflow/rules/common.smk | 16 ++++++++++------ workflow/rules/variant_filtration.smk | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/workflow/envs/varlociraptor.yaml b/workflow/envs/varlociraptor.yaml index 50d1bbeea..151fb2668 100644 --- a/workflow/envs/varlociraptor.yaml +++ b/workflow/envs/varlociraptor.yaml @@ -3,4 +3,4 @@ channels: - bioconda - nodefaults dependencies: - - varlociraptor =5.3 + - varlociraptor =6.0 diff --git a/workflow/rules/assembly.smk b/workflow/rules/assembly.smk index 62cc50298..08c92dbbb 100644 --- a/workflow/rules/assembly.smk +++ b/workflow/rules/assembly.smk @@ -159,8 +159,8 @@ rule filter_chr0: rule assembly_polishing_illumina: input: fasta="results/{date}/contigs/ordered/{sample}.fasta", - bcf="results/{date}/filtered-calls/ref~{sample}/{sample}.clonal.nofilter.orf.bcf", - bcfidx="results/{date}/filtered-calls/ref~{sample}/{sample}.clonal.nofilter.orf.bcf.csi", + bcf="results/{date}/filtered-calls/ref~{sample}/{sample}.subclonal-major.nofilter.orf.bcf", + bcfidx="results/{date}/filtered-calls/ref~{sample}/{sample}.subclonal-major.nofilter.orf.bcf.csi", output: report( "results/{date}/polishing/bcftools-illumina/{sample}.fasta", diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index e3b72a97f..79c87962e 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -599,12 +599,16 @@ def get_bwa_index(wildcards): def get_target_events(wildcards): - if wildcards.reference == "main" or wildcards.clonality != "clonal": - # calling variants against the wuhan reference or we are explicitly interested in subclonal as well - return "SUBCLONAL_MINOR SUBCLONAL_MAJOR SUBCLONAL_HIGH CLONAL" - else: - # only keep clonal variants + if wildcards.clonality == "clonal": return "CLONAL" + elif wildcards.clonality == "subclonal-major": + return "CLONAL SUBCLONAL_MAJOR SUBCLONAL_HIGH" + elif wildcards.clonality == "subclonal-high": + return "CLONAL SUBCLONAL_HIGH" + elif wildcards.clonality == "subclonal": + return "CLONAL SUBCLONAL_MAJOR SUBCLONAL_HIGH SUBCLONAL_MINOR" + else: + raise ValueError(f"Unsupported clonality value: {wildcards.clonality}") def get_control_fdr_input(wildcards): @@ -1670,7 +1674,7 @@ def get_genome_annotation(suffix=""): wildcard_constraints: sample="[^/.]+", vartype="|".join(VARTYPES), - clonality="subclonal|clonal", + clonality="subclonal|clonal|subclonal-major|subclonal-high", annotation="orf|protein", filter="|".join( list(map(re.escape, config["variant-calling"]["filters"])) + ["nofilter"] diff --git a/workflow/rules/variant_filtration.smk b/workflow/rules/variant_filtration.smk index ab81d6d2b..e9ed62cd1 100644 --- a/workflow/rules/variant_filtration.smk +++ b/workflow/rules/variant_filtration.smk @@ -35,7 +35,7 @@ rule control_fdr: conda: "../envs/varlociraptor.yaml" shell: - "varlociraptor filter-calls control-fdr --local {input} --var {wildcards.vartype} " + "varlociraptor filter-calls control-fdr --mode local-smart {input} --var {wildcards.vartype} " "--events {params.events} --fdr {params.fdr} > {output} 2> {log}" From 9bc814f7cb9e9d9e53d557d463e782801070b46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Thu, 14 Sep 2023 14:19:46 +0200 Subject: [PATCH 26/43] fix: use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads (#587) * Revert "Revert "fix: use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads"" This reverts commit 91274a59de8f8802cb524655c2b202e43d10d236. * properly retrieve sample data frame * use pep sample table * fix typo * fix technology call --------- Co-authored-by: Alex Thomas --- workflow/rules/common.smk | 10 ++++++++++ workflow/rules/variant_calling.smk | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index 79c87962e..d712652ad 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -1592,6 +1592,16 @@ def get_checked_mode(): raise TypeError(f'Mode {mode} not recognized. Can be "patient" or "environment".') +def get_varlociraptor_preprocess_flags(wildcards): + technology = get_technology(wildcards) + if technology == "ont": + return "--pairhmm-mode homopolymer" + elif technology == "illumina" or technology == "ion": + return "" + else: + raise NotImplementedError(f"Technology {technology} not supported.") + + def get_input_by_mode(wildcard): paths = [ expand( diff --git a/workflow/rules/variant_calling.smk b/workflow/rules/variant_calling.smk index af5eda904..8682bc980 100644 --- a/workflow/rules/variant_calling.smk +++ b/workflow/rules/variant_calling.smk @@ -143,12 +143,13 @@ rule varlociraptor_preprocess: temp("results/{date}/observations/ref~{reference}/{sample}.{varrange}.bcf"), params: depth=config["variant-calling"]["max-read-depth"], + extra=get_varlociraptor_preprocess_flags, log: "logs/{date}/varlociraptor/preprocess/ref~{reference}/{sample}.{varrange}.log", conda: "../envs/varlociraptor.yaml" shell: - "varlociraptor preprocess variants --candidates {input.candidates} " + "varlociraptor preprocess variants {params.extra} --candidates {input.candidates} " "{input.ref} --bam {input.bam} --max-depth {params.depth} --output {output} 2> {log}" From d0f293d2b8136fb0d8ef3753733ab1d30fb20d56 Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Thu, 21 Sep 2023 16:07:57 +0200 Subject: [PATCH 27/43] fix: switch from jupyter notebook to script (#598) * switch from jupyter notebook to script * change code format * fmt --- .../assembly-benchmark-results.py.ipynb | 201 ------------------ workflow/rules/benchmarking.smk | 4 +- .../scripts/assembly-benchmark-results.py | 167 +++++++++++++++ 3 files changed, 169 insertions(+), 203 deletions(-) delete mode 100644 workflow/notebooks/assembly-benchmark-results.py.ipynb create mode 100644 workflow/scripts/assembly-benchmark-results.py diff --git a/workflow/notebooks/assembly-benchmark-results.py.ipynb b/workflow/notebooks/assembly-benchmark-results.py.ipynb deleted file mode 100644 index 46e7dbc64..000000000 --- a/workflow/notebooks/assembly-benchmark-results.py.ipynb +++ /dev/null @@ -1,201 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "sys.stderr = open(snakemake.log[0], \"w\")\n", - "import pysam\n", - "\n", - "# see https://pysam.readthedocs.io/en/latest/api.html#pysam.AlignedSegment.cigartuples\n", - "BAM_CEQUAL = 7\n", - "BAM_CDIFF = 8\n", - "BAM_CSOFT_CLIP = 4\n", - "BAM_CHARD_CLIP = 5\n", - "BAM_CINS = 1\n", - "BAM_CDEL = 2\n", - "\n", - "N_WINDOW = 100\n", - "\n", - "\n", - "def is_uncertain_region(record, rpos, rend, ref_fasta):\n", - " refseq = ref_fasta.fetch(record.reference_name, rpos - N_WINDOW, rend + N_WINDOW)\n", - " return (\"N\" * 10) in refseq\n", - "\n", - "\n", - "def get_edit_dist(record, ref_fasta):\n", - " edit_dist = 0\n", - " qpos = 0\n", - " rpos = record.reference_start\n", - " for op, length in record.cigartuples:\n", - " if op == BAM_CEQUAL:\n", - " # no edit\n", - " qpos += length\n", - " rpos += length\n", - " else:\n", - " if op == BAM_CDIFF:\n", - " refseq = ref_fasta.fetch(record.reference_name, rpos, rpos + length)\n", - " if not is_uncertain_region(record, rpos, rpos + length, ref_fasta):\n", - " # Only consider edits where the reference has a true nucleotide\n", - " # because IUPAC codes lead to mason simulating an N in the reads.\n", - " edit_dist += sum(base in \"ACGT\" for base in refseq)\n", - " qpos += length\n", - " rpos += length\n", - "\n", - " elif op == BAM_CSOFT_CLIP:\n", - " edit_dist += length\n", - " qpos += length\n", - " elif op == BAM_CHARD_CLIP:\n", - " edit_dist += length\n", - " elif op == BAM_CINS:\n", - " refseq = ref_fasta.fetch(record.reference_name, rpos, rpos + length)\n", - " if not is_uncertain_region(record, rpos, rpos + length, ref_fasta):\n", - " # only count edit distance if the region behind the insert does not\n", - " # contain N stretches in the reference. Rationale: those regions are apparently\n", - " # hard to assemble, and we cannot properly simulate reads for them, so\n", - " # we should not count them in a benchmark.\n", - " edit_dist += length\n", - " qpos += length\n", - " elif op == BAM_CDEL:\n", - " refseq = ref_fasta.fetch(record.reference_name, rpos, rpos + length)\n", - " if not is_uncertain_region(record, rpos, rpos + length, ref_fasta):\n", - " # only count edit distance if the region behind the insert does not\n", - " # contain N stretches in the reference. Rationale: those regions are apparently\n", - " # hard to assemble, and we cannot properly simulate reads for them, so\n", - " # we should not count them in a benchmark.\n", - " edit_dist += length\n", - " rpos += length\n", - " else:\n", - " raise ValueError(f\"Unsupported CIGAR operation: {op}\")\n", - " return edit_dist\n", - "\n", - "\n", - "with open(snakemake.output[0], \"w\") as out:\n", - " print(\n", - " \"Accession\",\n", - " \"Contigs\",\n", - " \"Total contigs\",\n", - " \"Contig length\",\n", - " \"Reference length\",\n", - " \"Contig frac\",\n", - " \"Cum frac\",\n", - " \"Relevant edit dist\",\n", - " \"Cigar string\",\n", - " \"Edit frac\",\n", - " sep=\"\\t\",\n", - " file=out,\n", - " )\n", - " sum_of_edit_dist = 0\n", - " largest_no_contig = 0\n", - " small_larg_cover = 1.0\n", - " small_larg_cover_name = \"asd\"\n", - " smallest_cum_frac = 1.0\n", - "\n", - " # for bam_file in snakemake_input:\n", - " for bam_file, ref_fasta in zip(snakemake.input.bams, snakemake.input.refs):\n", - " current_contig = 1\n", - "\n", - " ref_fasta = pysam.FastaFile(ref_fasta)\n", - "\n", - " with pysam.AlignmentFile(bam_file, \"rb\") as samfile:\n", - " total_contigs = samfile.count()\n", - " accession = samfile.get_reference_name(0)\n", - "\n", - " largest_no_contig = (\n", - " total_contigs\n", - " if total_contigs > largest_no_contig\n", - " else largest_no_contig\n", - " )\n", - "\n", - " with pysam.AlignmentFile(bam_file, \"rb\") as samfile:\n", - " ref_lengths = samfile.lengths[0]\n", - " largest_coverage = 0\n", - " cum_frac = 0\n", - " for read in samfile.fetch():\n", - " query_alignment_length = read.query_alignment_length\n", - " frac = round(query_alignment_length / ref_lengths, 2)\n", - "\n", - " # Calculate edit distance from CIGAR string, because NM tag counts matching Ns as edits.\n", - " edit = get_edit_dist(read, ref_fasta)\n", - "\n", - " cum_frac += frac\n", - " cum_frac = round(cum_frac, 2)\n", - " sum_of_edit_dist = sum_of_edit_dist + edit\n", - " edit_frac = round(edit / query_alignment_length, 5)\n", - " largest_coverage = frac if frac > largest_coverage else largest_coverage\n", - "\n", - " print(\n", - " accession,\n", - " current_contig,\n", - " total_contigs,\n", - " query_alignment_length,\n", - " ref_lengths,\n", - " frac,\n", - " cum_frac,\n", - " edit,\n", - " read.cigarstring,\n", - " edit_frac,\n", - " sep=\"\\t\",\n", - " file=out,\n", - " )\n", - "\n", - " current_contig += 1\n", - " smallest_cum_frac = (\n", - " cum_frac if smallest_cum_frac > cum_frac else smallest_cum_frac\n", - " )\n", - " small_larg_cover = (\n", - " largest_coverage\n", - " if small_larg_cover > largest_coverage\n", - " else small_larg_cover\n", - " )\n", - " small_larg_cover_name = (\n", - " accession\n", - " if small_larg_cover >= largest_coverage\n", - " else small_larg_cover_name\n", - " )\n", - "\n", - " print(\"Largest number of contigs\")\n", - " print(largest_no_contig)\n", - " print(\"Smallest largest coverage in \" + str(small_larg_cover_name))\n", - " print(small_larg_cover)\n", - " print(\"Sum of edit distances\")\n", - " print(sum_of_edit_dist)\n", - " print(\"Smallest cum. fraction of contigs\")\n", - " print(smallest_cum_frac)\n", - " print(\"Largest number of contigs\", file=out)\n", - " print(largest_no_contig, file=out)\n", - " print(\"Smallest largest coverage in \" + str(small_larg_cover_name), file=out)\n", - " print(small_larg_cover, file=out)\n", - " print(\"Sum of edit distances\", file=out)\n", - " print(sum_of_edit_dist, file=out)\n", - " print(\"Smallest cum. fraction of contigs\", file=out)\n", - " print(smallest_cum_frac, file=out)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/workflow/rules/benchmarking.smk b/workflow/rules/benchmarking.smk index c5683ecf1..6f455f0ce 100644 --- a/workflow/rules/benchmarking.smk +++ b/workflow/rules/benchmarking.smk @@ -130,8 +130,8 @@ rule summarize_assembly_results: notebooks=1, conda: "../envs/pysam.yaml" - notebook: - "../notebooks/assembly-benchmark-results.py.ipynb" + script: + "../scripts/assembly-benchmark-results.py" rule test_non_cov2: diff --git a/workflow/scripts/assembly-benchmark-results.py b/workflow/scripts/assembly-benchmark-results.py new file mode 100644 index 000000000..aca8c4c7e --- /dev/null +++ b/workflow/scripts/assembly-benchmark-results.py @@ -0,0 +1,167 @@ +# %% +sys.stderr = open(snakemake.log[0], "w") +import pysam + +# see https://pysam.readthedocs.io/en/latest/api.html#pysam.AlignedSegment.cigartuples +BAM_CEQUAL = 7 +BAM_CDIFF = 8 +BAM_CSOFT_CLIP = 4 +BAM_CHARD_CLIP = 5 +BAM_CINS = 1 +BAM_CDEL = 2 + +N_WINDOW = 100 + + +def is_uncertain_region(record, rpos, rend, ref_fasta): + refseq = ref_fasta.fetch(record.reference_name, rpos - N_WINDOW, rend + N_WINDOW) + return ("N" * 10) in refseq + + +def get_edit_dist(record, ref_fasta): + edit_dist = 0 + qpos = 0 + rpos = record.reference_start + for op, length in record.cigartuples: + if op == BAM_CEQUAL: + # no edit + qpos += length + rpos += length + else: + if op == BAM_CDIFF: + refseq = ref_fasta.fetch(record.reference_name, rpos, rpos + length) + if not is_uncertain_region(record, rpos, rpos + length, ref_fasta): + # Only consider edits where the reference has a true nucleotide + # because IUPAC codes lead to mason simulating an N in the reads. + edit_dist += sum(base in "ACGT" for base in refseq) + qpos += length + rpos += length + + elif op == BAM_CSOFT_CLIP: + edit_dist += length + qpos += length + elif op == BAM_CHARD_CLIP: + edit_dist += length + elif op == BAM_CINS: + refseq = ref_fasta.fetch(record.reference_name, rpos, rpos + length) + if not is_uncertain_region(record, rpos, rpos + length, ref_fasta): + # only count edit distance if the region behind the insert does not + # contain N stretches in the reference. Rationale: those regions are apparently + # hard to assemble, and we cannot properly simulate reads for them, so + # we should not count them in a benchmark. + edit_dist += length + qpos += length + elif op == BAM_CDEL: + refseq = ref_fasta.fetch(record.reference_name, rpos, rpos + length) + if not is_uncertain_region(record, rpos, rpos + length, ref_fasta): + # only count edit distance if the region behind the insert does not + # contain N stretches in the reference. Rationale: those regions are apparently + # hard to assemble, and we cannot properly simulate reads for them, so + # we should not count them in a benchmark. + edit_dist += length + rpos += length + else: + raise ValueError(f"Unsupported CIGAR operation: {op}") + return edit_dist + + +with open(snakemake.output[0], "w") as out: + print( + "Accession", + "Contigs", + "Total contigs", + "Contig length", + "Reference length", + "Contig frac", + "Cum frac", + "Relevant edit dist", + "Cigar string", + "Edit frac", + sep="\t", + file=out, + ) + sum_of_edit_dist = 0 + largest_no_contig = 0 + small_larg_cover = 1.0 + small_larg_cover_name = "asd" + smallest_cum_frac = 1.0 + + # for bam_file in snakemake_input: + for bam_file, ref_fasta in zip(snakemake.input.bams, snakemake.input.refs): + current_contig = 1 + + ref_fasta = pysam.FastaFile(ref_fasta) + + with pysam.AlignmentFile(bam_file, "rb") as samfile: + total_contigs = samfile.count() + accession = samfile.get_reference_name(0) + + largest_no_contig = ( + total_contigs + if total_contigs > largest_no_contig + else largest_no_contig + ) + + with pysam.AlignmentFile(bam_file, "rb") as samfile: + ref_lengths = samfile.lengths[0] + largest_coverage = 0 + cum_frac = 0 + for read in samfile.fetch(): + query_alignment_length = read.query_alignment_length + frac = round(query_alignment_length / ref_lengths, 2) + + # Calculate edit distance from CIGAR string, because NM tag counts matching Ns as edits. + edit = get_edit_dist(read, ref_fasta) + + cum_frac += frac + cum_frac = round(cum_frac, 2) + sum_of_edit_dist = sum_of_edit_dist + edit + edit_frac = round(edit / query_alignment_length, 5) + largest_coverage = frac if frac > largest_coverage else largest_coverage + + print( + accession, + current_contig, + total_contigs, + query_alignment_length, + ref_lengths, + frac, + cum_frac, + edit, + read.cigarstring, + edit_frac, + sep="\t", + file=out, + ) + + current_contig += 1 + smallest_cum_frac = ( + cum_frac if smallest_cum_frac > cum_frac else smallest_cum_frac + ) + small_larg_cover = ( + largest_coverage + if small_larg_cover > largest_coverage + else small_larg_cover + ) + small_larg_cover_name = ( + accession + if small_larg_cover >= largest_coverage + else small_larg_cover_name + ) + + print("Largest number of contigs") + print(largest_no_contig) + print("Smallest largest coverage in " + str(small_larg_cover_name)) + print(small_larg_cover) + print("Sum of edit distances") + print(sum_of_edit_dist) + print("Smallest cum. fraction of contigs") + print(smallest_cum_frac) + print("Largest number of contigs", file=out) + print(largest_no_contig, file=out) + print("Smallest largest coverage in " + str(small_larg_cover_name), file=out) + print(small_larg_cover, file=out) + print("Sum of edit distances", file=out) + print(sum_of_edit_dist, file=out) + print("Smallest cum. fraction of contigs", file=out) + print(smallest_cum_frac, file=out) From 182121ba0ae7b5121a8719a008806bc156cfb066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:55:21 +0200 Subject: [PATCH 28/43] chore(deps): bump github/super-linter from 4.10.1 to 5.0.0 (#593) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github/super-linter](https://github.com/github/super-linter) from 4.10.1 to 5.0.0. - [Release notes](https://github.com/github/super-linter/releases) - [Changelog](https://github.com/github/super-linter/blob/main/docs/release-process.md) - [Commits](https://github.com/github/super-linter/compare/v4.10.1...v5.0.0) --- updated-dependencies: - dependency-name: github/super-linter dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Johannes Köster --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 57eb14142..e7c077081 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Formatting - uses: github/super-linter@v4.10.1 + uses: github/super-linter@v5.0.0 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master From 6bd84342cce0727d1af8dd35f92f967bd43eb2e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 16:58:25 +0200 Subject: [PATCH 29/43] chore(deps): bump docker/setup-buildx-action from 2 to 3 (#605) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index acb36005b..2c4b823dc 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -128,7 +128,7 @@ jobs: - name: Set up Docker Buildx if: ${{ steps.release.outputs.release_created == 'true' }} - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Quay Registry if: ${{ steps.release.outputs.release_created == 'true' }} From 0070d8927290dd01f418b876b60f3405158f1ab9 Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Tue, 31 Oct 2023 14:33:10 +0100 Subject: [PATCH 30/43] fix: update multiqc (#607) * update multiqc * change action with pinned python version * re-implement ont testing * update multiqc * leave old fastqc version * input only one fastq file * update fastqc and add resources * add new input rule for only one fastq file * fmt * fmt * fmt * update multiqc * exclude kraken input * iclude TODO for kraken in multiqc --- .github/workflows/main.yml | 23 +++++++++++++---------- workflow/rules/common.smk | 9 ++++----- workflow/rules/qc.smk | 19 ++++++++++++------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e7c077081..1dd78e03f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -71,11 +71,14 @@ jobs: matrix: rule: [all, all -npr] # disable ont actions - # technology: [all, illumina, ont, ion] - technology: [all, illumina, ion] + technology: [all, illumina, ont, ion] + # technology: [all, illumina, ion] seq_method: [shotgun, amplicon] steps: - uses: actions/checkout@v2 + - uses: actions/setup-python@v4 + with: + python-version: '3.11' # android - will release about 10 GB if you don't need Android # dotnet - will release about 20 GB if you don't need .NET @@ -103,14 +106,14 @@ jobs: curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/B.1.1.7.reads.1.fastq.gz > .tests/data/B117.2.fastq.gz echo sample_name,fq1,fq2,date,is_amplicon_data,technology > .tests/config/pep/samples.csv echo illumina-test,data/B117.1.fastq.gz,data/B117.2.fastq.gz,2022-01-01,$AMPLICON,illumina >> .tests/config/pep/samples.csv - # - name: Prepare test data for Oxford Nanopore - # if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'ont' || matrix.rule == 'compare_assemblers') - # run: | - # if [[ "${{ matrix.seq_method }}" = "shotgun" ]] ; then export AMPLICON=0; else export AMPLICON=1; fi - # mkdir -p .tests/data - # curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/ont_reads.fastq.gz > .tests/data/ont_reads.fastq.gz - # echo sample_name,fq1,date,is_amplicon_data,technology > .tests/config/pep/samples.csv - # echo ont-test,data/ont_reads.fastq.gz,2022-01-01,$AMPLICON,ont >> .tests/config/pep/samples.csv + - name: Prepare test data for Oxford Nanopore + if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'ont' || matrix.rule == 'compare_assemblers') + run: | + if [[ "${{ matrix.seq_method }}" = "shotgun" ]] ; then export AMPLICON=0; else export AMPLICON=1; fi + mkdir -p .tests/data + curl -L https://github.com/thomasbtf/small-kraken-db/raw/master/ont_reads.fastq.gz > .tests/data/ont_reads.fastq.gz + echo sample_name,fq1,date,is_amplicon_data,technology > .tests/config/pep/samples.csv + echo ont-test,data/ont_reads.fastq.gz,2022-01-01,$AMPLICON,ont >> .tests/config/pep/samples.csv - name: Prepare test data for Ion Torrent if: steps.test-data.outputs.cache-hit != true && (startsWith(matrix.rule, 'all') && matrix.technology == 'ion' || matrix.rule == 'compare_assemblers') run: | diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index d712652ad..a372380eb 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -71,7 +71,6 @@ def get_samples_for_date(date, filtered=False): # filter if filtered: with checkpoints.quality_filter.get(date=date).output.passed_filter.open() as f: - passend_samples = [] for line in f: passend_samples.append(line.strip()) @@ -212,6 +211,10 @@ def get_fastqs(wildcards): return pep.sample_table.loc[wildcards.sample][["fq1"]] +def get_fastqc_input(wildcards): + return pep.sample_table.loc[wildcards.sample][["fq1"]] + + def get_resource(name): return workflow.source_path(f"../../resources/{name}") @@ -406,7 +409,6 @@ def get_reads(wildcards): or wildcards.reference.startswith("polished-") or wildcards.reference.startswith("consensus-") ): - illumina_pattern = expand( "results/{date}/trimmed/fastp-pe/{sample}.{read}.fastq.gz", read=[1, 2], @@ -683,7 +685,6 @@ def generate_mixtures(wildcards): mixture_list = [] for mix in range(no_mixtures): - fractions = [random.randint(1, 100) for _ in range(no_strains)] s = sum(fractions) fractions = [round(i / s * 100) for i in fractions] @@ -964,7 +965,6 @@ def get_assemblies_for_submission(wildcards, agg_type): return "results/{date}/contigs/pseudoassembled/{sample}.fasta" if wildcards.date != BENCHMARK_DATE_WILDCARD: - all_samples_for_date = get_samples_for_date(wildcards.date) masked_samples = load_filtered_samples(wildcards, "masked-assembly") @@ -1558,7 +1558,6 @@ def get_aggregated_pangolin_calls(wildcards, return_list="paths"): expanded_patterns = [] for sample in samples: - stage_wildcards = get_pattern_by_technology( wildcards, sample=sample, diff --git a/workflow/rules/qc.smk b/workflow/rules/qc.smk index d45cd0a38b..9d80ed7cb 100644 --- a/workflow/rules/qc.smk +++ b/workflow/rules/qc.smk @@ -6,14 +6,17 @@ rule fastqc: input: - get_fastqs, + get_fastqc_input, output: html="results/{date}/qc/fastqc/{sample}.html", zip="results/{date}/qc/fastqc/{sample}_fastqc.zip", log: "logs/{date}/fastqc/{sample}.log", + threads: 1 + resources: + mem_mb=1024, wrapper: - "v1.12.2/bio/fastqc" + "v2.6.0/bio/fastqc" # TODO Change multiqc rules back to MultiQC wrapper once v1.11 is released @@ -33,8 +36,9 @@ rule multiqc: ), expand_samples_for_date("logs/{{date}}/kallisto_quant/{sample}.log"), get_fastp_results, - get_kraken_output, - get_kraken_output_after_filtering, + # TODO re-implement kraken output + # get_kraken_output, + # get_kraken_output_after_filtering, output: "results/{date}/qc/multiqc.html", params: @@ -44,7 +48,7 @@ rule multiqc: log: "logs/{date}/multiqc.log", wrapper: - "v1.15.1/bio/multiqc" + "v2.8.0/bio/multiqc" rule multiqc_lab: @@ -56,7 +60,8 @@ rule multiqc_lab: ] ), get_fastp_results, - get_kraken_output, + # TODO re-implement kraken output + # get_kraken_output, output: report( "results/{date}/qc/laboratory/multiqc.html", @@ -70,7 +75,7 @@ rule multiqc_lab: log: "logs/{date}/multiqc.log", wrapper: - "v1.15.1/bio/multiqc" + "v2.8.0/bio/multiqc" rule samtools_flagstat: From 7106afa390bdfdde8048d28ade9cff80b1187640 Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Mon, 6 Nov 2023 09:56:04 +0100 Subject: [PATCH 31/43] update pangolin to version 4.3 (#610) --- workflow/envs/pangolin.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflow/envs/pangolin.yaml b/workflow/envs/pangolin.yaml index 93a50ace5..f6a26ad42 100644 --- a/workflow/envs/pangolin.yaml +++ b/workflow/envs/pangolin.yaml @@ -3,5 +3,4 @@ channels: - bioconda - nodefaults dependencies: - - pangolin =4.1.3 - - tabulate <0.9 # TODO remove once pangolin 4.1.3 is available in bioconda + - pangolin =4.3 From 34701af485aa1ec199a418ec1487a97677f624ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Mon, 13 Nov 2023 13:03:17 +0100 Subject: [PATCH 32/43] perf: update to varlociraptor 8.4 (#596) * Update to latest varlociraptor * Update varlociraptor.yaml * Update config.yaml * trigger rerun --------- Co-authored-by: Alexander Thomas <77535027+alethomas@users.noreply.github.com> --- config/config.yaml | 6 +++--- workflow/envs/varlociraptor.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index afea4a946..898b305ac 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -72,12 +72,12 @@ assembly: # assemblers used for shotgun sequencing with on Illumina technology shotgun: "megahit-std" # assemblers used for amplicon sequencing with on Illumina technology - amplicon: "metaspades" + amplicon: "megahit-std" oxford nanopore: # assemblers used for shotgun sequencing with on Oxford Nanopore technology shotgun: "megahit-std" # assemblers used for amplicon sequencing with on Oxford Nanopore technology - amplicon: "spades" + amplicon: "megahit-std" # Medaka models are named to indicate i) the pore type, ii) the sequencing device (MinION or PromethION), iii) the basecaller variant, and iv) the basecaller version # with the format: {pore}_{device}_{caller variant}_{caller version} # See https://github.com/nanoporetech/medaka#models for more information. @@ -86,7 +86,7 @@ assembly: # assemblers used for shotgun sequencing with on Ion Torrent technology shotgun: "megahit-std" # assemblers used for amplicon sequencing with on Torrent technology - amplicon: "spades" + amplicon: "megahit-std" # minimum posterior probability for a clonal variant to be included in the generated pseudo-assembly min-variant-prob: 0.95 diff --git a/workflow/envs/varlociraptor.yaml b/workflow/envs/varlociraptor.yaml index 151fb2668..8501cab77 100644 --- a/workflow/envs/varlociraptor.yaml +++ b/workflow/envs/varlociraptor.yaml @@ -3,4 +3,4 @@ channels: - bioconda - nodefaults dependencies: - - varlociraptor =6.0 + - varlociraptor =8.4 From 33ac5f7b4f7af8bbb500e9f531ccbdc45ac9427f Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:53:40 +0100 Subject: [PATCH 33/43] feat: Update README.md for dark/light theme (#614) * Update README.md for dark/light theme * Update README.md * Update README.md * Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0cbd7b4f2..85ddca2b2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # UnCoVar -![UnCoVar2](https://user-images.githubusercontent.com/77535027/133610563-d190e25c-504e-4953-92dd-f84a5b4a1191.png) + + + + + UnCoVar Logo dark/light + + ## SARS-CoV-2 Variant Calling and Lineage Assignment From 2bb74bfc26dee80af7d04089aafe636ea7c6d76a Mon Sep 17 00:00:00 2001 From: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:43:15 +0100 Subject: [PATCH 34/43] fix: QA genome generation (#613) * fix deprecated squeeze * fix wrong seq name * fmt * remove not needed file handling --- workflow/scripts/masking.py | 8 ++------ workflow/scripts/quality-filter.py | 8 +++----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/workflow/scripts/masking.py b/workflow/scripts/masking.py index 95fdb9d75..e02d46009 100644 --- a/workflow/scripts/masking.py +++ b/workflow/scripts/masking.py @@ -48,7 +48,6 @@ def get_base_count(pileupcolumn): for pileupread in pileupcolumn.pileups: # TODO Check pileupread for missing bases if not pileupread.is_del and not pileupread.is_refskip: - read_base = pileupread.alignment.query_sequence[pileupread.query_position] bases.append(read_base) @@ -102,7 +101,6 @@ def mask_sequence(sequence, coverages, base_counts): covered_postions = coverages.keys() for position, base in enumerate(sequence): - if position not in covered_postions: # TODO Check why there are postions that are not covered by any reads and are not Ns # sequence[position] = "N" @@ -160,10 +158,8 @@ def mask_sequence(sequence, coverages, base_counts): def write_sequence(sequence): - with pysam.FastxFile(snakemake.input.sequence) as infile, open( - snakemake.output.masked_sequence, mode="w" - ) as outfile: - print(">%s" % next(infile).name.split(".")[0], file=outfile) + with open(snakemake.output.masked_sequence, mode="w") as outfile: + print(">%s" % snakemake.wildcards.sample, file=outfile) print(sequence, file=outfile) diff --git a/workflow/scripts/quality-filter.py b/workflow/scripts/quality-filter.py index 7cc41b50c..68977de25 100644 --- a/workflow/scripts/quality-filter.py +++ b/workflow/scripts/quality-filter.py @@ -31,13 +31,11 @@ def get_identity(quast_report_paths: List[str]) -> dict: sample = path.dirname(report_path).split("/")[-1] # load report - report_df = pd.read_csv( - report_path, delimiter="\t", index_col=0, squeeze=True, names=["value"] - ) - + report_df = pd.read_csv(report_path, delimiter="\t", names=["name", "value"]) + report_df.set_index("name", inplace=True) # select genome fraction (%) try: - fraction = float(report_df.at["Genome fraction (%)"]) / 100 + fraction = float(report_df.at["Genome fraction (%)", "value"]) / 100 except: # no "Genome fraction (%)" in quast report. Case for not assemblable samples fraction = 0.0 From 7f6146e925913480d26b600abd8815ae83127fad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Nov 2023 14:36:28 +0100 Subject: [PATCH 35/43] chore(deps): bump actions/checkout from 2 to 4 (#602) Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/copyright-preamble.yml | 2 +- .github/workflows/documentation.yml | 2 +- .github/workflows/main.yml | 10 +++++----- .github/workflows/release-please.yml | 4 ++-- .github/workflows/update-pangolin.yaml | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/copyright-preamble.yml b/.github/workflows/copyright-preamble.yml index 50aa610ff..4005485fe 100644 --- a/.github/workflows/copyright-preamble.yml +++ b/.github/workflows/copyright-preamble.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: # Checking out the repository which is to be actioned - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 # Implementing action on repository - uses: VinnyBabuManjaly/copyright-action@v1.0.0 with: diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 226a47ce4..2db38f85c 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -18,7 +18,7 @@ jobs: deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: SetUp Python uses: actions/setup-python@v4 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1dd78e03f..728c2546a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: Formatting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Formatting uses: github/super-linter@v5.0.0 env: @@ -39,7 +39,7 @@ jobs: env: GISAID_API_TOKEN: ${{ secrets.GISAID_API_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Lint workflow uses: snakemake/snakemake-github-action@v1.24.0 with: @@ -55,7 +55,7 @@ jobs: # runs-on: ubuntu-latest # if: github.ref != 'refs/heads/master' # steps: - # - uses: actions/checkout@v2 + # - uses: actions/checkout@v4 # - uses: actions/setup-python@v4 # - uses: pre-commit/action@v3.0.0 @@ -75,7 +75,7 @@ jobs: # technology: [all, illumina, ion] seq_method: [shotgun, amplicon] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: '3.11' @@ -192,7 +192,7 @@ jobs: ] # generate_test_cases, steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 # - name: Cache conda dependencies # uses: actions/cache@v2 diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 2c4b823dc..0f2ca6599 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -68,14 +68,14 @@ jobs: remove-android: "true" - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Space run: | echo "Free space:" df -h - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Checkout release PR locally if: ${{ steps.pr_created.outputs.pr == 'true' && steps.release.outputs.release_created != 'true' }} diff --git a/.github/workflows/update-pangolin.yaml b/.github/workflows/update-pangolin.yaml index 99a9e4b53..736c8fd18 100644 --- a/.github/workflows/update-pangolin.yaml +++ b/.github/workflows/update-pangolin.yaml @@ -9,7 +9,7 @@ jobs: Create-PR-for-new-Pangolin-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install mamba uses: conda-incubator/setup-miniconda@v2 From b986b20b226a0bae74cec0cbe815892b20debe5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Nov 2023 17:09:14 +0100 Subject: [PATCH 36/43] chore(deps): bump khan/pull-request-workflow-cancel from 1.0.0 to 1.0.1 (#580) Bumps [khan/pull-request-workflow-cancel](https://github.com/khan/pull-request-workflow-cancel) from 1.0.0 to 1.0.1. - [Release notes](https://github.com/khan/pull-request-workflow-cancel/releases) - [Commits](https://github.com/khan/pull-request-workflow-cancel/compare/1.0.0...1.0.1) --- updated-dependencies: - dependency-name: khan/pull-request-workflow-cancel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 728c2546a..ea3320a80 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest if: github.ref != 'refs/heads/master' steps: - - uses: khan/pull-request-workflow-cancel@1.0.0 + - uses: khan/pull-request-workflow-cancel@1.0.1 with: workflows: "main.yml" env: From ed041c832987f014e267a85686465b1ac469fa11 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 10:13:44 +0100 Subject: [PATCH 37/43] chore(master): release 0.16.0 (#586) * chore(master): release 0.16.0 * Changed containerized tag to 0.16.0 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- CHANGELOG.md | 23 +++++++++++++++++++++++ version.txt | 2 +- workflow/Snakefile | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac27577da..5f16dd03d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [0.16.0](https://github.com/IKIM-Essen/uncovar/compare/v0.15.1...v0.16.0) (2023-11-16) + + +### Features + +* Update README.md for dark/light theme ([#614](https://github.com/IKIM-Essen/uncovar/issues/614)) ([33ac5f7](https://github.com/IKIM-Essen/uncovar/commit/33ac5f7b4f7af8bbb500e9f531ccbdc45ac9427f)) + + +### Bug Fixes + +* changes in path requirements for snakedeploy ([#590](https://github.com/IKIM-Essen/uncovar/issues/590)) ([406d456](https://github.com/IKIM-Essen/uncovar/commit/406d456edd15715f7e14338b8195d2a09a807e49)) +* improved clonality event definition, usage of major subclone for assembly polishing; upgrade to varlociraptor 6.0 ([#585](https://github.com/IKIM-Essen/uncovar/issues/585)) ([aced95e](https://github.com/IKIM-Essen/uncovar/commit/aced95e798fd0483e99120550f49614e680f56dd)) +* QA genome generation ([#613](https://github.com/IKIM-Essen/uncovar/issues/613)) ([2bb74bf](https://github.com/IKIM-Essen/uncovar/commit/2bb74bfc26dee80af7d04089aafe636ea7c6d76a)) +* switch from jupyter notebook to script ([#598](https://github.com/IKIM-Essen/uncovar/issues/598)) ([d0f293d](https://github.com/IKIM-Essen/uncovar/commit/d0f293d2b8136fb0d8ef3753733ab1d30fb20d56)) +* update multiqc ([#607](https://github.com/IKIM-Essen/uncovar/issues/607)) ([0070d89](https://github.com/IKIM-Essen/uncovar/commit/0070d8927290dd01f418b876b60f3405158f1ab9)) +* use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads ([505a271](https://github.com/IKIM-Essen/uncovar/commit/505a2714ba0e5642312051f5e5154f7d454ff57f)) +* use homopolymer-pair-HMM-mode of Varlociraptor in case of nanopore reads ([#587](https://github.com/IKIM-Essen/uncovar/issues/587)) ([9bc814f](https://github.com/IKIM-Essen/uncovar/commit/9bc814f7cb9e9d9e53d557d463e782801070b46e)) + + +### Performance Improvements + +* update to varlociraptor 8.4 ([#596](https://github.com/IKIM-Essen/uncovar/issues/596)) ([34701af](https://github.com/IKIM-Essen/uncovar/commit/34701af485aa1ec199a418ec1487a97677f624ca)) + ## [0.15.1](https://github.com/IKIM-Essen/uncovar/compare/v0.15.0...v0.15.1) (2022-11-30) diff --git a/version.txt b/version.txt index e815b861f..04a373efe 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.15.1 +0.16.0 diff --git a/workflow/Snakefile b/workflow/Snakefile index d8f339ce5..cd146b369 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -21,7 +21,7 @@ report: "report/workflow.rst" container: "docker://condaforge/mambaforge" -containerized: "quay.io/uncovar/uncovar#0.15.1" +containerized: "quay.io/uncovar/uncovar#0.16.0" include: "rules/common.smk" From d87c9ad42cd295f429b5e5f8d17fba1ad7d11e60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 14:17:16 +0100 Subject: [PATCH 38/43] chore(deps): bump peter-evans/create-pull-request from 4 to 5 (#592) Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4 to 5. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/v4...v5) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/copyright-preamble.yml | 2 +- .github/workflows/update-pangolin.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/copyright-preamble.yml b/.github/workflows/copyright-preamble.yml index 4005485fe..dae852eed 100644 --- a/.github/workflows/copyright-preamble.yml +++ b/.github/workflows/copyright-preamble.yml @@ -25,7 +25,7 @@ jobs: # Creates pull request with all changes in file - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v5 with: commit-message: "chore: update copyright preamble" delete-branch: true diff --git a/.github/workflows/update-pangolin.yaml b/.github/workflows/update-pangolin.yaml index 736c8fd18..bdb8d0557 100644 --- a/.github/workflows/update-pangolin.yaml +++ b/.github/workflows/update-pangolin.yaml @@ -37,7 +37,7 @@ jobs: - name: Create Pull Request if: ${{ env.LATEST_PANGOLIN != env.CURRENT_PANGOLIN }} id: cpr - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v5 with: token: ${{ secrets.GITHUB_TOKEN }} committer: GitHub From 4b2f34c54b522152f402112b7d82c42d6c95b95d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 16:07:09 +0100 Subject: [PATCH 39/43] chore(deps): bump docker/build-push-action from 3 to 5 (#599) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3 to 5. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v3...v5) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 0f2ca6599..ad185be43 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -140,7 +140,7 @@ jobs: - name: Build and push if: ${{ steps.release.outputs.release_created == 'true' }} - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . push: true From 99ad0e14c8ac6196dd18dbe4f16f1bc01b90b035 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 12:00:31 +0100 Subject: [PATCH 40/43] chore(deps): bump snakemake/snakemake-github-action (#600) Bumps [snakemake/snakemake-github-action](https://github.com/snakemake/snakemake-github-action) from 1.24.0 to 1.25.1. - [Release notes](https://github.com/snakemake/snakemake-github-action/releases) - [Changelog](https://github.com/snakemake/snakemake-github-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/snakemake/snakemake-github-action/compare/v1.24.0...v1.25.1) --- updated-dependencies: - dependency-name: snakemake/snakemake-github-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/main.yml | 10 +++++----- .github/workflows/release-please.yml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ea3320a80..828c4acb9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,7 +41,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Lint workflow - uses: snakemake/snakemake-github-action@v1.24.0 + uses: snakemake/snakemake-github-action@v1.25.1 with: directory: . snakefile: workflow/Snakefile @@ -137,14 +137,14 @@ jobs: curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=MZ314997.1&rettype=fasta" | sed '$ d' > .tests/resources/genomes/B.1.1.7.fasta curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=MZ314998.1&rettype=fasta" | sed '$ d' > .tests/resources/genomes/B.1.351.fasta - name: Test rule ${{ matrix.rule }} on ${{ matrix.technology }} ${{ matrix.seq_method }} data - uses: snakemake/snakemake-github-action@v1.24.0 + uses: snakemake/snakemake-github-action@v1.25.1 with: directory: .tests snakefile: workflow/Snakefile args: "-pr --use-conda --show-failed-logs --cores 2 --resources ncbi_api_requests=1 --conda-cleanup-pkgs cache --conda-frontend mamba ${{ matrix.rule }}" - name: Test report - uses: snakemake/snakemake-github-action@v1.24.0 + uses: snakemake/snakemake-github-action@v1.25.1 if: startsWith(matrix.rule, 'all -npr') != true with: directory: .tests @@ -315,14 +315,14 @@ jobs: curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=MZ314997.1&rettype=fasta" | sed '$ d' > .tests/resources/genomes/B.1.1.7.fasta curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=MZ314998.1&rettype=fasta" | sed '$ d' > .tests/resources/genomes/B.1.351.fasta - name: Test rule ${{ matrix.rule }} - uses: snakemake/snakemake-github-action@v1.24.0 + uses: snakemake/snakemake-github-action@v1.25.1 with: directory: .tests snakefile: workflow/Snakefile args: "-pr --use-conda --show-failed-logs --cores 2 --resources ncbi_api_requests=1 --conda-cleanup-pkgs cache --conda-frontend mamba ${{ matrix.rule }}" - name: Test report - uses: snakemake/snakemake-github-action@v1.24.0 + uses: snakemake/snakemake-github-action@v1.25.1 if: startsWith(matrix.rule, 'all -npr') != true with: directory: .tests diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index ad185be43..a944169b2 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -111,7 +111,7 @@ jobs: - name: Create Dockerfile if: ${{ steps.release.outputs.release_created == 'true' }} - uses: snakemake/snakemake-github-action@v1.24.0 + uses: snakemake/snakemake-github-action@v1.25.1 with: directory: . snakefile: workflow/Snakefile From 521df0ce4a667d16800f3509b796c9f7ce0564b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 15:08:09 +0100 Subject: [PATCH 41/43] chore(deps): bump docker/login-action from 2 to 3 (#601) Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index a944169b2..9c0f9cb25 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -132,7 +132,7 @@ jobs: - name: Login to Quay Registry if: ${{ steps.release.outputs.release_created == 'true' }} - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: quay.io username: uncovar+robot From c44761161720004ad505eb1bbfafd76881d77ffe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 16:51:57 +0100 Subject: [PATCH 42/43] chore(deps): bump alstr/todo-to-issue-action from 4.6 to 4.11 (#603) Bumps [alstr/todo-to-issue-action](https://github.com/alstr/todo-to-issue-action) from 4.6 to 4.11. - [Release notes](https://github.com/alstr/todo-to-issue-action/releases) - [Commits](https://github.com/alstr/todo-to-issue-action/compare/v4.6...v4.11) --- updated-dependencies: - dependency-name: alstr/todo-to-issue-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alexander Thomas <77535027+alethomas@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/check-todos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-todos.yml b/.github/workflows/check-todos.yml index 6e5247d5c..ef1b16de0 100644 --- a/.github/workflows/check-todos.yml +++ b/.github/workflows/check-todos.yml @@ -11,4 +11,4 @@ jobs: steps: - uses: "actions/checkout@master" - name: "TODO to Issue" - uses: "alstr/todo-to-issue-action@v4.6" + uses: "alstr/todo-to-issue-action@v4.11" From b232c0043134cc15f7d0bbedcd02275d16ef38d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 18:36:45 +0100 Subject: [PATCH 43/43] chore(deps): bump docker/setup-qemu-action from 2 to 3 (#604) Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: vBassewitz <104062464+vBassewitz@users.noreply.github.com> --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 9c0f9cb25..1e69799d6 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -124,7 +124,7 @@ jobs: - name: Set up QEMU if: ${{ steps.release.outputs.release_created == 'true' }} - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx if: ${{ steps.release.outputs.release_created == 'true' }}