From 8ed5a55c8268f46da76a1d1c631e96d051e7491c Mon Sep 17 00:00:00 2001 From: dimalvovs Date: Wed, 17 Jun 2026 19:21:21 -0400 Subject: [PATCH 1/3] init channel-based reports --- modules/local/report/render_notebook.nf | 32 ++++++++++++++++ tests/fixtures/test.qmd | 9 +++++ .../local/report/render_notebook.nf.test | 38 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 modules/local/report/render_notebook.nf create mode 100644 tests/fixtures/test.qmd create mode 100644 tests/modules/local/report/render_notebook.nf.test diff --git a/modules/local/report/render_notebook.nf b/modules/local/report/render_notebook.nf new file mode 100644 index 0000000..5b98d4d --- /dev/null +++ b/modules/local/report/render_notebook.nf @@ -0,0 +1,32 @@ +// Generic process to render a Quarto notebook to HTML +process RENDER_NOTEBOOK { + tag "${report_name}" + label 'process_single' + + input: + tuple val(report_name), path(notebook), val(data_dir) + val project_name + val workflow_cmd + + output: + path "${report_name}.html" + + script: + """ + ## copy quarto notebook to working directory + cp $notebook ${report_name}.qmd + + ## render qmd report to html + quarto render ${report_name}.qmd \\ + -P project_name:${project_name} \\ + -P workflow_cmd:'${workflow_cmd}' \\ + -P project_dir:${data_dir} \\ + -P sample_table:${file(params.samplesheet)} \\ + --to html + """ + + stub: + """ + touch ${report_name}.html + """ +} diff --git a/tests/fixtures/test.qmd b/tests/fixtures/test.qmd new file mode 100644 index 0000000..2ab696a --- /dev/null +++ b/tests/fixtures/test.qmd @@ -0,0 +1,9 @@ +--- +title: "test notebook" +format: html +engine: knitr +--- + +```{python} +print("Hello world!") +``` diff --git a/tests/modules/local/report/render_notebook.nf.test b/tests/modules/local/report/render_notebook.nf.test new file mode 100644 index 0000000..6497f1d --- /dev/null +++ b/tests/modules/local/report/render_notebook.nf.test @@ -0,0 +1,38 @@ +nextflow_process { + + name "Test RENDER_NOTEBOOK" + script "modules/local/report/render_notebook.nf" + process "RENDER_NOTEBOOK" + + test("Should render basic notebook") { + // note that on Mac M series, jupyter may fail in container + // so the test notebook uses knitr engine instead + + tag "basic" + tag "notebook" + + when { + params { + samplesheet = "${projectDir}/tests/fixtures/valid_samplesheet.csv" + } + + process { + """ + input[0] = [ + "test_notebook", + file("${projectDir}/tests/fixtures/test.qmd"), + "${projectDir}/tests/fixtures" + ] + input[1] = "TCRtoolkit" + input[2] = "nextflow run main.nf" + """ + } + } + + then { + assert process.success + assert process.out.size() == 1 + } + } + +} From 9e398cf7c57b45bf692d30da7ad86f4d4eded675 Mon Sep 17 00:00:00 2001 From: dimalvovs Date: Wed, 17 Jun 2026 19:31:53 -0400 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- tests/modules/local/report/render_notebook.nf.test | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/modules/local/report/render_notebook.nf.test b/tests/modules/local/report/render_notebook.nf.test index 6497f1d..bbbba00 100644 --- a/tests/modules/local/report/render_notebook.nf.test +++ b/tests/modules/local/report/render_notebook.nf.test @@ -32,6 +32,11 @@ nextflow_process { then { assert process.success assert process.out.size() == 1 + + def html = path(process.out.get(0)) + assert html.getFileName().toString() == 'test_notebook.html' + assert html.exists() + assert html.text.contains('Hello world!') } } From b23a86ec1786bae86145b25ed254f09112806ec2 Mon Sep 17 00:00:00 2001 From: dimalvovs Date: Wed, 17 Jun 2026 21:20:08 -0400 Subject: [PATCH 3/3] Revert "Apply suggestions from code review" This reverts commit 9e398cf7c57b45bf692d30da7ad86f4d4eded675. --- tests/modules/local/report/render_notebook.nf.test | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/modules/local/report/render_notebook.nf.test b/tests/modules/local/report/render_notebook.nf.test index bbbba00..6497f1d 100644 --- a/tests/modules/local/report/render_notebook.nf.test +++ b/tests/modules/local/report/render_notebook.nf.test @@ -32,11 +32,6 @@ nextflow_process { then { assert process.success assert process.out.size() == 1 - - def html = path(process.out.get(0)) - assert html.getFileName().toString() == 'test_notebook.html' - assert html.exists() - assert html.text.contains('Hello world!') } }