Skip to main content
The deploy workflow follows a validate-plan-deploy pattern similar to Terraform. Preview changes before applying them.

Lifecycle

1. Validate

Check YAML syntax and schema validity offline — no API calls are made:
Validates:
  • YAML syntax
  • Required fields for each resource type
  • Type-specific config (e.g., url required for HTTP monitors)
  • Cross-references (e.g., alert channel names exist in config) — reported as warnings; pass --strict to fail on them
  • Environment variable resolution — pass --skip-env for a syntax-only check without resolving ${VAR} references

2. Plan

Preview what would change without applying anything:
The plan compares your YAML against the current API state and shows resources to create, update, and delete (if pruning is enabled). No deploy lock is acquired and no writes are made.

3. Deploy

Apply the configuration:
The deploy:
  1. Loads and validates the YAML
  2. Fetches current state from the API
  3. Computes the diff (same as plan)
  4. Prompts for confirmation (unless --yes)
  5. Acquires a deploy lock (unless --no-lock)
  6. Applies changes in dependency order
  7. Releases the deploy lock and updates .devhelm/state.json

Non-interactive mode

For CI pipelines, always pass --yes to skip the confirmation prompt:

Dry-run with exit codes

Combine --dry-run and --detailed-exitcode for CI gating:

JSON output

Get structured output for programmatic consumption:

Pruning

By default, deploy only creates and updates resources. Resources not in your YAML are left untouched.
--prune-all removes resources created outside config-as-code. Review the plan carefully before using it.

Multi-file deploys

Split config across files for organization:
Or point to a directory:
All *.yml and *.yaml files in the directory are loaded in sorted order and their sections concatenated. Resource names must be unique across all files — duplicates are a validation error.

Next steps

Drift and locking

How drift detection and deploy locks work.

CI/CD patterns

Automate the deploy workflow in CI.