JSON
| source | condition | target |
|---|---|---|
✔ | ✔ | ✔ |
Description
The json resource reads and writes a single value in a JSON document, addressed by a Dasel selector.
- source
Reads one value out of one file and returns it. Only a single file is accepted (
fileswith more than one entry fails withsource only supports one file).- condition
Reads the same value and compares it to
value, or to the source output whenvalueis unset. Withfiles, every file must match for the condition to pass.- target
Writes
value(or the source output) at the given key. Files already holding that value are reported as up to date and left untouched, so a target that changes nothing does not create a commit.
Parameters
| Name | Type | Description | Required |
|---|---|---|---|
| engine | string | default:
accepted values:
| |
| file | string | remark:
| |
| files | array | remark:
| |
| key | string | key defines the Jsonpath key to manipulate. compatible:
remark: * key is a simpler version of Jsonpath accepts keys. * key accepts Dasel query, more information on https://github.com/tomwright/dasel
example: * key: $.name * key: name * file: https://nodejs.org/dist/index.json key: .(lts!=false).version | |
| query | string | query defines the Jsonpath query to manipulate. It accepts advanced Dasel v1 query this parameter is now deprecated in Dasel v2 and replaced by the parameter “key”. compatible: * source * condition * target example: * query: .name * query: “.[*].tag_name” remark: * query accepts Dasel query, more information on https://github.com/tomwright/dasel | |
| value | string | value defines the Jsonpath key value to manipulate. Default to source output. compatible:
default: when used for a condition or a target, the default value is the output of the source. | |
| versionfilter | object | ||
| kind | string | specifies the version kind such as semver, regex, or latest | |
| pattern | string | specifies the version pattern according the version kind for semver, it is a semver constraint for regex, it is a regex pattern for time, it is a date format | |
| regex | string | specifies the regex pattern, used for regex/semver and regex/time. Output of the first capture group will be used. | |
| replaceall | object | replaceAll applies a regex replacement to version strings before filtering. This is useful for transforming versions (e.g., curl-8_15_0 to curl-8.15.0) before regex extraction. | |
| strict | boolean | strict enforce strict versioning rule. Only used for semantic versioning at this time |
file or files is mandatory, as is key or query; missing either aborts the run with wrong spec content. The two are mutually exclusive (setting both fails with parameter "file" and "files" are mutually exclusive).
valueDefaults to the source output. Setting it explicitly makes the condition or target independent of any source.
versionfilterOnly meaningful for a source, and only when the selector returns several values - it picks one out of the list. See the "Version Filtering" page.
Note | multiple is deprecated and hidden from the table above. It still works, logging a warning, and a key used together with it is silently rewritten into query. Use a selector that returns several values instead. |
Engines
engine selects which version of Dasel parses the file. It matters more than it looks: the selector syntax is not portable between versions.
| Value | Behaviour |
|---|---|
| Default when |
| Deprecated - every run logs a warning. |
| Current engine. |
| Alias resolving to the latest engine, currently |
The leading dot is the trap when migrating:
| Selector | dasel/v1 | dasel/v2 | dasel/v3 |
|---|---|---|---|
| ✔ | ✔ | ✗ parse error |
| ✔ | ✔ | ✔ |
On dasel/v3 a leading dot fails with error parsing selector: failed to parse: unexpected token 29 "." at position 0. Multi-value selectors differ too (.deps.[*].version on dasel/v1 is written .deps.all().version on dasel/v2).
Warning |
On |
Remote files
file accepts https://, http:// and file:// schemes for a source and a condition, which is how the example below reads the Node.js release index straight from nodejs.org.
A target cannot write to a URL, and refuses rather than silently skipping:
URL scheme is not supported for Json target: "https://nodejs.org/dist/index.json"Examples
Retrieves a value from a JSON file
# updatecli.yaml
name: Basic Json Example
scms:
default:
kind: git
spec:
url: https://github.com/updatecli/updatecli.git
sources:
local:
name: Get value from json
kind: json
scmid: default
spec:
file: pkg/plugins/resources/json/testdata/data.json
key: firstName
http:
name: Get value from json
kind: json
spec:
file: https://www.updatecli.io/schema/latest/config.json
key: $id
conditions:
local:
name: Test value from json
kind: json
sourceid: local
scmid: default
spec:
file: pkg/plugins/resources/json/testdata/data.json
key: firstName
http:
name: Test value from json
kind: json
disablesourceinput: true
spec:
file: https://www.updatecli.io/schema/latest/config.json
key: $schema
value: http://json-schema.org/draft-04/schema
targets:
local:
name: Test value from json
kind: json
sourceid: local
scmid: default
spec:
file: pkg/plugins/resources/json/testdata/data.json
key: firstName
value: John
Uses a path to find a value in a JSON file
# jenkins-old-versions.yaml
# We're working with https://updates.jenkins.io/tiers.json
# {"stableCores":["2.346.3","2.361.1", ...,"2.414.2"],"weeklyCores":["2.364","2.371",...,"2.425"]}
# This example finds the oldest weekly and stable supported Jenkins versions (first in the list)
# It also finds the latest weekly and stable Jenkins versions (last in the list)
name: Find oldest supported Jenkins versions
scms:
default:
kind: github
spec:
user: "{{ .github.user }}"
email: "{{ .github.email }}"
owner: "{{ .github.owner }}"
repository: "{{ .github.repository }}"
token: "{{ requiredEnv .github.token }}"
username: "{{ .github.username }}"
branch: "{{ .github.branch }}"
sources:
JenkinsOldestSupportedWeekly:
name: Get the oldest supported Jenkins weekly version
kind: json
scmid: default
spec:
file: https://updates.jenkins.io/tiers.json
key: "weeklyCores.[0]"
JenkinsOldestSupportedStable:
name: Get the oldest supported Jenkins stable version
kind: json
scmid: default
spec:
file: https://updates.jenkins.io/tiers.json
# `key` targets only one value, the first one of the list in this case
key: "stableCores.[0]"
JenkinsNewestWeeklyVersion:
name: Get the newest supported Jenkins weekly version
kind: json
spec:
file: https://updates.jenkins.io/tiers.json
# Here we use `query` to target all the values in the list
query: "weeklyCores.[*]"
# We use `versionfilter` to filter the list of versions
# Combined with `semver`, we can target the latest version that follows the semver pattern
versionfilter:
kind: semver
JenkinsNewestStableVersion:
name: Get the newest supported Jenkins stable version
kind: json
spec:
file: https://updates.jenkins.io/tiers.json
query: "stableCores.[*]"
versionfilter:
kind: semver
conditions:
# Test that the oldest Jenkins supported weekly version exists
jenkinsOldestSupportedWeeklyVersion:
kind: jenkins
spec:
release: weekly
sourceid: JenkinsOldestSupportedWeekly
# Test that the oldest Jenkins supported stable version exists
jenkinsOldestSupportedStableVersion:
kind: jenkins
sourceid: JenkinsOldestSupportedStable
# Test that the newest Jenkins supported weekly version exists
jenkinsNewestSupportedWeeklyVersion:
kind: jenkins
spec:
release: weekly
sourceid: JenkinsNewestWeeklyVersion
# Test that the newest Jenkins supported stable version exists
jenkinsNewestSupportedStableVersion:
kind: jenkins
sourceid: JenkinsNewestStableVersion
targets:
setJenkinsOldestSupportedWeekly:
kind: file
name: "Bump Jenkins oldest weekly supported version in the \"Choosing a version\" page"
sourceid: JenkinsOldestSupportedWeekly
spec:
file: content/doc/developer/plugin-development/choosing-jenkins-baseline.adoc
matchpattern: >-
(.*Do not use versions no longer supported by the update center.*older than )(.*)( for weekly releases.*for LTS releases.*)
replacepattern: >-
${1}{{ source "JenkinsOldestSupportedWeekly" }}${3}
scmid: default
setJenkinsOldestSupportedStable:
kind: file
name: "Bump Jenkins oldest stable supported version in the \"Choosing a version\" page"
sourceid: JenkinsOldestSupportedStable
spec:
file: content/doc/developer/plugin-development/choosing-jenkins-baseline.adoc
matchpattern: >-
(.*Do not use versions no longer supported by the update center.* weekly releases, and )(.*)( for LTS releases.*)
replacepattern: >-
${1}{{ source "JenkinsOldestSupportedStable" }}${3}
scmid: default
actions:
default:
kind: github/pullrequest
scmid: default
title: Bump Jenkins LTS and weekly versions in various parts of the documentation
spec:
labels:
- dependencies
- chore