yaml-validator
Original:🇺🇸 English
Translated
Validates YAML syntax and structure for all .yml and .yaml files in the project. Identifies common issues like invalid syntax, indentation errors, missing keys, type mismatches, and provides fixes. Use when editing, creating, or debugging YAML configuration files.
1installs
Added on
NPX Install
npx skill4agent add d-o-hub/rust-self-learning-memory yaml-validatorTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →YAML Validator
Validate and fix YAML syntax and structure for all YAML files in the project.
Purpose
Ensures YAML files follow proper syntax, have valid structure, and comply with schema requirements where applicable.
When to Use
- Creating new YAML configuration files
- Editing existing .yml/.yaml files
- Debugging YAML syntax errors
- Validating GitHub Actions workflows
- Checking docker-compose files
- Validating Kubernetes manifests
- Pre-commit YAML quality checks
- CI/CD configuration validation
YAML Syntax Rules
Basic Structure
yaml
# Comments start with #
key: value # Simple key-value
list: # Lists use dash prefix
- item1
- item2
nested: # Nested objects
key1: value1
key2: value2
multiline: | # Literal block scalar
Line 1
Line 2
flow: > # Folded block scalar
This is a long
sentence that foldsData Types
yaml
string: "value" # Quoted string
unquoted: value # Unquoted string
number: 42 # Integer
float: 3.14 # Float
boolean: true # Boolean (true/false, yes/no, on/off)
null_value: null # Null
empty: ~ # Also null
multiline_string: |
This preserves
newlinesIndentation Rules
- Use 2 spaces per indentation level (not tabs)
- Consistent indentation throughout file
- Keys at same level must align
- Lists use 2 additional spaces after dash
yaml
# Correct
parent:
child: value
list:
- item1
- item2
# Incorrect - mixed tabs/spaces
parent:
child: value # Tab character!
# Incorrect - wrong indentation
parent:
child: value # Only 1 spaceCommon Issues and Fixes
Issue 1: Invalid Indentation
Problem: Mixed spaces and tabs or wrong indentation level
Fix: Convert all to 2-space indentation
yaml
# Wrong
parent:
child: value
# Correct
parent:
child: valueIssue 2: Missing Colon
Problem: Key without colon separator
Fix: Add colon and space after key
yaml
# Wrong
key value
# Correct
key: valueIssue 3: Special Characters in Strings
Problem: Characters like , , , , in unquoted strings
Fix: Quote strings containing special characters
:{}[]yaml
# Wrong
message: Error: something went wrong
# Correct
message: "Error: something went wrong"Issue 4: Duplicate Keys
Problem: Same key defined multiple times
Fix: Remove duplicate or merge values
yaml
# Wrong
config:
key: value1
key: value2
# Correct
config:
key: value1
other_key: value2Issue 5: Unquoted Strings That Look Like Types
Problem: , , , , , , numbers
Fix: Quote strings that should be literal text
yesnoonofftruefalseyaml
# Wrong - parsed as boolean true
country: YES
# Correct
country: "YES"Issue 6: Trailing Spaces
Problem: Spaces at end of lines
Fix: Remove trailing whitespace
Issue 7: Missing Document Start
Problem: File doesn't start with
Fix: Optional but recommended for clarity
---yaml
---
# Your content hereFile-Specific Validation
GitHub Actions Workflows (.github/workflows/*.yml
)
.github/workflows/*.ymlRequired structure:
yaml
name: Workflow Name
on: [push, pull_request] # Event triggers
jobs:
job-name:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Step name
run: echo "Hello"Common issues:
- Missing trigger
on: - Invalid value
runs-on - Missing
steps: - Old action versions (v1/v2)
Docker Compose (docker-compose.yml
)
docker-compose.ymlyaml
version: "3.8"
services:
app:
image: node:18
ports:
- "3000:3000"
environment:
- NODE_ENV=productionCommon issues:
- Missing version declaration
- Port binding format
- Volume mount syntax
Kubernetes Manifests (*.yaml
)
*.yamlyaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: container-name
image: nginx:latestCommon issues:
- Wrong apiVersion
- Missing required fields (apiVersion, kind, metadata, spec)
- List indentation under containers
Workflow
1. Parse YAML File
bash
# Basic syntax check
python3 -c "import yaml; yaml.safe_load(open('file.yml'))"
# With better error messages
python3 -c "
import yaml
try:
with open('file.yml') as f:
yaml.safe_load(f)
print('✓ Valid YAML')
except yaml.YAMLError as e:
print(f'✗ Error: {e}')
"2. Validate Structure
Check for:
- Valid YAML syntax
- Consistent indentation (2 spaces)
- No trailing spaces
- No tabs (spaces only)
- Proper key-value formatting
- Valid data types
- No duplicate keys
3. File-Specific Checks
Based on file location and purpose:
- GitHub Actions: Valid triggers, job structure
- Docker Compose: Version, service definitions
- K8s manifests: apiVersion, required fields
- Config files: Expected schema
4. Report Issues
For each violation:
- Line number and column
- Issue type: Error / Warning / Info
- Description of the problem
- Suggested fix with code example
Validation Commands
bash
# Install yamllint (recommended)
pip install yamllint
# Validate single file
yamllint file.yml
# Validate with config
yamllint -c .yamllint file.yml
# Check all YAML files
find . -name "*.yml" -o -name "*.yaml" | xargs yamllint
# Using Python (if yamllint not available)
python3 -c "
import yaml
import sys
errors = []
for file in sys.argv[1:]:
try:
with open(file) as f:
yaml.safe_load(f)
print(f'✓ {file}')
except Exception as e:
errors.append(f'✗ {file}: {e}')
print(f'✗ {file}: {e}')
sys.exit(1 if errors else 0)
" file1.yml file2.ymlyamllint Configuration
Create in project root:
.yamllintyaml
---
yaml-files:
- '*.yml'
- '*.yaml'
rules:
braces:
min-spaces-inside: 0
max-spaces-inside: 0
brackets:
min-spaces-inside: 0
max-spaces-inside: 0
colons:
max-spaces-after: 1
max-spaces-before: 0
commas:
max-spaces-after: 1
max-spaces-before: 0
comments:
min-spaces-from-content: 1
require-starting-space: true
comments-indentation: disable
document-end: disable
document-start: disable
empty-lines:
max: 2
empty-values: disable
indentation:
spaces: 2
indent-sequences: true
check-multi-line-strings: false
key-duplicates: enable
key-ordering: disable
line-length:
max: 120
new-line-at-end-of-file: enable
new-lines:
type: unix
octal-values: disable
quoted-strings: disable
trailing-spaces: enable
truthy: disableOutput Format
## YAML Validation Report
### Summary
- Files Checked: 5
- Errors: 2
- Warnings: 3
- Status: FAIL
### file1.yml
✓ Valid YAML syntax
⚠ Warning (Line 15): Line too long (145 > 120)
### file2.yml
✗ Error (Line 8, Col 5): Invalid indentation
Current: 4 spaces
Expected: 2 spaces
✗ Error (Line 12): Duplicate key "name"
### file3.yml
✓ Valid YAML syntax
⚠ Warning (Line 20): Trailing spacesBest Practices
DO
✓ Use 2 spaces for indentation
✓ Quote strings with special characters (:, {, }, [, ])
✓ Use consistent formatting throughout
✓ Validate before committing
✓ Add comments for complex sections
✓ Keep lines under 120 characters
✓ End files with newline
✓ Use document start marker for clarity
---DON'T
✗ Use tabs for indentation
✗ Leave trailing spaces
✗ Mix quoted/unquoted styles inconsistently
✗ Use duplicate keys
✗ Forget to quote strings that look like booleans/numbers
✗ Mix YAML 1.1 and 1.2 features
Examples
Valid GitHub Actions
yaml
---
name: Rust CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: cargo test --allValid Docker Compose
yaml
---
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
environment:
NODE_ENV: production
depends_on:
- db
db:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:Valid Kubernetes
yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:alpine
ports:
- containerPort: 80Integration
Use with:
- github-workflows: Validate workflow files
- code-quality: Pre-commit YAML checks
- debug-troubleshoot: Debug parsing errors
- feature-implement: Create new config files
Quick Fixes
bash
# Fix trailing spaces
sed -i 's/[[:space:]]*$//' file.yml
# Convert tabs to spaces
sed -i 's/\t/ /g' file.yml
# Ensure newline at end
sed -i -e '$a\' file.yml