Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
9fbbc0e
First pass of the triathlon course
vdauwera May 8, 2026
c213df0
Improve Seqera platform part
vdauwera May 8, 2026
40cc7d0
Add nextflow-triathlon working directory and rewrite Part 1 docs
vdauwera May 11, 2026
9fcc3f7
Split nextflow-triathlon into basics/ and nf-core/ subdirectories
vdauwera May 12, 2026
fa08bc9
Restructure Section 4 to show memory error and laptop.config fix
vdauwera May 12, 2026
2730bde
Rename section 4.3 heading and remove stray run artifacts
vdauwera May 12, 2026
ab4e10b
Fix tutorial docs and config after walkthrough testing
vdauwera May 12, 2026
a88f546
Rewrite Part 3 Seqera Platform section with getting-started content a…
vdauwera May 12, 2026
d7f9b68
Add tw CLI setup with seqera config file and address remaining TODOs
vdauwera May 13, 2026
9697dc3
Rename nextflow-triathlon directory to triathlon
vdauwera May 13, 2026
582dcce
Comment out unfinished video section in triathlon index
vdauwera May 13, 2026
f87287e
Rename 01_run_basics.md to 01_run_nextflow.md
vdauwera May 13, 2026
1b915b9
Rename 03_seqera_platform.md to 03_run_seqera.md
vdauwera May 13, 2026
aa62363
Address remaining TODOs across triathlon course
vdauwera May 13, 2026
dea3f99
Fix missing additional_information marker in triathlon index.md
vdauwera May 13, 2026
84533fe
Improve Part 1 and Part 2 content and exercises
vdauwera May 13, 2026
b5d5f16
Fix outputs, hashes, highlights and add tw params-file section across…
vdauwera May 13, 2026
0067a23
Update survey link
vdauwera May 13, 2026
6c529d2
Restructure orientation and part tips to use triathlon/ as VSCode root
vdauwera May 13, 2026
944fac5
Show how to bake params-file and profile into tw pipelines add
vdauwera May 13, 2026
c10e8b2
Integrate Nextflow Triathlon into the training portfolio as a Trainin…
vdauwera Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions archive/nextflow-run/1-hello.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env nextflow

/*
* Use echo to print 'Hello World!' to a file
*/
process sayHello {

input:
val greeting

output:
path 'output.txt'

script:
"""
echo '${greeting}' > output.txt
"""
}

/*
* Pipeline parameters
*/
params {
input: String
}

workflow {

main:
// emit a greeting
sayHello(params.input)

publish:
first_output = sayHello.out
}

