jsonnet
jsonnet copied to clipboard
Thoughts on folded text block?
This is cross-posted at google/go-jsonnet.
YAML has folded-style multi-line strings, which means that new-lines are replaced with spaces to end up with a single-line string. I find this convenient for splitting long shell commands over multiple lines for readability. Does this seem like something potentially good to implement?
I know that jsonnet has the |||
text block but this does not replace newlines, behaving like a "literal" instead of "folded" YAML multi-line string. Syntax for a "folded" text block in jsonnet could be an extension of the text block syntax: e.g. |||>
.
For example and context, I'm looking at using jsonnet to produce YAML Gitlab CI config files. By hand a simplified version looks like this:
build:
stage: build
only:
- main
image: my.kaniko.image
script:
- init-kaniko
- >-
/kaniko/executor
--context .
--dockerfile Dockerfile
--destination $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
--destination $CI_REGISTRY_IMAGE:latest
To reproduce this in jsonnet I need to use a function to replace the newlines:
local folded_text_block(text_block) = std.strReplace(text_block, '\n', ' ');
{
build: {
stage: 'build',
only: ['main'],
image: 'my.kaniko.image',
script: [
'init-kaniko',
folded_text_block(
|||
/kaniko/executor
--context .
--dockerfile Dockerfile
--destination $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
--destination $CI_REGISTRY_IMAGE:latest
|||
),
],
},
}
Whereas with a builtin folded text block (using my made-up syntax from above) I could do:
{
build: {
stage: 'build',
only: ['main'],
image: 'my.kaniko.image',
script: [
'init-kaniko',
|||>
/kaniko/executor
--context .
--dockerfile Dockerfile
--destination $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
--destination $CI_REGISTRY_IMAGE:latest
|||,
],
},
}
The "long line" in the above example is also pretty tame and could be squished into a single line. Some commands are far longer and simply must be split over multiple lines for readability, and I think a "folded" text block could make these easy handle.
This is a small deal in the scheme of things. I get a lot of joy from the flexibility of YAML's multi-line strings and would love to see some of it in jsonnet.
Are you aware of |||
text blocks? See the tutorial: https://jsonnet.org/learning/tutorial.html.
Hi @sbarzowski I did see the |||
text block, but I did not see a way to replace the newlines with it. I've done this with a small function, but I like the terseness and flow of the YAML folded-style multi-line string for long shell commands.
I've updated the question to better describe what I'm talking about related to the current |||
text block.
Ah, so you want the newlines replaced with spaces. I see how it can be quite useful sometimes.