Must be v1
Workflow Validation
Overview
Hyve validates workflows before execution to catch errors early and provide clear feedback. Validation checks YAML syntax, required fields, tool availability, secret presence, and more.
YAML Validation
Verify syntax and structure
Tool Checks
Ensure required tools are installed
Secret Validation
Verify secrets are available
Early Errors
Catch problems before execution
Validation Phases
Hyve performs validation in multiple phases:
1. YAML Syntax
Checks that the workflow file is valid YAML
[ERROR] Invalid YAML syntax in workflow 'deploy-app'[ERROR] Line 10: mapping values are not allowed here2. Schema Validation
Verifies required fields and structure
[ERROR] Workflow validation failed:- Missing required field: metadata.name- Missing required field: spec.jobs3. Requirements Validation
Checks tools and secrets are available
[INFO] Validating workflow requirements...[ERROR] Required tool 'kubectl' not found in PATH[ERROR] Required secret 'DOCKER_TOKEN' not found4. Runtime Validation
Validates during execution (variable substitution, commands)
[INFO] Executing workflow 'deploy-app'[ERROR] Command failed: kubectl apply -f manifests/YAML Syntax Validation
Hyve checks that workflow files are valid YAML:
Valid YAML
apiVersion: v1kind: Workflowmetadata: name: deploy-appspec: jobs: - name: deploy steps: - name: apply command: kubectl apply -f manifests/Invalid YAML Examples
# Invalid - missing colon after 'name'metadata: name deploy-app # ❌ Missing colon
# Validmetadata: name: deploy-app # ✅ Correct# Invalid - incorrect indentationspec: jobs: - name: deploy # ❌ Wrong indentation steps: - name: apply
# Validspec: jobs: - name: deploy # ✅ Correct indentation steps: - name: apply# Invalid - mixing tabs and spacesspec:→env: # ❌ Tab character APP_NAME: my-app # Spaces
# Valid - use spaces consistentlyspec: env: # ✅ Spaces only APP_NAME: my-appSchema Validation
Hyve validates the workflow structure and required fields:
Required Fields
apiVersion string required kind string required Must be Workflow
metadata.name string required Unique workflow identifier
spec.jobs array required At least one job must be defined
spec.jobs[].name string required Each job must have a name
spec.jobs[].steps array required Each job must have at least one step
Common Schema Errors
Missing Required Fields
# Invalid - missing metadata.nameapiVersion: v1kind: Workflowmetadata: description: Deploy app# ❌ Missing: metadata.name
# ValidapiVersion: v1kind: Workflowmetadata: name: deploy-app description: Deploy appEmpty Jobs Array
# Invalid - no jobs definedspec: jobs: [] # ❌ Empty array
# Valid - at least one jobspec: jobs: - name: deploy steps: - name: apply command: kubectl apply -f manifests/Missing Step Command
# Invalid - step has no command or scriptsteps: - name: deploy # ❌ No command or script
# Valid - step has commandsteps: - name: deploy command: kubectl apply -f manifests/Both Command and Script
# Invalid - can't have bothsteps: - name: deploy command: kubectl apply -f manifests/ # ❌ script: | # ❌ Can't have both kubectl apply -f manifests/
# Valid - use one or the othersteps: - name: deploy command: kubectl apply -f manifests/Requirements Validation
Before executing, Hyve validates that requirements are met:
Tool Validation
Checks that required tools are installed:
requirements: tools: - name: kubectl version: "1.28" - name: helm version: "3.12"Validation checks:
- Tool exists in
PATH - Version meets minimum requirement (if specified)
Error messages:
[ERROR] Requirements validation failed: - Required tool 'kubectl' not found in PATH - Tool 'helm' version mismatch: found 3.10.0, requires 3.12Secret Validation
Checks that required secrets are available:
requirements: secrets: - name: DOCKER_TOKEN provider: docker required: true - name: GITHUB_TOKEN provider: github required: falseValidation checks:
- Secret exists in environment or database
- Required secrets must be present
- Optional secrets show warnings if missing
Error messages:
[ERROR] Requirements validation failed: - Required secret 'DOCKER_TOKEN' not found Set via: export DOCKER_TOKEN=your-secret
[WARN] Optional secret 'GITHUB_TOKEN' not foundManual Validation
Validate workflows without running them:
# Validate specific workflowhyve workflow validate deploy-app
# Validate all workflows in repositoryhyve workflow validate --allOutput:
[INFO] Validating workflow 'deploy-app'[INFO] ✅ YAML syntax valid[INFO] ✅ Schema validation passed[INFO] ✅ Requirements validation passed[INFO] Workflow 'deploy-app' is validDry Run
Preview workflow execution without actually running it:
# Dry run workflowhyve workflow run deploy-app --dry-runOutput:
[INFO] DRY RUN: Workflow 'deploy-app'[INFO] Would execute:
Job: build Step: docker-build Command: docker build -t my-app:latest .
Job: deploy Step: kubectl-apply Command: kubectl apply -f manifests/
[INFO] DRY RUN: No changes madeCommon Validation Errors
Invalid YAML syntax
Error:
[ERROR] Invalid YAML syntax in workflow 'deploy-app'[ERROR] Line 10: mapping values are not allowed hereSolution:
- Check for missing colons
- Verify indentation (use spaces, not tabs)
- Ensure proper YAML structure
Missing required field
Error:
[ERROR] Workflow validation failed:- Missing required field: metadata.nameSolution:
# Add missing fieldmetadata: name: my-workflowTool not found
Error:
[ERROR] Required tool 'kubectl' not found in PATHSolution:
# Install missing toolbrew install kubectl
# Verify installationkubectl version --clientTool version mismatch
Error:
[ERROR] Tool 'helm' version mismatch: found 3.10.0, requires 3.12Solution:
# Update toolbrew upgrade helm
# Or adjust workflow requirementrequirements: tools: - name: helm version: "3.10" # Lower requirementSecret not found
Error:
[ERROR] Required secret 'DOCKER_TOKEN' not foundSolution:
export DOCKER_TOKEN=your-tokenInvalid job dependency
Error:
[ERROR] Job 'deploy' depends on non-existent job 'build'Solution:
# Ensure referenced job existsjobs: - name: build # ✅ Add missing job steps: - name: build command: make build
- name: deploy dependsOn: [build] # Now valid steps: - name: deploy command: make deployCircular dependency
Error:
[ERROR] Circular dependency detected: build → deploy → buildSolution:
# Remove circular dependencyjobs: - name: build steps: - name: build command: make build
- name: deploy dependsOn: [build] # ✅ One-way dependency steps: - name: deploy command: make deployBest Practices
1. Validate Before Committing
# Validate workflowhyve workflow validate deploy-app
# If valid, commitgit add workflows/deploy-app.yamlgit commit -m "Add deployment workflow"2. Use Dry Run for Testing
# Test workflow without executinghyve workflow run deploy-app --dry-run
# Review output, then run for realhyve workflow run deploy-app3. Specify Tool Versions
# Good - specific versionsrequirements: tools: - name: kubectl version: "1.28" - name: helm version: "3.12"
# Less safe - no version checkrequirements: tools: - name: kubectl - name: helm4. Test in Development First
# Switch to developmenthyve git use development
# Test new workflowhyve workflow validate new-workflowhyve workflow run new-workflow --dry-runhyve workflow run new-workflow
# If successful, use in productionhyve git use production5. Use Schema Validation Tools
# Use YAML lintersyamllint workflows/deploy-app.yaml
# Check with Hyve validatorhyve workflow validate deploy-appValidation in CI/CD
Add validation to your CI/CD pipeline:
name: Validate Hyve Workflows
on: pull_request: paths: - 'workflows/**.yaml'
jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3
- name: Install Hyve run: | # Install Hyve go install github.com/cbridges1/hyve@latest
- name: Validate workflows run: | hyve workflow validate --allValidation Output
Successful Validation
[INFO] Validating workflow 'deploy-app'[INFO] ✅ YAML syntax valid[INFO] ✅ Schema validation passed[INFO] ✅ Requirements validation passed[INFO] ✅ Tool 'kubectl' found (version 1.28.0)[INFO] ✅ Tool 'helm' found (version 3.12.0)[INFO] ✅ Secret 'DOCKER_TOKEN' found[INFO] Workflow 'deploy-app' is validFailed Validation
[INFO] Validating workflow 'deploy-app'[ERROR] ✗ YAML syntax invalid[ERROR] Line 10: mapping values are not allowed here[ERROR] Validation failed
Please fix the errors and try again.Partial Validation (Warnings)
[INFO] Validating workflow 'deploy-app'[INFO] ✅ YAML syntax valid[INFO] ✅ Schema validation passed[WARN] ⚠ Optional secret 'GITHUB_TOKEN' not found[INFO] ✅ Tool 'kubectl' found (version 1.28.0)[INFO] Workflow 'deploy-app' is valid with warnings