Skip to main content

🩺 Shift-left validation

Everything defined with DevX is strongly typed. Validate configurations while writing.

➜ devx project validate
👌 Looks good

Missing required field​

stack: v1.#Stack & {
components: {
cowsay: {
traits.#Workload
containers: default: {
command: ["cowsay"]
args: ["Hello DevX!"]
}
}
}
}
➜ devx project validate
Error: Invalid Components
stack.components.cowsay.containers.default.image is a required field

Wrong field type​

stack: v1.#Stack & {
components: {
cowsay: {
traits.#Workload
containers: default: {
image: 123
command: ["cowsay"]
args: ["Hello DevX!"]
}
}
}
}
➜ devx project validate
Error: stack.components.cowsay.containers.default.image: conflicting values string and 123 (mismatched types string and int):
/examples/simple/cue.mod/pkg/stakpak.dev/devx/v1/traits/traits.cue:9:9
/examples/simple/stack.cue:14:12

Conflicting configurations​

stack: v1.#Stack & {
components: {
cowsay: {
traits.#Workload
containers: default: {
image: "docker/whalesay"
command: ["cowsay"]
args: ["Hello DevX!"]
}
}
}
}
stack: components: cowsay: containers: default: image: "docker/whalesay2"
➜ devx project validate
Error: stack.components.cowsay.containers.default.image: conflicting values "docker/whalesay2" and "docker/whalesay":
/examples/simple/stack.cue:14:12
/examples/simple/stack.cue:21:56

Strict mode​

Enabling strict mode during build or validation allow you to make sure that all traits will be respected. Every trait is satisfied by at least one trasformer in all environments.

➜ devx project validate -S
Error: trait is not fulfilled by any flow:
cowsay/#Helm in prod