-
Notifications
You must be signed in to change notification settings - Fork 5
Update the qpx module container version #38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
efb4565
3ed3d27
05af811
46525f0
fdd30d5
7a46c93
cffb20f
f7206c0
69529f0
5533af6
67bd04a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,4 +3,4 @@ channels: | |
| - bioconda | ||
| - defaults | ||
| dependencies: | ||
| - bioconda::pridepy=0.0.14 | ||
| - bioconda::pridepy=0.0.15 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,8 +5,8 @@ process PRIDEPY_DOWNLOAD { | |
|
|
||
| conda "${moduleDir}/environment.yml" | ||
| container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container | ||
| ? 'https://depot.galaxyproject.org/singularity/pridepy:0.0.14--pyhdfd78af_0' | ||
| : 'biocontainers/pridepy:0.0.14--pyhdfd78af_0'}" | ||
| ? 'https://depot.galaxyproject.org/singularity/pridepy:0.0.15--pyhdfd78af_0' | ||
| : 'biocontainers/pridepy:0.0.15--pyhdfd78af_0'}" | ||
|
Comment on lines
7
to
+9
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Check Singularity depot URL availability
curl -sI "https://depot.galaxyproject.org/singularity/pridepy:0.0.15--pyhdfd78af_0" \
| head -5
# Check Docker Hub / BioContainers tag availability
curl -s "https://registry.hub.docker.com/v2/repositories/biocontainers/pridepy/tags/0.0.15--pyhdfd78af_0/" \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('name','NOT FOUND'))"Repository: bigbio/nf-modules Length of output: 214 Fix Docker image reference: The Singularity image exists (HTTP 200), but the Docker/BioContainers tag does not exist in the registry. The workflow will fail when attempting to pull the Docker image. Verify the correct build hash for the 🤖 Prompt for AI Agents |
||
|
|
||
| input: | ||
| val(meta) | ||
|
|
@@ -39,7 +39,7 @@ process PRIDEPY_DOWNLOAD { | |
|
|
||
| cat <<-END_VERSIONS > versions.yml | ||
| "${task.process}": | ||
| pridepy: 0.0.14 | ||
| pridepy: 0.0.15 | ||
| END_VERSIONS | ||
| """ | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| channels: | ||
| - conda-forge | ||
| - bioconda | ||
| - defaults | ||
| dependencies: | ||
| - pip: | ||
| - qpx | ||
|
Comment on lines
+5
to
+7
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
python - <<'PY'
import json, urllib.request
data = json.load(urllib.request.urlopen("https://pypi.org/pypi/qpx/json"))
print("latest:", data["info"]["version"])
print("1.0.2 exists:", "1.0.2" in data.get("releases", {}))
PYRepository: bigbio/nf-modules Length of output: 2643 🏁 Script executed: # Check if the file exists and verify its current state
cat -n modules/bigbio/qpx/environment.ymlRepository: bigbio/nf-modules Length of output: 197 🌐 Web query:
💡 Result: For the Python package named “qpx” on PyPI (BigBio’s QPX: Quantitative Proteomics eXchange), version 1.0.2 does not appear to be published. The PyPI project page shows a version history with 1.0.1 (released 2026-04-03) and 1.0.0 (released 2026-04-01), but no 1.0.2 entry is listed.[1] What you can do: 1) Check whether you meant a different “qpx” package name (there are other unrelated “qpx” identifiers online).[2] 2) If you have a requirement for exactly 1.0.2, you may need to install from the package’s GitHub or request that the maintainer publish that release, since it is not present in PyPI’s listed versions.[1][3] Citations: 🏁 Script executed: # Check the container specification in main.nf
cat -n modules/bigbio/qpx/main.nf | head -30Repository: bigbio/nf-modules Length of output: 1176 Pin Line 7 uses an unpinned pip dependency, so Conda executions can drift from the tested container behavior and produce non-deterministic outcomes. However, the proposed pin 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,81 @@ | ||
| process QPX_EXPORT { | ||
| tag "qpx_export" | ||
| label 'process_medium' | ||
| label 'error_retry' | ||
|
|
||
| conda "${moduleDir}/environment.yml" | ||
| container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container | ||
| ? 'https://depot.galaxyproject.org/singularity/qpx:1.0.2--pyhdfd78af_1' | ||
| : 'biocontainers/qpx:1.0.2--pyhdfd78af_1'}" | ||
|
|
||
| input: | ||
| path(diann_report) | ||
| path(pg_matrix) | ||
| path(sdrf) | ||
| path(diann_log) | ||
| val(project_accession) | ||
|
|
||
| output: | ||
| path "qpx_output/" , emit: qpx_dataset | ||
| path "*.h5mu" , emit: mudata | ||
| path "versions.yml", emit: versions | ||
|
|
||
| when: | ||
| task.ext.when == null || task.ext.when | ||
|
|
||
| script: | ||
| def args = task.ext.args ?: '' | ||
| def prefix = project_accession ?: 'diann' | ||
| def pg_arg = pg_matrix ? "--pg-matrix-path ${pg_matrix}" : '' | ||
| def log_arg = diann_log ? "--diann-log ${diann_log}" : '' | ||
| def acc_arg = project_accession ? "--project-accession ${project_accession}" : '' | ||
| def qvalue = params.matrix_qvalue ?: 0.05 | ||
| """ | ||
| set -o pipefail | ||
| qpxc convert diann \\ | ||
| --report-path ${diann_report} \\ | ||
| --sdrf-file ${sdrf} \\ | ||
| ${pg_arg} \\ | ||
| ${log_arg} \\ | ||
| ${acc_arg} \\ | ||
| --output-folder qpx_output \\ | ||
| --output-prefix ${prefix} \\ | ||
| --qvalue-threshold ${qvalue} \\ | ||
| --standardized-intensities \\ | ||
| --duckdb-threads ${task.cpus} \\ | ||
| --duckdb-max-memory ${task.memory ? task.memory.toGiga() : 4}GB \\ | ||
| --compression zstd \\ | ||
| ${args} | ||
|
|
||
| python - <<'PY' | ||
| from qpx.dataset import Dataset | ||
| from qpx.mudata import build_mudata | ||
|
|
||
| ds = Dataset("qpx_output") | ||
| mdata = build_mudata(ds) | ||
| mdata.write("${prefix}.h5mu") | ||
| ds.close() | ||
| print(f"MuData: {mdata.n_obs} obs x {mdata.n_vars} vars -> ${prefix}.h5mu") | ||
| PY | ||
|
|
||
| cat <<-END_VERSIONS > versions.yml | ||
| "${task.process}": | ||
| qpx: \$(qpxc --version 2>&1 | sed 's/^qpx //') | ||
| mudata: \$(python -c 'import mudata; print(mudata.__version__)') | ||
| END_VERSIONS | ||
| """ | ||
|
|
||
| stub: | ||
| def prefix = project_accession ?: 'diann' | ||
| """ | ||
| mkdir -p qpx_output | ||
| touch qpx_output/stub.parquet | ||
| touch ${prefix}.h5mu | ||
|
|
||
| cat <<-END_VERSIONS > versions.yml | ||
| "${task.process}": | ||
| qpx: stub | ||
| mudata: stub | ||
| END_VERSIONS | ||
| """ | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,65 @@ | ||||||||||||||||||
| name: qpx_export | ||||||||||||||||||
| description: Convert DIA-NN quantification outputs to QPX Parquet dataset and MuData (.h5mu) | ||||||||||||||||||
| keywords: | ||||||||||||||||||
| - proteomics | ||||||||||||||||||
| - quantification | ||||||||||||||||||
| - parquet | ||||||||||||||||||
| - mudata | ||||||||||||||||||
| - dia-nn | ||||||||||||||||||
| - qpx | ||||||||||||||||||
| tools: | ||||||||||||||||||
| - qpx: | ||||||||||||||||||
| description: | | ||||||||||||||||||
| QPX (Quantitative Proteomics eXchange) converts tool-specific quantification | ||||||||||||||||||
| outputs into a standardised Parquet dataset and optionally a MuData (.h5mu) file | ||||||||||||||||||
| for downstream analysis in Python (scanpy / muon). | ||||||||||||||||||
| homepage: https://github.com/bigbio/qpx | ||||||||||||||||||
| documentation: https://github.com/bigbio/qpx | ||||||||||||||||||
| tool_dev_url: https://github.com/bigbio/qpx | ||||||||||||||||||
| licence: | ||||||||||||||||||
| - "Apache-2.0" | ||||||||||||||||||
| identifier: "" | ||||||||||||||||||
| input: | ||||||||||||||||||
| - diann_report: | ||||||||||||||||||
| type: file | ||||||||||||||||||
| description: DIA-NN main report (TSV or Parquet) | ||||||||||||||||||
| pattern: "*.{tsv,parquet}" | ||||||||||||||||||
| - pg_matrix: | ||||||||||||||||||
| type: file | ||||||||||||||||||
| description: DIA-NN protein-group matrix | ||||||||||||||||||
| pattern: "*.{tsv,parquet}" | ||||||||||||||||||
| - sdrf: | ||||||||||||||||||
| type: file | ||||||||||||||||||
| description: SDRF sample metadata file | ||||||||||||||||||
| pattern: "*.sdrf.tsv" | ||||||||||||||||||
| - diann_log: | ||||||||||||||||||
| type: file | ||||||||||||||||||
| description: DIA-NN summary log for version detection | ||||||||||||||||||
| pattern: "*.log" | ||||||||||||||||||
|
Comment on lines
+35
to
+38
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Broaden the DIANN log pattern to match actual filenames. Line 38 currently restricts logs to Proposed fix - diann_log:
type: file
description: DIA-NN summary log for version detection
- pattern: "*.log"
+ pattern: "*.log*"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||
| - project_accession: | ||||||||||||||||||
| type: string | ||||||||||||||||||
| description: PRIDE project accession (e.g. PXD026600) used as output prefix | ||||||||||||||||||
| output: | ||||||||||||||||||
| qpx_dataset: | ||||||||||||||||||
| - "qpx_output/": | ||||||||||||||||||
| type: directory | ||||||||||||||||||
| description: QPX Parquet dataset directory | ||||||||||||||||||
| pattern: "qpx_output/" | ||||||||||||||||||
| mudata: | ||||||||||||||||||
| - "*.h5mu": | ||||||||||||||||||
| type: file | ||||||||||||||||||
| description: MuData file containing the quantification data | ||||||||||||||||||
| pattern: "*.h5mu" | ||||||||||||||||||
| versions: | ||||||||||||||||||
| - versions.yml: | ||||||||||||||||||
| type: file | ||||||||||||||||||
| description: File containing software versions | ||||||||||||||||||
| pattern: "versions.yml" | ||||||||||||||||||
| ontologies: | ||||||||||||||||||
| - edam: http://edamontology.org/format_3750 | ||||||||||||||||||
| authors: | ||||||||||||||||||
| - "@ypriverol" | ||||||||||||||||||
| - "@Shen-YuFei" | ||||||||||||||||||
| maintainers: | ||||||||||||||||||
| - "@ypriverol" | ||||||||||||||||||
| - "@Shen-YuFei" | ||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,88 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nextflow_process { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| name "Test Process QPX_EXPORT" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| script "../main.nf" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| process "QPX_EXPORT" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tag "modules" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tag "modules_bigbio" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tag "modules_qpx" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tag "qpx" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| config "./nextflow.config" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| test("Should convert DIA-NN output to QPX Parquet + MuData") { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| when { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def zipUrl = (params.test_data?.proteomics?.qpx?.diann_results) ?: "https://ftp.pride.ebi.ac.uk/pub/databases/pride/resources/proteomes/pmultiqc/example-projects/PXD063291.zip" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def zipFile = file("test_qpx.zip") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| zipFile.withOutputStream { out -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| out << new URL(zipUrl).openStream() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def resultsDir = file("test_qpx_data") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| resultsDir.mkdirs() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| new java.util.zip.ZipFile(zipFile).withCloseable { zip -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| zip.entries().each { entry -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (!entry.isDirectory()) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def extractFile = new File(resultsDir, entry.name) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| extractFile.parentFile.mkdirs() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| extractFile.withOutputStream { out -> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| out << zip.getInputStream(entry) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+18
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Harden ZIP download/extraction (timeouts + Zip Slip guard). Line 19 has no connect/read timeout, and Line 26 trusts archive entry paths without canonical-path validation. That can hang CI and permits path traversal from crafted ZIPs. Proposed fix- zipFile.withOutputStream { out ->
- out << new URL(zipUrl).openStream()
- }
+ def connection = new URL(zipUrl).openConnection()
+ connection.setConnectTimeout(30_000)
+ connection.setReadTimeout(120_000)
+ connection.inputStream.withCloseable { input ->
+ zipFile.withOutputStream { out -> out << input }
+ }
def resultsDir = file("test_qpx_data")
resultsDir.mkdirs()
new java.util.zip.ZipFile(zipFile).withCloseable { zip ->
+ def canonicalRoot = resultsDir.canonicalFile
zip.entries().each { entry ->
if (!entry.isDirectory()) {
- def extractFile = new File(resultsDir, entry.name)
- extractFile.parentFile.mkdirs()
- extractFile.withOutputStream { out ->
- out << zip.getInputStream(entry)
- }
+ def extractFile = new File(resultsDir, entry.name).canonicalFile
+ if (!extractFile.path.startsWith(canonicalRoot.path + File.separator)) {
+ throw new SecurityException("Blocked zip entry outside target dir: ${entry.name}")
+ }
+ extractFile.parentFile.mkdirs()
+ zip.getInputStream(entry).withCloseable { input ->
+ extractFile.withOutputStream { out -> out << input }
+ }
}
}
}📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| zipFile.delete() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| process { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[0] = file('${resultsDir.getAbsolutePath()}/PXD063291/DiaNN/report.tsv') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[1] = file('${resultsDir.getAbsolutePath()}/PXD063291/DiaNN/report.pg_matrix.tsv') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[2] = file('${resultsDir.getAbsolutePath()}/PXD063291/PXD063291.sdrf.tsv') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[3] = file('${resultsDir.getAbsolutePath()}/PXD063291/DiaNN/report.log.txt') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[4] = "PXD063291" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| then { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assertAll( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { assert process.success }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { assert process.out.qpx_dataset.size() == 1 }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { assert process.out.mudata.size() == 1 }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { assert process.out.mudata[0].toString().endsWith('.h5mu') }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { assert snapshot(process.out.versions).match("versions") } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cleanup { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| file("test_qpx_data").deleteDir() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| test("Should run stub mode") { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| options "-stub" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| when { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| process { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[0] = file("stub_report.tsv", checkIfExists: false) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[1] = file("stub_pg_matrix.tsv", checkIfExists: false) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[2] = file("stub_sample.sdrf.tsv", checkIfExists: false) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[3] = file("stub_diann.log", checkIfExists: false) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| input[4] = "PXD026600" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| then { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert process.success | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert process.out.qpx_dataset.size() == 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert process.out.mudata.size() == 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert snapshot( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| process.out.mudata, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| process.out.versions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ).match("stub") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| { | ||
| "stub": { | ||
| "content": [ | ||
| [ | ||
| "PXD026600.h5mu:md5,d41d8cd98f00b204e9800998ecf8427e" | ||
| ], | ||
| [ | ||
| "versions.yml:md5,cc457dc644e23b74317eaa02eedda495" | ||
| ] | ||
| ], | ||
| "timestamp": "2026-05-05T18:36:46.564300378", | ||
| "meta": { | ||
| "nf-test": "0.9.5", | ||
| "nextflow": "26.04.0" | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| process { | ||
| withName: 'QPX_EXPORT' { | ||
| ext.args = '' | ||
| } | ||
| } | ||
|
|
||
| params { | ||
| qpx_version = 'dev' | ||
| matrix_qvalue = 0.05 | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
Is bioconda::pridepy 0.0.15 available on Bioconda or Anaconda?💡 Result:
No, bioconda::pridepy 0.0.15 is not available on Bioconda or Anaconda. pridepy 0.0.15 exists on PyPI [1][2], but searches of Anaconda.org/bioconda show no pridepy package [3][4][5][6][7], and Bioconda recipe docs and GitHub do not list a pridepy recipe [8][9][10][11][12][13]. A Biocontainer exists on quay.io [14], but no conda package in bioconda channel. GitHub repo latest release is v0.0.12 [15], though PyPI has 0.0.15.
Citations:
Remove
bioconda::channel prefix or update the package source.The package
pridepy=0.0.15does not exist in the Bioconda channel. It is only available on PyPI. Usingbioconda::pridepy=0.0.15will cause conda environment resolution to fail at runtime. Either specify the package with thepippackage manager instead, or use a version that exists in Bioconda (if available). The latest GitHub release is v0.0.12.🤖 Prompt for AI Agents