Source
Description
The "source" stage retrieves information from a third "resource" like a file, or an API and then uses that information in later stages.
A source is the only stage that never modifies anything: it just reads a value, optionally reshapes it with transformers, and hands it over to the conditions and targets of the manifest.
Most sources return a list of candidate versions and pick one according to their versionfilter.
See version filter for the available strategies.
Tip | Within a single Updatecli run, sources sharing the same kind, spec, and resolved repository are executed only once, and the result is reused. Naming them differently, or attaching different transformers, does not trigger a second call (which keeps API rate limits under control when many pipelines track the same dependency). |
Parameters
| Name | Type | Description | Required |
|---|---|---|---|
| dependson | array | “dependson” allows to specify the order of execution of resources. It accepts a list of rules like “(resourceType#)resourceId(:booleanOperator)”. The resourceType is optional and can be one of “condition”, “source” or “target” By default the resourceType is the current resource type The resourceId is the name of the resource to depend on The booleanOperator is optional and can be “AND” or “OR” examples: dependson: * condition#myCondition:and * source#mySource remarks:
| |
| kind | string | kind specifies the sources resource kind | |
| name | string | name specifies the resource name | |
| scmid | string | scmid specifies the scm configuration key associated to the current resource | |
| spec | object | spec specifies parameters for a specific sources kind | |
| transformers | array | transformers defines how the default input value need to be transformed | |
| addprefix | string | AddPrefix adds a prefix to the transformer input value | |
| addsuffix | string | AddSuffix adds a suffix to the transformer input value | |
| find | string | Find searches for a specific value if it exists and return false if it doesn’t | |
| findsubmatch | object | Find searches for a specific value if it exists then return the value using regular expression | [pattern] |
| jsonmatch | object | [key] | |
| quote | boolean | Quote add quote around the value | |
| replacer | object | Replacer specifies what value needs to be changed and how | [from to] |
| replacers | array | Replacers specifies a list of replacer instruction | |
| semverinc | string | SemvVerInc specifies a comma separated list semantic versioning component that needs to be upgraded. | |
| trimprefix | string | TrimPrefix removes a prefix to the transformer input value | |
| trimsuffix | string | TrimSuffix removes the suffix from the transformer input value | |
| unquote | boolean | Unquote remove quotes around the value |
Example
Transform source output
sources:
latestVersion:
name: Get latest Venom release
kind: githubrelease
spec:
owner: ovh
repository: venom
# Value from environment variable '$UPDATECLI_GITHUB_TOKEN'
token: '{{ requiredEnv "UPDATECLI_GITHUB_TOKEN" }}'
versionfilter:
kind: semver
transformers:
- trimprefix: "v"The ovh/venom releases are tagged like v1.2.0, while the value we want to
write in a target is 1.2.0.
The trimprefix transformer removes the leading v, so the output of this source becomes 1.2.0.
Combine multiple sources
In Updatecli, sources define values (like version numbers) to use in your update logic.
You can combine outputs from multiple sources in a target, a condition, or even another source by using Go templating, like this:
sources:
appVersion:
kind: githubrelease
spec:
owner: myorg
repository: myapp
chartVersion:
kind: helmchart
spec:
name: mychart
targets:
updateChart:
name: "Update Helm chart with app and chart versions"
kind: file
disablesourceinput: true
spec:
file: charts/myapp/Chart.yaml
matchpattern: "version: .*"
replacepattern: 'version: {{ source "chartVersion" }}'Now, if you wanted to use both versions in one target, for example in a file or title, you can do something like this:
replacepattern: 'appVersion: {{ source "appVersion" }}, chartVersion: {{ source "chartVersion" }}'Here are a few important concepts to understand:
By default any condition or target inherites a source output, so we want to disable that behavior by setting disablesourceinput: true.
Combining multiple sources output is useful when:
Another resource needs information from more than one source, like updating multiple versions in the same file or message.
You want to compose a more informative or specific change, like:
image: 'myapp:{{ source "appVersion" }}-{{ source "buildNumber" }}'PR titles like:
"chore: 'bump app to {{ source "appVersion" }} and chart to {{ source "chartVersion" }}"'