version: "3" vars: OS_VAR: ["windows", "linux", "darwin"] ARCH_VAR: ["amd64", "arm64"] NOT_A_LIST: "not a list" tasks: # Loop over a list of values loop-explicit: cmds: - for: ["a", "b", "c"] cmd: echo "{{.ITEM}}" loop-matrix: cmds: - for: matrix: OS: ["windows", "linux", "darwin"] ARCH: ["amd64", "arm64"] cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" loop-matrix-ref: cmds: - for: matrix: OS: ref: .OS_VAR ARCH: ref: .ARCH_VAR cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" loop-matrix-ref-error: cmds: - for: matrix: OS: ref: .OS_VAR ARCH: ref: .NOT_A_LIST cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" # Loop over the task's sources loop-sources: sources: - foo.txt - bar.txt cmds: - for: sources cmd: cat "{{.ITEM}}" # Loop over the task's sources when globbed loop-sources-glob: sources: - "*.txt" cmds: - for: sources cmd: cat "{{.ITEM}}" # Loop over the task's generates loop-generates: generates: - foo.txt - bar.txt cmds: - for: generates cmd: cat "{{.ITEM}}" # Loop over the task's generates when globbed loop-generates-glob: generates: - "*.txt" cmds: - for: generates cmd: cat "{{.ITEM}}" # Loop over the contents of a variable loop-vars: vars: FOO: foo.txt,bar.txt cmds: - for: var: FOO split: "," cmd: cat "{{.ITEM}}" # Loop over the output of a command (auto splits on " ") loop-vars-sh: vars: FOO: sh: ls *.txt cmds: - for: var: FOO cmd: cat "{{.ITEM}}" # Loop over another task loop-task: vars: FOO: foo.txt bar.txt cmds: - for: var: FOO task: looped-task vars: FILE: "{{.ITEM}}" # Loop over another task with the variable named differently loop-task-as: vars: FOO: foo.txt bar.txt cmds: - for: var: FOO as: FILE task: looped-task vars: FILE: "{{.FILE}}" # Loop over different tasks using the variable loop-different-tasks: vars: FOO: "1 2 3" cmds: - for: var: FOO task: task-{{.ITEM}} looped-task: internal: true cmd: cat "{{.FILE}}" task-1: internal: true cmd: echo "1" task-2: internal: true cmd: echo "2" task-3: internal: true cmd: echo "3"