Workflows
The workflows
section lists CI/CD workflows.
A workflow helps you organize tasks related to a certain CI/CD stage into a logical sequence.
For example, a single workflow may run for builds, tests, linting, code coverage verification, etc. All these steps will be different tasks as part of such a workflow. Then, you may have another workflow to generate documentation and deploy the new version to production.
All workflows are run concurrently.
Supported properties:
-
tasks
: List of tasks that are part of the workflow. -
settings
: Settings valid for the entire workflow. -
env
: Environment variables available to all cubes within all tasks of a specific workflow. For more information, see Example of a workflow with secrets and variables, including predefined ones. -
runs_on
: Tags of the worker the workflow tasks will run on.
settings
The settings
section specifies the settings that are valid for the entire workflow, for example:
workflows:
my-workflow:
settings:
max_cube_duration: 20s
retry: 2
runs_on
The runs_on
field gives a list of worker tags on which the workflow tasks will run. Supported tag types:
-
Runtime tag: Worker type. The possible values are:
compute
: Cloud worker. This is a default value.serverless
: Serverless worker. See these examples.self-hosted
: Self-hosted worker.
Warning
The
runs_on
field cannot contain more than one runtime tag. If no runtime tag is specified,compute
is used by default. -
Note
A tag's string values ​can contain a limited range of characters: Latin letters (
a-zA-Z
),-
,.
, and_
.For a self-hosted worker, parameters automatically include the
self-hosted
tag. You need not additionally add it to thetags
field inconfig.yaml
.Copied
Example of a workflow with two tasks specified in different formats
One workflow task is within the workflows
section, the other is outside it. my-task
is an example of using cube dependencies; for more info, see Cubes.
tasks:
- name: another-task
cubes:
- name: D
script:
- echo It's another task.
workflows:
my-workflow:
tasks:
- name: my-task
cubes:
- name: A
script:
- touch test.txt
- name: B
needs: ['-']
script:
- rm -f test.txt
- name: C
needs: ['A', 'B']
script:
- ls
- another-task
...
Example of two different workflows run depending on the event type
on:
pull_request:
- workflows: workflow-for-pr
filter:
source_branches: ["**", "!test**"]
target_branches: "main"
push:
- workflows: workflow-for-push
filter:
branches: ["main"]
workflows:
workflow-for-pr:
tasks:
- name: sample-task-1
cubes:
- name: sample-cube1
image: docker.io/library/node
script:
- echo Hello, world!
workflow-for-push:
tasks:
- name: sample-task-2
cubes:
- name: sample-cube2
script:
- echo Test, and deploy your project.
Example of a workflow with secrets and variables, including predefined ones
workflows:
my-workflow:
# Here you define variables that will be available in all cubes
# of all my-workflow tasks
env:
WORKFLOW_VAR: workflow-var
tasks:
- name: my-task
# Here you define variables that will be available in all cubes
# within my-task
env:
TASK_ENV_VAR: This variable is available in all cubes of this task.
# Multi-line variable
MULTILINE_VAR: |
multi-var
multi-var
this is my multi-var
cubes:
- name: my-cube-1
# Here you define variables that will only be available
# within my-cube-1
env:
CUBE_ENV_VAR: This variable is available only in cube my-cube-1.
# Variable with a value from a secret
SECRET_VAR: ${{ secrets.<secret_name> }}
script:
- echo "$TASK_ENV_VAR"
- echo "$MULTILINE_VAR"
- echo "$CUBE_ENV_VAR"
- echo "$SECRET_VAR"
- echo "$WORKFLOW_VAR"
- name: my-cube-2
# Here you define variables that will only be available
# within my-cube-2
env:
CUBE_ENV_VAR: This variable is available only in cube my-cube-2.
script:
- echo "$TASK_ENV_VAR"
- echo "$CUBE_ENV_VAR"
# Using a predefined variable
- echo "$SOURCECRAFT_TASK"
- echo "$WORKFLOW_VAR"
- name: my-task-2
cubes:
- name: my-cube-3
script:
- echo "$WORKFLOW_VAR"
See also
- Trigger events (on)
- Tasks
- Continuous integration and continuous deployment in SourceCraft
- Configuring CI/CD in a SourceCraft repository