blob: 67c5aebc0010a5af9700ff8f212777e8e11a1459 [file] [log] [blame]
---
# voltha 2.0 tests
- project:
name: voltha-e2e
project-name: '{name}'
manualBranch: ''
olts: 1
onus: 1
pons: 1
withAlarms: true
make-target-failtest: bbsim-failurescenarios
make-target-errortest: bbsim-errorscenarios
make-target-alarmtest: bbsim-alarms-kind
make-target-multipleolt: bbsim-multiolt-kind
jobs:
- 'voltha-periodic-test':
name: 'periodic-voltha-test-bbsim'
pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
build-node: 'qct-pod4-node2'
make-target: functional-single-kind
make-target-failtest: bbsim-failurescenarios
make-target-errortest: bbsim-errorscenarios
make-target-alarmtest: bbsim-alarms-kind
make-target-multipleolt: bbsim-multiolt-kind
withAlarms: true
code-branch: 'master'
olts: 1
onus: 2
pons: 2
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-multiple-olts-test-bbsim'
pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
build-node: 'qct-pod4-node2'
make-target: functional-multi-olt
make-target-failtest: bbsim-multiolt-failurescenarios
make-target-errortest: bbsim-multiolt-errorscenarios
make-target-alarmtest: bbsim-alarms-kind
make-target-multipleolt: bbsim-multiolt-kind
withAlarms: false
code-branch: 'master'
olts: 2
onus: 2
pons: 2
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-2.6-multiple-olts-test-bbsim'
pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
build-node: 'qct-pod4-node2'
make-target: functional-multi-olt
make-target-failtest: bbsim-multiolt-failurescenarios
make-target-errortest: bbsim-multiolt-errorscenarios
make-target-alarmtest: bbsim-alarms-kind
make-target-multipleolt: bbsim-multiolt-kind
withAlarms: false
code-branch: 'voltha-2.6'
olts: 2
onus: 2
pons: 2
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-test-DMI'
pipeline-script: 'voltha-DMI-bbsim-tests.groovy'
build-node: 'qct-pod4-node2'
make-target: bbsim-dmi-hw-management-test
withAlarms: false
code-branch: 'master'
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-test-DMI-2.6'
pipeline-script: 'voltha-DMI-bbsim-tests.groovy'
build-node: 'qct-pod4-node2'
make-target: bbsim-dmi-hw-management-test
withAlarms: false
code-branch: 'voltha-2.6'
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-test-bbsim-2.6'
pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
build-node: 'qct-pod4-node2'
make-target: functional-single-kind
make-target-failtest: bbsim-failurescenarios
make-target-errortest: bbsim-errorscenarios
make-target-alarmtest: bbsim-alarms-kind
withAlarms: true
code-branch: 'voltha-2.6'
onus: 2
pons: 2
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-etcd-test'
pipeline-script: 'voltha-system-test-bbsim.groovy'
build-node: 'ubuntu16.04-basebuild-4c-8g'
code-branch: 'master'
make-target: sanity-multi-kind
onus: 2
pons: 2
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-etcd-test-2.6'
pipeline-script: 'voltha-system-test-bbsim.groovy'
build-node: 'ubuntu16.04-basebuild-4c-8g'
code-branch: 'voltha-2.6'
make-target: sanity-multi-kind
onus: 2
pons: 2
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-sanity-test-multi-runs'
pipeline-script: 'voltha-go-multi-tests.groovy'
build-node: 'qct-pod4-node2'
code-branch: 'master'
make-target: sanity-kind
onus: 1
pons: 1
test-runs: 5
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'periodic-voltha-sanity-test-multi-runs-2.6'
pipeline-script: 'voltha-go-multi-tests.groovy'
build-node: 'qct-pod4-node2'
code-branch: 'voltha-2.6'
make-target: sanity-kind
onus: 1
pons: 1
test-runs: 5
time-trigger: "H H/12 * * *"
- 'voltha-periodic-test':
name: 'nightly-voltha-DTflow-sanity-test'
build-node: 'ubuntu16.04-basebuild-4c-8g'
code-branch: 'master'
make-target: sanity-kind-dt
onus: 1
pons: 1
time-trigger: "@daily"
work-flow: DT
# Per-patchset Pod builds on Tucson pod
- 'verify_physical_voltha_patchset_auto':
name: 'verify_physical_voltha_patchset_auto'
build-node: 'tucson-pod'
config-pod: 'tucson-pod'
oltDebVersionMaster: 'openolt_asfvolt16-3.3.2-f7feb4b828467ccc99104b56b29dc7a19aa2008b-40G-NNI.deb'
oltDebVersionVoltha23: 'openolt_asfvolt16-3.2.0-fc10f0d035181d3125ffc6e7a60bf5328fcf5bfa-40G-NNI.deb'
profile: 'Default'
default-test-args: '-i sanityORDeleteOLT -i PowerSwitch -X'
# Per-patchset Pod builds on Tucson pod
- 'verify_physical_voltha_patchset_manual':
name: 'verify_physical_voltha_patchset_manual'
build-node: 'tucson-pod'
config-pod: 'tucson-pod'
oltDebVersionMaster: 'openolt_asfvolt16-3.3.2-f7feb4b828467ccc99104b56b29dc7a19aa2008b-40G-NNI.deb'
oltDebVersionVoltha23: 'openolt_asfvolt16-3.2.0-fc10f0d035181d3125ffc6e7a60bf5328fcf5bfa-40G-NNI.deb'
profile: 'Default'
trigger-string: 'hardware test'
default-test-args: '-i sanityORDeleteOLT -i PowerSwitch -X'
# Per-patchset Pod builds on Tucson pod
- 'verify_physical_voltha_patchset_manual':
name: 'verify_physical_voltha_patchset_manual_DT'
build-node: 'tucson-pod'
config-pod: 'tucson-pod-DT'
oltDebVersionMaster: 'openolt_asfvolt16-3.3.2-f7feb4b828467ccc99104b56b29dc7a19aa2008b-40G-NNI.deb'
oltDebVersionVoltha23: 'openolt_asfvolt16-3.2.0-fc10f0d035181d3125ffc6e7a60bf5328fcf5bfa-40G-NNI.deb'
profile: 'Default'
pipeline-script: 'voltha-dt-physical-build-and-tests.groovy'
trigger-string: 'DT hardware test'
default-test-args: '-i sanityDt -i PowerSwitch -X'
# Manual build job for Tucson pod
# Allow local testing without disrupting above job
- 'build_physical_voltha_manual':
name: 'build_tucson-pod_manual'
build-node: 'tucson-pod'
config-pod: 'tucson-pod'
manualBranch: 'master'
oltDebVersionMaster: 'openolt_asfvolt16-3.3.2-f7feb4b828467ccc99104b56b29dc7a19aa2008b-40G-NNI.deb'
oltDebVersionVoltha23: 'openolt_asfvolt16-3.2.0-fc10f0d035181d3125ffc6e7a60bf5328fcf5bfa-40G-NNI.deb'
profile: 'Default'
default-test-args: '-i sanityORDeleteOLT -i PowerSwitch -X'
- job-template:
id: 'voltha-periodic-test'
name: '{name}'
pipeline-script: 'voltha-go-tests.groovy'
test-runs: 1
robot-args: ''
gerrit-project: ''
work-flow: ''
volthaSystemTestsChange: ''
kindVolthaChange: ''
extraHelmFlags: ''
sandbox: true
olts: 1
withAlarms: false
description: |
<!-- Managed by Jenkins Job Builder -->
Created by {id} job-template from ci-management/jjb/voltha-e2e.yaml <br /><br />
E2E Validation for Voltha 2.X
properties:
- cord-infra-properties:
build-days-to-keep: '{big-build-days-to-keep}'
artifact-num-to-keep: '{big-artifact-num-to-keep}'
wrappers:
- lf-infra-wrappers:
build-timeout: '{build-timeout}'
jenkins-ssh-credential: '{jenkins-ssh-credential}'
parameters:
- string:
name: buildNode
default: '{build-node}'
description: 'Name of the Jenkins node to run the job on'
- string:
name: extraHelmFlags
default: '--set onu={onus},pon={pons},{extraHelmFlags}'
description: 'Helm flags to pass to ./voltha up'
- bool:
name: withAlarms
default: '{withAlarms}'
description: "Run alarm based tests when true"
- string:
name: makeTarget
default: '{make-target}'
description: 'Makefile target to invoke during test'
- string:
name: makeFailtestTarget
default: '{make-target-failtest}'
description: 'Makefile target to invoke during failure/based test'
- string:
name: makeMultiOltTarget
default: '{make-target-multipleolt}'
description: 'Makefile target to invoke during multiple olt test'
- string:
name: makeErrortestTarget
default: '{make-target-errortest}'
description: 'Makefile target to invoke during error test'
- string:
name: makeAlarmtestTarget
default: '{make-target-alarmtest}'
description: 'Makefile target to invoke during alarm test'
- string:
name: manifestUrl
default: '{gerrit-server-url}/{voltha-test-manifest-repo}'
description: 'Repo manifest URL for code checkout'
- string:
name: branch
default: '{code-branch}'
description: 'Repo manifest branch for code checkout'
- string:
name: gerritProject
default: '{gerrit-project}'
description: 'Name of the Gerrit project'
- string:
name: gerritChangeNumber
default: ''
description: 'Changeset number in Gerrit'
- string:
name: gerritPatchsetNumber
default: ''
description: 'PatchSet number in Gerrit'
- string:
name: testRuns
default: '{test-runs}'
description: 'How many times to repeat the tests'
- string:
name: extraRobotArgs
default: '{robot-args}'
description: 'Arguments to pass to robot'
- string:
name: workFlow
default: '{work-flow}'
description: 'Workflow for testcase'
- string:
name: karafHome
default: '{karaf-home}'
description: 'Karaf home'
- string:
name: volthaSystemTestsChange
default: '{volthaSystemTestsChange}'
description: 'Download a change for gerrit in the voltha-system-tests repo, example value: "refs/changes/79/18779/13"'
- string:
name: kindVolthaChange
default: '{kindVolthaChange}'
description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1"'
- string:
name: olts
default: '{olts}'
description: 'How many BBSim instances to run'
project-type: pipeline
concurrent: true
dsl: !include-raw-escape: pipeline/{pipeline-script}
triggers:
- timed: |
TZ=America/Los_Angeles
{time-trigger}
- job-template:
id: 'voltha-patch-test'
name: 'verify_{project}_sanity-test{name-extension}'
override-branch: '$GERRIT_BRANCH'
sandbox: true
volthaSystemTestsChange: ''
kindVolthaChange: ''
description: |
<!-- Managed by Jenkins Job Builder -->
Created by {id} job-template from ci-management/jjb/voltha-e2e.yaml <br /><br />
E2E Validation for Voltha 2.X
properties:
- cord-infra-properties:
build-days-to-keep: '{build-days-to-keep}'
artifact-num-to-keep: '{artifact-num-to-keep}'
wrappers:
- lf-infra-wrappers:
build-timeout: '{build-timeout}'
jenkins-ssh-credential: '{jenkins-ssh-credential}'
parameters:
- string:
name: buildNode
default: 'ubuntu16.04-basebuild-4c-8g'
description: 'Name of the Jenkins node to run the job on'
- string:
name: branch
default: '{override-branch}'
description: 'Name of the branch to use'
- string:
name: gerritProject
default: '$GERRIT_PROJECT'
description: 'Name of the Gerrit project'
- string:
name: gerritRefspec
default: '$GERRIT_REFSPEC'
description: 'PatchSet REFSPEC in Gerrit, example value: "refs/changes/79/18779/13"'
- string:
name: extraHelmFlags
default: ''
description: 'Helm flags to pass to ./voltha up'
- string:
name: volthaSystemTestsChange
default: '{volthaSystemTestsChange}'
description: 'Download a change for gerrit in the voltha-system-tests repo, example value: "refs/changes/79/18779/13"'
- string:
name: kindVolthaChange
default: '{kindVolthaChange}'
description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1"'
project-type: pipeline
concurrent: true
dsl: !include-raw-escape: pipeline/{pipeline-script}
triggers:
- gerrit:
server-name: '{gerrit-server-name}'
dependency-jobs: '{dependency-jobs}'
silent-start: true
trigger-on:
- patchset-created-event:
exclude-drafts: true
exclude-trivial-rebase: false
exclude-no-code-change: true
- draft-published-event
- comment-added-contains-event:
comment-contains-value: '(?i)^.*recheck$'
projects:
- project-compare-type: REG_EXP
project-pattern: '^{project}$'
branches:
- branch-compare-type: REG_EXP
branch-pattern: '{all-branches-regexp}'
file-paths:
- compare-type: REG_EXP
pattern: '{all-files-regexp}'
# POD Per Patchset Pipeline Jobs
- job-template:
name: '{name}'
id: verify_physical_voltha_patchset_auto
description: |
<!-- Managed by Jenkins Job Builder -->
Automated build on POD {config-pod} using {pipeline-script} <br /><br />
Created from job-template {id} from ci-management/jjb/voltha-e2e.yaml <br />
Created by Andy Bavier, andy@opennetworking.org <br />
Copyright (c) 2019 Open Networking Foundation (ONF)
sandbox: true
pipeline-script: 'voltha-physical-build-and-tests.groovy'
default-test-args: '-i sanityORDeleteOLT -X'
properties:
- cord-infra-properties:
build-days-to-keep: '{build-days-to-keep}'
artifact-num-to-keep: '{artifact-num-to-keep}'
parameters:
- string:
name: buildNode
default: '{build-node}'
description: 'Pod management node'
- string:
name: manifestUrl
default: '{gerrit-server-url}/{voltha-test-manifest-repo}'
description: 'URL to the repo manifest'
- string:
name: branch
default: '$GERRIT_BRANCH'
description: 'Name of the branch to use'
- string:
name: gerritProject
default: '$GERRIT_PROJECT'
description: 'Name of the Gerrit project'
- string:
name: gerritChangeNumber
default: '$GERRIT_CHANGE_NUMBER'
description: 'Changeset number in Gerrit'
- string:
name: gerritPatchsetNumber
default: '$GERRIT_PATCHSET_NUMBER'
description: 'PatchSet number in Gerrit'
- string:
name: cordRepoUrl
default: '{gerrit-server-url}'
description: 'The URL of the CORD Project repository'
- string:
name: podName
default: '{config-pod}'
- string:
name: deploymentConfigFile
default: 'pod-configs/deployment-configs/{config-pod}.yaml'
description: 'Path of deployment config file'
- string:
name: kindVolthaValuesFile
default: 'pod-configs/kubernetes-configs/voltha/{config-pod}.yml'
description: 'Path of kind-voltha values override file'
- string:
name: sadisConfigFile
default: 'voltha/voltha-system-tests/tests/data/{config-pod}-sadis.json'
description: 'Path of SADIS config to load'
- string:
name: localConfigDir
default: null
description: 'If specified, config file paths are relative to this dir; otherwise $WORKSPACE'
- string:
name: configRepo
default: 'pod-configs'
description: 'A repository containing the config files, will be checked out if specified'
- string:
name: oltDebVersionMaster
default: '{oltDebVersionMaster}'
description: 'OLT Software version to install for master branch builds'
- string:
name: oltDebVersion
default: '{oltDebVersionVoltha23}'
description: 'OLT Software version to install for voltha-2.3 branch builds'
- string:
name: profile
default: '{profile}'
description: 'Technology Profile pushed to the ETCD'
- string:
name: notificationEmail
default: 'andy@opennetworking.org'
description: ''
- bool:
name: reinstallOlt
default: true
description: "Re-install OLT software"
- string:
name: manualBranch
default: '{manualBranch}'
description: "If a non-empty string, build manually as a specific branch, not with a specific patchset"
- string:
name: extraRobotArgs
default: '{default-test-args}'
description: 'Arguments to pass to robot'
project-type: pipeline
concurrent: true
dsl: !include-raw-escape: pipeline/{pipeline-script}
triggers:
- gerrit:
server-name: '{gerrit-server-name}'
dependency-jobs: '{dependency-jobs}'
silent-start: false
successful-message: "PASSED hardware test"
failure-message: "FAILED hardware test"
unstable-message: "UNSTABLE hardware test"
trigger-on:
- comment-added-event:
approval-category: 'Code-Review'
approval-value: '+2'
projects:
- project-compare-type: REG_EXP
project-pattern: '^(voltha-openolt-adapter|voltha-openonu-adapter|voltha-go)$'
branches:
- branch-compare-type: REG_EXP
branch-pattern: '{all-branches-regexp}'
- job-template:
name: '{name}'
id: verify_physical_voltha_patchset_manual
description: |
<!-- Managed by Jenkins Job Builder -->
Automated build on POD {config-pod} using {pipeline-script} <br /><br />
Created from job-template {id} from ci-management/jjb/voltha-e2e.yaml <br />
Created by Andy Bavier, andy@opennetworking.org <br />
Copyright (c) 2019 Open Networking Foundation (ONF)
sandbox: true
pipeline-script: 'voltha-physical-build-and-tests.groovy'
trigger-string: 'hardware test'
default-test-args: '-i sanityORDeleteOLT -X'
properties:
- cord-infra-properties:
build-days-to-keep: '{build-days-to-keep}'
artifact-num-to-keep: '{artifact-num-to-keep}'
parameters:
- string:
name: buildNode
default: '{build-node}'
description: 'Pod management node'
- string:
name: manifestUrl
default: '{gerrit-server-url}/{voltha-test-manifest-repo}'
description: 'URL to the repo manifest'
- string:
name: branch
default: '$GERRIT_BRANCH'
description: 'Name of the repo branch to use'
- string:
name: gerritProject
default: '$GERRIT_PROJECT'
description: 'Name of the Gerrit project'
- string:
name: gerritChangeNumber
default: '$GERRIT_CHANGE_NUMBER'
description: 'Changeset number in Gerrit'
- string:
name: gerritPatchsetNumber
default: '$GERRIT_PATCHSET_NUMBER'
description: 'PatchSet number in Gerrit'
- string:
name: cordRepoUrl
default: '{gerrit-server-url}'
description: 'The URL of the CORD Project repository'
- string:
name: podName
default: '{config-pod}'
- string:
name: deploymentConfigFile
default: 'pod-configs/deployment-configs/{config-pod}.yaml'
description: 'Path of deployment config file'
- string:
name: kindVolthaValuesFile
default: 'pod-configs/kubernetes-configs/voltha/{config-pod}.yml'
description: 'Path of kind-voltha values override file'
- string:
name: sadisConfigFile
default: 'voltha/voltha-system-tests/tests/data/{config-pod}-sadis.json'
description: 'Path of SADIS config to load'
- string:
name: localConfigDir
default: null
description: 'If specified, config file paths are relative to this dir; otherwise $WORKSPACE'
- string:
name: configRepo
default: 'pod-configs'
description: 'A repository containing the config files, will be checked out if specified'
- string:
name: oltDebVersionMaster
default: '{oltDebVersionMaster}'
description: 'OLT Software version to install for master branch builds'
- string:
name: oltDebVersionVoltha23
default: '{oltDebVersionVoltha23}'
description: 'OLT Software version to install for voltha-2.3 branch builds'
- string:
name: profile
default: '{profile}'
description: 'Technology Profile pushed to the ETCD'
- string:
name: notificationEmail
default: 'andy@opennetworking.org'
description: ''
- bool:
name: reinstallOlt
default: true
description: "Re-install OLT software"
- string:
name: manualBranch
default: '{manualBranch}'
description: "If a non-empty string, build manually on a specific branch, not with a specific patchset"
- string:
name: extraRobotArgs
default: '{default-test-args}'
description: 'Arguments to pass to robot'
project-type: pipeline
concurrent: true
dsl: !include-raw-escape: pipeline/{pipeline-script}
triggers:
- gerrit:
server-name: '{gerrit-server-name}'
dependency-jobs: '{dependency-jobs}'
silent-start: false
successful-message: "PASSED {trigger-string}"
failure-message: "FAILED {trigger-string}"
unstable-message: "UNSTABLE {trigger-string}"
trigger-on:
- comment-added-contains-event:
comment-contains-value: '^{trigger-string}$'
- comment-added-contains-event:
comment-contains-value: '^{trigger-string} with delay$'
projects:
- project-compare-type: REG_EXP
project-pattern: '^(voltha-go|voltha-openolt-adapter|voltha-openonu-adapter|voltha-api-server|voltha-system-tests|ofagent-py|ofagent-go|voltha-onos|kind-voltha|voltha-helm-charts)$'
branches:
- branch-compare-type: REG_EXP
branch-pattern: '{all-branches-regexp}'
- job-template:
name: '{name}'
id: build_physical_voltha_manual
description: |
<!-- Managed by Jenkins Job Builder -->
Automated build on POD {config-pod} using {pipeline-script} <br /><br />
Created from job-template {id} from ci-management/jjb/voltha-e2e.yaml <br />
Created by Andy Bavier, andy@opennetworking.org <br />
Copyright (c) 2019 Open Networking Foundation (ONF)
sandbox: true
pipeline-script: 'voltha-physical-build-and-tests.groovy'
properties:
- cord-infra-properties:
build-days-to-keep: '{build-days-to-keep}'
artifact-num-to-keep: '{artifact-num-to-keep}'
parameters:
- string:
name: buildNode
default: '{build-node}'
description: 'Pod management node'
- string:
name: manifestUrl
default: '{gerrit-server-url}/{voltha-test-manifest-repo}'
description: 'URL to the repo manifest'
- string:
name: branch
default: "$GERRIT_BRANCH"
description: 'Name of the repo manifest branch to use'
- string:
name: gerritProject
default: '$GERRIT_PROJECT'
description: 'Name of the Gerrit project'
- string:
name: gerritChangeNumber
default: '$GERRIT_CHANGE_NUMBER'
description: 'Changeset number in Gerrit'
- string:
name: gerritPatchsetNumber
default: '$GERRIT_PATCHSET_NUMBER'
description: 'PatchSet number in Gerrit'
- string:
name: cordRepoUrl
default: '{gerrit-server-url}'
description: 'The URL of the CORD Project repository'
- string:
name: podName
default: '{config-pod}'
- string:
name: deploymentConfigFile
default: 'pod-configs/deployment-configs/{config-pod}.yaml'
description: 'Path of deployment config file'
- string:
name: kindVolthaValuesFile
default: 'pod-configs/kubernetes-configs/voltha/{config-pod}.yml'
description: 'Path of kind-voltha values override file'
- string:
name: sadisConfigFile
default: 'voltha/voltha-system-tests/tests/data/{config-pod}-sadis.json'
description: 'Path of SADIS config to load'
- string:
name: localConfigDir
default: null
description: 'If specified, config file paths are relative to this dir; otherwise $WORKSPACE'
- string:
name: configRepo
default: 'pod-configs'
description: 'A repository containing the config files, will be checked out if specified'
- string:
name: oltDebVersionMaster
default: '{oltDebVersionMaster}'
description: 'OLT Software version to install for master branch builds'
- string:
name: oltDebVersionVoltha23
default: '{oltDebVersionVoltha23}'
description: 'OLT Software version to install for voltha-2.3 branch builds'
- string:
name: profile
default: '{profile}'
description: 'Technology Profile pushed to the ETCD'
- string:
name: notificationEmail
default: 'andy@opennetworking.org'
description: ''
- bool:
name: reinstallOlt
default: false
description: "Re-install OLT software"
- string:
name: manualBranch
default: '{manualBranch}'
description: "If a non-empty string, build manually on a specific branch, not with a specific patchset"
- string:
name: extraRobotArgs
default: '-e bbsim -X'
description: 'Arguments to pass to robot'
project-type: pipeline
concurrent: true
dsl: !include-raw-escape: pipeline/{pipeline-script}