Skip to content

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.tgz archive
  • A remote URL or git ref
Terminal window
rune cast my-service.yaml
rune cast my-service.yaml --namespace=production
rune cast my-service.yaml --tag=stable
rune cast my-directory/ --recursive
rune cast services/*.yaml
rune cast my-service.yaml --force
rune cast github.com/org/repo/path@ref --create-namespace
rune cast https://example.com/runeset.tgz --release=my-release
rune cast ./runeset.tgz --release=my-release
rune cast ./runeset --render --set=key=value
rune cast ./runeset --render --values=values.yaml
FlagDefaultNotes
-n, --namespacefrom contextTarget namespace.
--create-namespacefalseCreate the namespace if it doesn’t exist.
--detachfalseReturn immediately; don’t wait for rollout.
--dry-runfalseValidate without applying.
--forcefalseForce generation increment even with no diff.
-r, --recursivefalseRecurse into directories.
--tag <name>Tag this deployment for later reference (rollback aid).
--renderfalseRunesets only — print rendered YAML and exit.
--set k=vRunesets only — override a value (repeatable).
--values <file>Runesets only — extra values file (repeatable).
--release <name>Runesets only — install identity.
--timeout <dur>5mRollout wait timeout.
  • 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, cast waits for each service to become ready. If the reconciler reports Failed it 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.
✗ 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 prod
Terminal window
# Validate first
rune lint manifests/ --recursive
# Apply everything
rune cast manifests/ --recursive
# Diff a runeset before installing
rune cast ./my-app --render --values=prod.yaml | diff - last-rendered.yaml
# Dry-run a deploy in CI
rune cast service.yaml --dry-run