Relationships
#2506 Docs: explain how swamp treats other services' template syntax in the CEL expressions reference
Opened by skunk-ape · 9/24/2026
The CEL expressions reference (content/manual/reference/cel-expressions.md) never says what swamp does with template syntax that belongs to another service. Two fixes change that behaviour and should be documented together:
- swamp-club#2424 (swamp PR #2610):
{{ ... }}and${ ... }text (Datadog{{host.name}}, shell${HOME}) is passed to the method unchanged. model validate warns with Template syntax passed through, and fails only when the text reads as a swamp expression with a dropped dollar or brace ({{self.name}}). Model types can declare a field with.meta({ foreignTemplate: true })to silence the check. - swamp-club#2491 (swamp PR #2613):
${{ ... }}text written for another templating system, such as GitHub Actions${{ github.sha }}, is passed through unchanged too, including from global arguments, and joins the same warning.
Suggested content, as a new section in the CEL expressions reference (Other services' template syntax), with a pointer from model-definitions.md:
- Only
${{ ... }}is swamp's syntax, and even then only when the expression reads a swamp namespace: model, self, inputs, env, vault, data, file, workers, and inside workflows run, steps, workflow, webhook. - What is passed through unchanged: text in other forms, and
${{ ... }}text whose names are not swamp namespaces. What validate reports: the Template syntax passed through warning, and which text still fails (a dropped dollar on a swamp root, a missing model. prefix when the first name is one of the repo's models, text CEL cannot parse). - The ambiguous case: vendor text whose first name collides with a swamp namespace (GitHub
${{ inputs.version }}or${{ steps.x }}, Datadog{{env.name}}, Argo{{workflow.name}}, Terraform${[HOST-1]}) is treated as swamp's. Show the workarounds: CEL string concatenation, the foreignTemplate field declaration for extension authors, and note the planned literal() function (swamp-club#2492). - A note that a mistyped namespace (
${{ modle.x }},${{ input.region }}) is now a warning and passes through at run time, so read validate warnings.
Source of truth: design/enablers/expressions.md in the swamp repo (sections on foreign CEL and Other Services' Template Syntax).
Closed
No activity in this phase yet.
stack72 commented 9/28/2026, 11:32:46 PM
Documented in https://github.com/swamp-club/swamp-club/pull/1259. New section 'Other Services' Template Syntax' in reference/cel-expressions.md covering what passes through, what fails, colliding names and their workarounds, the foreignTemplate field declaration, and literal() (#2492). model-definitions.md points to it. The validate output shown was captured from a sandbox run. One difference from this issue: ${{ inputs.version }} in a definition with no declared version input passes through without a warning, so the page follows the design doc there.
Sign in to post a ripple.