keel.yaml itself.
Value validation
string
An RE2 regular expression. It is anchored — the whole value must match —
so write
[a-z]+, not ^[a-z]+$. Allowed on every type except boolean
and select.string
The error shown when the pattern does not match, and the format hint
rendered under the field and in the manifest. Without it the error reads
must match pattern ….
number
Inclusive lower bound.
number type only.number
Inclusive upper bound.
number type only. Must not be below min.integer
Minimum length in bytes.
text, multiline, email, url only; must be
at least 0.integer
Maximum length in bytes. Same types; must not be below
min_length.default
must itself pass the variable’s validation.
Where it runs, and what you see
- Under the field, before typing: the constraints as a hint, so the format is known up front.
- On save: every field is validated; valid fields are saved immediately and invalid ones are reported inline with the submitted text preserved.
- Before a deploy: the merged configuration and deploy-time values are checked; problems block the run and are listed on the target page (or inside the modal for deploy-time variables).
- In
keel deploy: problems are printed and the command exits 1.
Messages
Configuration rules
keel validate, Keel Dev on every page load, and Keel Cloud on every sync
apply these rules and report every violation at once with its path.
Document
versionis present and equals1.- Only
versionanddeploymentsat the top level; no duplicate keys. - At least one deployment.
- Name is lowercase DNS-label style, at most 63 characters, unique.
environment.dockerfileis present and a relative path inside the repository;environment.contextlikewise.- At least one step; every step has a non-empty
nameandrun. - Only the known keys:
description,long_description,groups,environment,steps,variables,outputs. - Every defined group is referenced by at least one variable.
- Name matches
[A-Z][A-Z0-9_]*, does not start withKEEL_, unique. typeis one of the seven types.selecthas at least one option; other types have none. Option values are non-empty and unique.- Secrets have no
defaultand are notbooleanorselect. patterncompiles;min≤max;min_length≥ 0 and ≤max_length.min/maxonly onnumber;min_length/max_lengthonly on text-like types; nopatternonbooleanorselect.flexis positive and accompanied byrow.- A
defaultsatisfies the variable’s own validation.
when)
- Exactly one operator;
varpresent. varnames a declared variable other than the variable itself.- A configuration variable does not depend on a deploy-time variable.
gt/gte/lt/lteoperands are numeric;inhas at least one value.eq/inoperands against aselectare among its options.- No dependency cycles.
- Name matches variable naming rules and does not start with
KEEL_; unique. - An output sharing a secret variable’s name declares
secret: true. - Only
label,description,secret.