output {
first_output {
path '1-hello'
mode 'copy'
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions archive/nextflow-run/data/greetings.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Hello,English,123
Bonjour,French,456
Hola,Spanish,789
17 changes: 17 additions & 0 deletions archive/nextflow-run/modules/cowpy.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Generate ASCII art with cowpy (https://github.com/jeffbuttars/cowpy)
process cowpy {

container 'community.wave.seqera.io/library/cowpy:1.1.5--3db457ae1977a273'

input:
path input_file
val character

output:
path "cowpy-${input_file}"

script:
"""
cat ${input_file} | cowpy -c "${character}" > cowpy-${input_file}
"""
}
1 change: 1 addition & 0 deletions archive/nextflow-run/nextflow.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
docker.enabled = true
20 changes: 20 additions & 0 deletions archive/nextflow-run/solutions/modules/collectGreetings.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Collect uppercase greetings into a single output file
*/
process collectGreetings {

input:
path input_files
val batch_name

output:
path "COLLECTED-${batch_name}-output.txt", emit: outfile
path "${batch_name}-report.txt", emit: report

script:
count_greetings = input_files.size()
"""
cat ${input_files} > 'COLLECTED-${batch_name}-output.txt'
echo 'There were ${count_greetings} greetings in this batch.' > '${batch_name}-report.txt'
"""
}
16 changes: 16 additions & 0 deletions archive/nextflow-run/solutions/modules/convertToUpper.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* Use a text replacement tool to convert the greeting to uppercase
*/
process convertToUpper {

input:
path input_file

output:
path "UPPER-${input_file}"

script:
"""
cat '${input_file}' | tr '[a-z]' '[A-Z]' > 'UPPER-${input_file}'
"""
}
16 changes: 16 additions & 0 deletions archive/nextflow-run/solutions/modules/sayHello.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* Use echo to print 'Hello World!' to a file
*/
process sayHello {

input:
val greeting

output:
path "${greeting}-output.txt"

script:
"""
echo '${greeting}' > '${greeting}-output.txt'
"""
}
File renamed without changes.
File renamed without changes.
120 changes: 120 additions & 0 deletions docs/en/docs/archive/nextflow_run/00_orientation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Getting started

## Start a training environment

To use the pre-built environment we provide on GitHub Codespaces, click the "Open in GitHub Codespaces" button below. For other options, see [Environment options](../../envsetup/index.md).

We recommend opening the training environment in a new browser tab or window (use right-click, ctrl-click or cmd-click depending on your equipment) so that you can read on while the environment loads.
You will need to keep these instructions open in parallel to work through the course.

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/nextflow-io/training?quickstart=1&ref=master)

### Environment basics

This training environment contains all the software, code and data necessary to work through the training course, so you don't need to install anything yourself.

The codespace is set up with a VSCode interface, which includes a filesystem explorer, a code editor and a terminal shell.
All instructions given during the course (e.g. 'open the file', 'edit the code' or 'run this command') refer to those three parts of the VScode interface unless otherwise specified.

If you are working through this course by yourself, please acquaint yourself with the [environment basics](../../envsetup/01_setup.md) for further details.

### Version requirements

This training works with Nextflow 25.10.2 or later **with the v2 syntax parser ENABLED**.
If you are using a local or custom environment, please make sure you are using the correct settings as documented [here](../../info/nxf_versions.md).

## Get ready to work

Once your codespace is running, there are two things you need to do before diving into the training: set your working directory for this specific course, and take a look at the materials provided.

### Set the working directory

By default, the codespace opens with the work directory set at the root of all training courses, but for this retired version of the course, we'll be working in the `archive/nextflow-run/` directory.

Change directory now by running this command in the terminal:

```bash
cd archive/nextflow-run/
```

You can set VSCode to focus on this directory, so that only the relevant files show in the file explorer sidebar:

```bash
code .
```

!!! tip

If for whatever reason you move out of this directory (e.g. your codespace goes to sleep), you can always use the full path to return to it, assuming you're running this within the Github Codespaces training environment:

```bash
cd /workspaces/training/archive/nextflow-run
```

Now let's have a look at the contents.

### Explore the materials provided

You can explore the contents of this directory by using the file explorer on the left-hand side of the training workspace.
Alternatively, you can use the `tree` command.

Throughout the course, we use the output of `tree` to represent directory structure and contents in a readable form, sometimes with minor modifications for clarity.

Here we generate a table of contents to the second level down:

```bash
tree . -L 2
```

??? abstract "Directory contents"

```console
.
├── 1-hello.nf
├── 2a-inputs.nf
├── 2b-multistep.nf
├── 2c-modules.nf
├── 2d-container.nf
├── 3-main.nf
├── data
│ └── greetings.csv
├── modules
│ ├── collectGreetings.nf
│ ├── convertToUpper.nf
│ ├── cowpy.nf
│ └── sayHello.nf
├── nextflow.config
├── solutions
│ ├── 3-main.nf
│ ├── modules
│ └── nextflow.config
├── test-params.json
└── test-params.yaml
```

Click on the colored box to expand the section and view its contents.
We use collapsible sections like this to display expected command output as well as directory and file contents in a concise way.

- **The `.nf` files** are workflow scripts that are numbered based on what part of the course they're used in.

- **The file `nextflow.config`** is a configuration file that sets minimal environment properties.
You can ignore it for now.

- **The file `greetings.csv`** under `data/` contains input data we'll use in most of the course. It is described in Part 2 (Run pipelines), when we introduce it for the first time.

- **The `test-params.*`** files are configuration files we'll use in Part 3 (Configuration). You can ignore them for now.

- **The `solutions` directory** contains the final state of the workflow and its accessory files (config and modules) that result from completing the course.
They are intended to be used as a reference to check your work and troubleshoot any issues.

## Readiness checklist

Think you're ready to dive in?

- [ ] I understand the goal of this course and its prerequisites
- [ ] My environment is up and running
- [ ] I've set my working directory appropriately

If you can check all the boxes, you're good to go.

**To continue to [Part 1: Run Basic operations](./01_basics.md), click on the arrow in the bottom right corner of this page.**
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ If your console output looks something like that, then congratulations, you just

Then you're probably using the older v1 Nextflow language parser.
This was mentioned at the start of the course, but maybe you missed it.
Check the [Nextflow versions](../info/nxf_versions.md) help material.
Check the [Nextflow versions](../../info/nxf_versions.md) help material.

In short, if you're using Nextflow `25.10` then you need to enable the v2 language parser:

Expand Down Expand Up @@ -468,7 +468,7 @@ process sayHello {
Here we have a **process** called `sayHello` that takes an **input** variable called `greeting` and writes its **output** to a file named `output.txt`.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/sayhello_with_input.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/sayhello_with_input.svg"
</figure>

This is a very minimal process definition that just contains an `input` definition, an `output` definition and the `script` to execute.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Hola,Spanish,789
We've also written an improved version of the original workflow, now called `2a-inputs.nf`, that will read in the CSV file, extract the greetings and write each of them to a separate file.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/hello-pipeline-multi-inputs.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/hello-pipeline-multi-inputs.svg"
</figure>

Let's run the workflow first, and we'll take a look at the relevant Nextflow code afterward.
Expand Down Expand Up @@ -274,7 +274,7 @@ The result is a channel containing `Hello`, `Bonjour`, and `Hola`.

And then we've taken the first element from each of the three rows and loaded them into a Nextflow channel that now contains: `Hello`, `Bonjour`, and `Hola`.

If you want to understand channels and operators in depth, including how to write them yourself, see [Hello Nextflow Part 2: Hello Channels](../hello_nextflow/02_hello_channels.md#4-read-input-values-from-a-csv-file).
If you want to understand channels and operators in depth, including how to write them yourself, see [Hello Nextflow Part 2: Hello Channels](../../hello_nextflow/02_hello_channels.md#4-read-input-values-from-a-csv-file).

#### 1.4.2. Call the process on each greeting

Expand Down Expand Up @@ -344,7 +344,7 @@ To that end, we provide you with an example workflow that chains together three
Specifically, we made an expanded version of the workflow called `2b-multistep.nf` that takes each input greeting, converts it to uppercase, then collects all the uppercased greetings into a single output file.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/hello-pipeline-multi-steps.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/hello-pipeline-multi-steps.svg"
</figure>

As previously, we'll run the workflow first then look at the code to see what is new.
Expand Down Expand Up @@ -541,15 +541,15 @@ Let's take a closer look and see if we can identify the most interesting pieces.
If you're using VSCode with the Nextflow extension, you can get a helpful diagram of how the processes are connected by clicking on the small `DAG preview` link displayed just above the workflow block in any Nextflow script.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/DAG-multistep.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/DAG-multistep.svg"
</figure>

This gives you a nice overview of how the processes are connected and what they produce.

You see that in addition to the original `sayHello` process, we now also have `convertToUpper` and `collectGreetings`, which match the names of the processes we saw in the console output.
The two new process definitions are structured in the same way as the `sayHello` process, except `collectGreetings` takes an additional input parameter called `batch` and produces two outputs.

We won't go into the code for each in detail, but if you're curious, you can look up the details in [Part 2 of Hello Nextflow](../hello_nextflow/03_hello_workflow.md).
We won't go into the code for each in detail, but if you're curious, you can look up the details in [Part 2 of Hello Nextflow](../../hello_nextflow/03_hello_workflow.md).

For now, let's dig into how the processes are connected to one another.

Expand Down Expand Up @@ -620,13 +620,13 @@ In the context of this workflow, it's taking the three uppercased greetings in t
That's how we get all the greetings back into the same file.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/with-collect-operator.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/with-collect-operator.svg"
</figure>

In contrast, if we didn't apply `collect()` to the output of `convertToUpper()` before feeding it to `collectGreetings()`, Nextflow would simply run `collectGreetings()` independently on each greeting, which would not achieve our goal.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/without-collect-operator.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/without-collect-operator.svg"
</figure>

There are many other [operators](https://nextflow.io/docs/latest/reference/operator.html) available to apply transformations to the contents of channels between process calls.
Expand Down Expand Up @@ -756,7 +756,7 @@ There are more sophisticated ways to organize published outputs; we'll touch on

!!! tip "Want to learn more about building workflows?"

For detailed coverage of building multi-step workflows, see [Hello Nextflow Part 3: Hello Workflow](../hello_nextflow/03_hello_workflow.md).
For detailed coverage of building multi-step workflows, see [Hello Nextflow Part 3: Hello Workflow](../../hello_nextflow/03_hello_workflow.md).

### Takeaway

Expand Down Expand Up @@ -788,7 +788,7 @@ Now we're going to see what it looks like when the processes are stored in indiv
We have of course once again prepared a suitable workflow for demonstration purposes, called `2c-modules.nf`, along with a set of modules located in the `modules/` directory.

<figure class="excalidraw">
--8<-- "docs/en/docs/nextflow_run/img/modules.svg"
--8<-- "docs/en/docs/archive/nextflow_run/img/modules.svg"
</figure>

??? abstract "Directory contents"
Expand Down Expand Up @@ -1066,7 +1066,7 @@ You see that the filesystem inside the container is different from the filesyste

This effectively establishes a tunnel through the container wall that you can use to access that part of your filesystem.

This is covered in more detail in [Part 5 of Hello Nextflow](../hello_nextflow/05_hello_containers.md).
This is covered in more detail in [Part 5 of Hello Nextflow](../../hello_nextflow/05_hello_containers.md).

#### 4.1.3. Run the `cowpy` tool

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ By learning to utilize these configuration options effectively, you can take ful

To exercise these elements of configuration, we're going to be running a fresh copy of the workflow we last ran at the end of Part 2 of this training course, renamed `3-main.nf`.

If you're not familiar with the Hello pipeline or you could use a reminder, see [this info page](../info/hello_pipeline.md).
If you're not familiar with the Hello pipeline or you could use a reminder, see [this info page](../../info/hello_pipeline.md).

---

Expand Down Expand Up @@ -1347,7 +1347,7 @@ This means that as long as we distribute any test data files with the workflow c
We can point to URLs for larger files that are stored externally.
Nextflow will download them automatically as long as there is an open connection.

For more details, see the Side Quest [Working with Files](../side_quests/working_with_files/index.md)
For more details, see the Side Quest [Working with Files](../../side_quests/working_with_files/index.md)

### 6.3. Use `nextflow config` to see the resolved configuration

Expand Down Expand Up @@ -1546,8 +1546,8 @@ You know everything you need to know to get started running and managing Nextflo

That concludes this course, but if you're eager to keep learning, we have two main recommendations:

- If you want to dig deeper into developing your own pipelines, have a look at [Hello Nextflow](../hello_nextflow/index.md), a course for beginners that covers the same general progression as this one but goes into much more detail about channels and operators.
- If you would like to continue learning how to run Nextflow pipelines without going deeper into the code, have a look at the first part of [Hello nf-core](../hello_nf-core/index.md), which introduces the tooling for finding and running pipelines from the hugely popular [nf-core](https://nf-co.re/) project.
- If you want to dig deeper into developing your own pipelines, have a look at [Hello Nextflow](../../hello_nextflow/index.md), a course for beginners that covers the same general progression as this one but goes into much more detail about channels and operators.
- If you would like to continue learning how to run Nextflow pipelines without going deeper into the code, have a look at the first part of [Hello nf-core](../../hello_nf-core/index.md), which introduces the tooling for finding and running pipelines from the hugely popular [nf-core](https://nf-co.re/) project.

Have fun!

Expand Down
Loading
Loading