rune cast
Aliases: apply.
cast is the universal “apply this spec” command. It accepts:
- A single YAML file
- A directory of YAML files
- A glob (
services/*.yaml) - A runeset directory or
.runeset.tgzarchive - A remote URL or git ref
rune cast my-service.yamlrune cast my-service.yaml --namespace=productionrune cast my-service.yaml --tag=stablerune cast my-directory/ --recursiverune cast services/*.yamlrune cast my-service.yaml --forcerune cast github.com/org/repo/path@ref --create-namespacerune cast https://example.com/runeset.tgz --release=my-releaserune cast ./runeset.tgz --release=my-releaserune cast ./runeset --render --set=key=valuerune cast ./runeset --render --values=values.yaml| Flag | Default | Notes |
|---|---|---|
-n, --namespace | from context | Target namespace. |
--create-namespace | false | Create the namespace if it doesn’t exist. |
--detach | false | Return immediately; don’t wait for rollout. |
--dry-run | false | Validate without applying. |
--force | false | Force generation increment even with no diff. |
-r, --recursive | false | Recurse into directories. |
--tag <name> | — | Tag this deployment for later reference (rollback aid). |
--render | false | Runesets only — print rendered YAML and exit. |
--set k=v | — | Runesets only — override a value (repeatable). |
--values <file> | — | Runesets only — extra values file (repeatable). |
--release <name> | — | Runesets only — install identity. |
--timeout <dur> | 5m | Rollout wait timeout. |
Behavior
Section titled “Behavior”- Idempotent. Re-applying the same spec is a no-op (unless
--force). - Generation bumps on every accepted change. The reconciler keys off generation.
- Multi-document YAML is supported — separate documents with
---. - Mixed resource files (services + secrets + configmaps in one file) are fine.
- Failures surface inline. Without
--detach,castwaits for each service to become ready. If the reconciler reportsFailedit stops waiting immediately, prints a short reason + the one-sentence cause- a
rune get service <name>hint, and exits non-zero. No second command needed to find out why a deploy didn’t take.
- a
✗ ImageUnreachable pull access denied for ghcr.io/acme/api, repository does not exist or may require 'docker login'
image: ghcr.io/acme/api:1.4.2 service: prod/api
rune get service api -n prodCommon patterns
Section titled “Common patterns”# Validate firstrune lint manifests/ --recursive
# Apply everythingrune cast manifests/ --recursive
# Diff a runeset before installingrune cast ./my-app --render --values=prod.yaml | diff - last-rendered.yaml
# Dry-run a deploy in CIrune cast service.yaml --dry-run