Lifecycle
1. Validate
Check YAML syntax and schema validity offline — no API calls are made:- YAML syntax
- Required fields for each resource type
- Type-specific config (e.g.,
urlrequired for HTTP monitors) - Cross-references (e.g., alert channel names exist in config) — reported as warnings; pass
--strictto fail on them - Environment variable resolution — pass
--skip-envfor a syntax-only check without resolving${VAR}references
2. Plan
Preview what would change without applying anything:3. Deploy
Apply the configuration:- Loads and validates the YAML
- Fetches current state from the API
- Computes the diff (same as plan)
- Prompts for confirmation (unless
--yes) - Acquires a deploy lock (unless
--no-lock) - Applies changes in dependency order
- 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.Multi-file deploys
Split config across files for organization:*.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.