From 114308419617c38654599d062d4befa2780f8840 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Thu, 8 Jun 2023 13:09:46 +0100 Subject: [PATCH 01/14] fix: Parsing of container directive Changes: - Strip additional components off container directive prior to parsing - Helps parse additional strings that may be present at the front of container directive (e.g. 'container '). - Should catch more non-standard container directives (of which there are many). --- CHANGELOG.md | 1 + nf_core/modules/lint/main_nf.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2deeef5f66..d99229df93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Remove `aws_tower` profile ([#2287])(https://github.com/nf-core/tools/pull/2287) - Fixed the Slack report to include the pipeline name ([#2291](https://github.com/nf-core/tools/pull/2291)) - Fix link in the MultiQC report to point to exact version of output docs ([#2298](https://github.com/nf-core/tools/pull/2298)) +- Fix parsing of container directive when it is not typical nf-core format. ### Download diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index 31b8adca3a..cfbc2c4ad1 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -240,7 +240,7 @@ def check_process_section(self, lines, fix_version, progress_bar): # Deprecated enable_conda for i, l in enumerate(lines): url = None - l = l.strip(" '\"") + l = l.strip().removeprefix("container ").strip(" \n'\"") if _container_type(l) == "conda": bioconda_packages = [b for b in l.split() if "bioconda::" in b] match = re.search(r"params\.enable_conda", l) @@ -263,7 +263,7 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "singularity": # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' :" -> v1.2.0_cv1 # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :" -> 0.11.9--0 - match = re.search(r"(?:/)?(?:biocontainers_)?(?::)?([A-Za-z\d\-_.]+?)(?:\.img)?'", l) + match = re.search(r"(?:/)?(?:biocontainers_)?(?::)?([A-Za-z\d\-_.]+?)(?:\.img)?", l) if match is not None: singularity_tag = match.group(1) self.passed.append(("singularity_tag", f"Found singularity tag: {singularity_tag}", self.main_nf)) @@ -275,13 +275,13 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "docker": # e.g. "quay.io/biocontainers/krona:2.7.1--pl526_5' }" -> 2.7.1--pl526_5 # e.g. "biocontainers/biocontainers:v1.2.0_cv1' }" -> v1.2.0_cv1 - match = re.search(r"(?:[/])?(?::)?([A-Za-z\d\-_.]+)'", l) + match = re.search(r"(?:[/])?(?::)?([A-Za-z\d\-_.]+)", l) if match is not None: docker_tag = match.group(1) self.passed.append(("docker_tag", f"Found docker tag: {docker_tag}", self.main_nf)) else: self.failed.append(("docker_tag", "Unable to parse docker tag", self.main_nf)) - docker_tag = NoneD + docker_tag = None if l.startswith("quay.io/"): l_stripped = re.sub(r"\W+$", "", l) self.failed.append( From da476f2c76e28371ebe54eb54068369963848f95 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Thu, 8 Jun 2023 13:16:11 +0100 Subject: [PATCH 02/14] CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d99229df93..d6599be574 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ - Remove `aws_tower` profile ([#2287])(https://github.com/nf-core/tools/pull/2287) - Fixed the Slack report to include the pipeline name ([#2291](https://github.com/nf-core/tools/pull/2291)) - Fix link in the MultiQC report to point to exact version of output docs ([#2298](https://github.com/nf-core/tools/pull/2298)) -- Fix parsing of container directive when it is not typical nf-core format. +- Fix parsing of container directive when it is not typical nf-core format ([#2306](https://github.com/nf-core/tools/pull/2306)) ### Download From c98848a8bb088e1d6c75759fe8444c165f118348 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Thu, 8 Jun 2023 13:59:10 +0100 Subject: [PATCH 03/14] Removed 'removeprefix' which is Py > 3.9 only --- nf_core/modules/lint/main_nf.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index cfbc2c4ad1..c6ea2ed6c3 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -240,7 +240,12 @@ def check_process_section(self, lines, fix_version, progress_bar): # Deprecated enable_conda for i, l in enumerate(lines): url = None - l = l.strip().removeprefix("container ").strip(" \n'\"") + l = l.strip(" \n'\"") + + # Catch preceeding "container " + if l.startswith("container"): + l = l.replace("container", "").strip(" \n'\"") + if _container_type(l) == "conda": bioconda_packages = [b for b in l.split() if "bioconda::" in b] match = re.search(r"params\.enable_conda", l) From 8fe15ea2301c9d391ffcfd46957b3abb392dfe5c Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Thu, 8 Jun 2023 16:52:52 +0100 Subject: [PATCH 04/14] Use specific Nextflow + nf-amazon version to get check if tests pass --- .github/workflows/create-test-wf.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/create-test-wf.yml b/.github/workflows/create-test-wf.yml index 8f3c5fdb47..d52fa22301 100644 --- a/.github/workflows/create-test-wf.yml +++ b/.github/workflows/create-test-wf.yml @@ -23,8 +23,7 @@ jobs: strategy: matrix: NXF_VER: - - "22.10.1" - - "latest-everything" + - "23.04.1" steps: - uses: actions/checkout@v3 name: Check out source-code repository @@ -47,7 +46,7 @@ jobs: - name: Run nf-core/tools run: | nf-core --log-file log.txt create -n testpipeline -d "This pipeline is for testing" -a "Testing McTestface" --plain - nextflow run nf-core-testpipeline -profile test,docker --outdir ./results + nextflow run nf-core-testpipeline -profile test,docker --outdir ./results -plugins nf-amazon@1.16.2 - name: Upload log file artifact if: ${{ always() }} From b4f86d5bd9c052b6edde8bd2f3604dcd1c95a9f0 Mon Sep 17 00:00:00 2001 From: Harshil Patel Date: Thu, 8 Jun 2023 19:55:50 +0100 Subject: [PATCH 05/14] Update create-test-wf.yml --- .github/workflows/create-test-wf.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-test-wf.yml b/.github/workflows/create-test-wf.yml index d52fa22301..8f3c5fdb47 100644 --- a/.github/workflows/create-test-wf.yml +++ b/.github/workflows/create-test-wf.yml @@ -23,7 +23,8 @@ jobs: strategy: matrix: NXF_VER: - - "23.04.1" + - "22.10.1" + - "latest-everything" steps: - uses: actions/checkout@v3 name: Check out source-code repository @@ -46,7 +47,7 @@ jobs: - name: Run nf-core/tools run: | nf-core --log-file log.txt create -n testpipeline -d "This pipeline is for testing" -a "Testing McTestface" --plain - nextflow run nf-core-testpipeline -profile test,docker --outdir ./results -plugins nf-amazon@1.16.2 + nextflow run nf-core-testpipeline -profile test,docker --outdir ./results - name: Upload log file artifact if: ${{ always() }} From 446a6e5fab4761c778bcf008a513b56ede5b9dce Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Fri, 9 Jun 2023 12:11:47 +0100 Subject: [PATCH 06/14] Fix regex for containers --- nf_core/modules/lint/main_nf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index c6ea2ed6c3..5025fa0398 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -268,7 +268,7 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "singularity": # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' :" -> v1.2.0_cv1 # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :" -> 0.11.9--0 - match = re.search(r"(?:/)?(?:biocontainers_)?(?::)?([A-Za-z\d\-_.]+?)(?:\.img)?", l) + match = re.search(r"(?:/)?(?:biocontainers_)?(?::)?([A-Za-z\d\-_.]+?)(?:\.img)'", l) if match is not None: singularity_tag = match.group(1) self.passed.append(("singularity_tag", f"Found singularity tag: {singularity_tag}", self.main_nf)) @@ -280,7 +280,7 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "docker": # e.g. "quay.io/biocontainers/krona:2.7.1--pl526_5' }" -> 2.7.1--pl526_5 # e.g. "biocontainers/biocontainers:v1.2.0_cv1' }" -> v1.2.0_cv1 - match = re.search(r"(?:[/])?(?::)?([A-Za-z\d\-_.]+)", l) + match = re.search(r"(?:[/])?(?::)?([A-Za-z\d\-_.]+)'", l) if match is not None: docker_tag = match.group(1) self.passed.append(("docker_tag", f"Found docker tag: {docker_tag}", self.main_nf)) From 32fa7707498e6073211a85947d3f70de406520df Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Fri, 9 Jun 2023 12:28:05 +0100 Subject: [PATCH 07/14] Fix parsing of tags so they should match in most situations --- nf_core/modules/lint/main_nf.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index 5025fa0398..08645f56bd 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -222,9 +222,6 @@ def check_process_section(self, lines, fix_version, progress_bar): return self.passed.append(("process_exist", "Process definition exists", self.main_nf)) - # Checks that build numbers of bioconda, singularity and docker container are matching - singularity_tag = "singularity" - docker_tag = "docker" bioconda_packages = [] # Process name should be all capital letters @@ -240,11 +237,11 @@ def check_process_section(self, lines, fix_version, progress_bar): # Deprecated enable_conda for i, l in enumerate(lines): url = None - l = l.strip(" \n'\"") + l = l.strip(" \n'\"}:") # Catch preceeding "container " if l.startswith("container"): - l = l.replace("container", "").strip(" \n'\"") + l = l.replace("container", "").strip(": \n'\"}") if _container_type(l) == "conda": bioconda_packages = [b for b in l.split() if "bioconda::" in b] @@ -268,7 +265,7 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "singularity": # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' :" -> v1.2.0_cv1 # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :" -> 0.11.9--0 - match = re.search(r"(?:/)?(?:biocontainers_)?(?::)?([A-Za-z\d\-_.]+?)(?:\.img)'", l) + match = re.search(r":([A-Za-z\d\-_.]+)$", l) if match is not None: singularity_tag = match.group(1) self.passed.append(("singularity_tag", f"Found singularity tag: {singularity_tag}", self.main_nf)) @@ -280,7 +277,7 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "docker": # e.g. "quay.io/biocontainers/krona:2.7.1--pl526_5' }" -> 2.7.1--pl526_5 # e.g. "biocontainers/biocontainers:v1.2.0_cv1' }" -> v1.2.0_cv1 - match = re.search(r"(?:[/])?(?::)?([A-Za-z\d\-_.]+)'", l) + match = re.search(r":([A-Za-z\d\-_.]+)$", l) if match is not None: docker_tag = match.group(1) self.passed.append(("docker_tag", f"Found docker tag: {docker_tag}", self.main_nf)) From 90dc179cdd00097c9be1fbad4e587329a5f14eae Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Fri, 9 Jun 2023 12:29:52 +0100 Subject: [PATCH 08/14] Match strip strings for consistency --- nf_core/modules/lint/main_nf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index 08645f56bd..a31318d935 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -241,7 +241,7 @@ def check_process_section(self, lines, fix_version, progress_bar): # Catch preceeding "container " if l.startswith("container"): - l = l.replace("container", "").strip(": \n'\"}") + l = l.replace("container", "").strip(" \n'\"}:") if _container_type(l) == "conda": bioconda_packages = [b for b in l.split() if "bioconda::" in b] From b6dbc8b8f2e061afde5fb310c21599f47a100610 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Fri, 9 Jun 2023 12:37:10 +0100 Subject: [PATCH 09/14] Revert setting docker_tag and singularity_tag --- nf_core/modules/lint/main_nf.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index a31318d935..85e1f9aa90 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -222,6 +222,11 @@ def check_process_section(self, lines, fix_version, progress_bar): return self.passed.append(("process_exist", "Process definition exists", self.main_nf)) + # Checks that build numbers of bioconda, singularity and docker container are matching + singularity_tag = "singularity" + docker_tag = "docker" + bioconda_packages = [] + bioconda_packages = [] # Process name should be all capital letters From 56d1a994b08d3a0be581f089afb454abfc2334f0 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Fri, 9 Jun 2023 17:36:51 +0100 Subject: [PATCH 10/14] Fewer false positives for docker container names --- nf_core/modules/lint/main_nf.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index 85e1f9aa90..6f2d355a7b 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -223,10 +223,8 @@ def check_process_section(self, lines, fix_version, progress_bar): self.passed.append(("process_exist", "Process definition exists", self.main_nf)) # Checks that build numbers of bioconda, singularity and docker container are matching - singularity_tag = "singularity" - docker_tag = "docker" - bioconda_packages = [] - + singularity_tag = None + docker_tag = None bioconda_packages = [] # Process name should be all capital letters @@ -419,7 +417,11 @@ def check_process_section(self, lines, fix_version, progress_bar): else: self.passed.append(("bioconda_latest", f"Conda package is the latest available: `{bp}`", self.main_nf)) - return docker_tag == singularity_tag + # Check if a tag exists at all. If not, return None. + if singularity_tag is None or docker_tag is None: + return None + else: + return docker_tag == singularity_tag def check_process_labels(self, lines): @@ -608,5 +610,5 @@ def _container_type(line): if url_match: return "singularity" return None - if line.count("/") >= 1 and line.count(":") == 1: + if line.count("/") >= 1 and line.count(":") == 1 and line.count(" ") == 0: return "docker" From 1a04dfca1713e86ba503b7bba133b93c36809d55 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Fri, 9 Jun 2023 18:10:10 +0100 Subject: [PATCH 11/14] More singularity tag parsing --- nf_core/modules/lint/main_nf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index 6f2d355a7b..bddf99a06c 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -268,7 +268,7 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "singularity": # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' :" -> v1.2.0_cv1 # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :" -> 0.11.9--0 - match = re.search(r":([A-Za-z\d\-_.]+)$", l) + match = re.search(r"(?::)?([A-Za-z\d\-_.]+?)(?:\.img)?(?:\.sif)?$", l) if match is not None: singularity_tag = match.group(1) self.passed.append(("singularity_tag", f"Found singularity tag: {singularity_tag}", self.main_nf)) From 87144bfff9386b7c28b37f3687fcff87752ceabb Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Mon, 12 Jun 2023 09:26:08 +0100 Subject: [PATCH 12/14] Update comment description of check_process_section where it extracts the container tag --- nf_core/modules/lint/main_nf.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index bddf99a06c..d86566a6fd 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -266,8 +266,8 @@ def check_process_section(self, lines, fix_version, progress_bar): ) ) if _container_type(l) == "singularity": - # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' :" -> v1.2.0_cv1 - # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :" -> 0.11.9--0 + # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img -> v1.2.0_cv1 + # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0 -> 0.11.9--0 match = re.search(r"(?::)?([A-Za-z\d\-_.]+?)(?:\.img)?(?:\.sif)?$", l) if match is not None: singularity_tag = match.group(1) @@ -278,8 +278,8 @@ def check_process_section(self, lines, fix_version, progress_bar): url = urlparse(l.split("'")[0]) if _container_type(l) == "docker": - # e.g. "quay.io/biocontainers/krona:2.7.1--pl526_5' }" -> 2.7.1--pl526_5 - # e.g. "biocontainers/biocontainers:v1.2.0_cv1' }" -> v1.2.0_cv1 + # e.g. "quay.io/biocontainers/krona:2.7.1--pl526_5 -> 2.7.1--pl526_5 + # e.g. "biocontainers/biocontainers:v1.2.0_cv1 -> v1.2.0_cv1 match = re.search(r":([A-Za-z\d\-_.]+)$", l) if match is not None: docker_tag = match.group(1) From 6ef1fa3c5ed205510ca48467cbd56bd0a88d15e3 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Mon, 12 Jun 2023 10:06:12 +0100 Subject: [PATCH 13/14] Add period to singularity tag parsing --- nf_core/modules/lint/main_nf.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/nf_core/modules/lint/main_nf.py b/nf_core/modules/lint/main_nf.py index d86566a6fd..73d1df365a 100644 --- a/nf_core/modules/lint/main_nf.py +++ b/nf_core/modules/lint/main_nf.py @@ -268,7 +268,8 @@ def check_process_section(self, lines, fix_version, progress_bar): if _container_type(l) == "singularity": # e.g. "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img -> v1.2.0_cv1 # e.g. "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0 -> 0.11.9--0 - match = re.search(r"(?::)?([A-Za-z\d\-_.]+?)(?:\.img)?(?:\.sif)?$", l) + # Please god let's find a better way to do this than regex + match = re.search(r"(?:[:.])?([A-Za-z\d\-_.]+?)(?:\.img)?(?:\.sif)?$", l) if match is not None: singularity_tag = match.group(1) self.passed.append(("singularity_tag", f"Found singularity tag: {singularity_tag}", self.main_nf)) @@ -600,7 +601,7 @@ def _container_type(line): """Returns the container type of a build.""" if line.startswith("conda"): return "conda" - if line.startswith("https://containers") or line.startswith("https://depot"): + if line.startswith("https://") or line.startswith("https://depot"): # Look for a http download URL. # Thanks Stack Overflow for the regex: https://stackoverflow.com/a/3809435/713980 url_regex = ( @@ -610,5 +611,5 @@ def _container_type(line): if url_match: return "singularity" return None - if line.count("/") >= 1 and line.count(":") == 1 and line.count(" ") == 0: + if line.count("/") >= 1 and line.count(":") == 1 and line.count(" ") == 0 and "https://" not in line: return "docker" From 6c3a218e67d8589406cdae5cbad747bf30f46474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlia=20Mir=20Pedrol?= Date: Thu, 15 Jun 2023 06:41:52 +0000 Subject: [PATCH 14/14] fix jinja error when parsing awsfultest.yml --- nf_core/pipeline-template/.github/workflows/awsfulltest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nf_core/pipeline-template/.github/workflows/awsfulltest.yml b/nf_core/pipeline-template/.github/workflows/awsfulltest.yml index e1e8adcccf..2f83a0962c 100644 --- a/nf_core/pipeline-template/.github/workflows/awsfulltest.yml +++ b/nf_core/pipeline-template/.github/workflows/awsfulltest.yml @@ -26,7 +26,7 @@ jobs: workdir: s3://${{ secrets.AWS_S3_BUCKET }}{% endraw %}/work/{{ short_name }}/{% raw %}work-${{ github.sha }}{% endraw %} parameters: | { - "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", + "hook_url": "{% raw %}${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}{% endraw %}", "outdir": "s3://{% raw %}${{ secrets.AWS_S3_BUCKET }}{% endraw %}/{{ short_name }}/{% raw %}results-${{ github.sha }}{% endraw %}" } profiles: test_full