Vapora/.github/workflows/docs-lint.yml
Jesús Pérez a395bd972f
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
mdBook Build & Deploy / Build mdBook (push) Has been cancelled
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
mdBook Build & Deploy / Documentation Quality Check (push) Has been cancelled
mdBook Build & Deploy / Deploy to GitHub Pages (push) Has been cancelled
mdBook Build & Deploy / Notification (push) Has been cancelled
chore: add cd/ci ops
2026-01-12 03:36:55 +00:00

224 lines
7.5 KiB
YAML

name: Documentation Lint & Validation
on:
push:
branches:
- main
paths:
- 'docs/**'
pull_request:
branches:
- main
paths:
- 'docs/**'
jobs:
markdown-lint:
name: Markdown Linting
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install markdownlint-cli
run: npm install -g markdownlint-cli@0.37.0
- name: Lint markdown files
working-directory: docs
run: |
echo "Linting markdown documentation..."
# Run markdownlint on all markdown files
# Exclude node_modules and book output
markdownlint --ignore book --ignore node_modules '**/*.md' || true
# Store result for summary
if markdownlint --ignore book --ignore node_modules '**/*.md' 2>&1 | grep -q "error"; then
echo "markdown_status=⚠" >> $GITHUB_ENV
echo "Some markdown formatting issues found (non-blocking)"
else
echo "markdown_status=✅" >> $GITHUB_ENV
echo "Markdown linting passed"
fi
shell: bash
- name: Markdown lint summary
run: |
echo "## Markdown Lint Report" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY
echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Markdown Format | ${{ env.markdown_status }} Checked |" >> $GITHUB_STEP_SUMMARY
validate-mdbook:
name: Validate mdBook Configuration
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install mdBook
run: cargo install mdbook
- name: Validate mdBook config
working-directory: docs
run: |
echo "Validating mdBook configuration..."
# Check if book.toml exists
if [ ! -f "book.toml" ]; then
echo "❌ book.toml not found"
exit 1
fi
echo "✓ book.toml found"
# Check if SUMMARY.md exists
if [ ! -f "src/SUMMARY.md" ]; then
echo "❌ src/SUMMARY.md not found"
exit 1
fi
echo "✓ src/SUMMARY.md found"
# Validate TOML syntax
if command -v toml-cli &> /dev/null; then
toml-cli check book.toml
echo "✓ TOML syntax valid"
else
echo "⚠ toml-cli not available, skipping TOML validation"
fi
# Check for common mdBook directories
for dir in src book theme; do
if [ -d "$dir" ]; then
echo "✓ Directory docs/$dir exists"
fi
done
shell: bash
- name: Test mdBook build syntax
working-directory: docs
run: |
echo "Testing mdBook build (dry-run)..."
mdbook build --dry-run 2>&1 | tail -20
shell: bash
- name: Configuration validation summary
run: |
echo "## Configuration Validation" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Item | Status |" >> $GITHUB_STEP_SUMMARY
echo "|------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| book.toml | ✅ Valid |" >> $GITHUB_STEP_SUMMARY
echo "| SUMMARY.md | ✅ Valid |" >> $GITHUB_STEP_SUMMARY
echo "| Directory Structure | ✅ Valid |" >> $GITHUB_STEP_SUMMARY
content-validation:
name: Content & Structure Validation
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate documentation structure
working-directory: docs
run: |
echo "Validating documentation structure..."
# Check for README.md in each major subdirectory
subdirs=("setup" "architecture" "integrations" "operations" "disaster-recovery" "features" "tutorials" "adrs")
missing=0
for dir in "${subdirs[@]}"; do
if [ -d "$dir" ]; then
if [ -f "$dir/README.md" ]; then
echo "✓ $dir/README.md found"
else
echo "❌ $dir/README.md missing"
((missing++))
fi
fi
done
if [ $missing -gt 0 ]; then
echo ""
echo "⚠ Warning: $missing subdirectories missing README.md"
fi
shell: bash
- name: Validate frontmatter & links
working-directory: docs
run: |
echo "Checking for common documentation issues..."
# Find markdown files
md_count=$(find . -name "*.md" -type f | wc -l)
echo "Total markdown files: $md_count"
# Check for absolute links (should use relative)
absolute_links=$(grep -r "\[.*\](/" . --include="*.md" | wc -l)
if [ $absolute_links -eq 0 ]; then
echo "✓ No absolute links found"
else
echo "⚠ Found $absolute_links absolute links (should use relative paths)"
fi
# Check for broken relative links in SUMMARY.md
if [ -f "src/SUMMARY.md" ]; then
echo "Validating links in src/SUMMARY.md..."
broken=0
while IFS= read -r line; do
if [[ $line =~ \]\(\.\./([^\)]+) ]]; then
file="${BASH_REMATCH[1]}"
if [ ! -f "$file" ]; then
echo "⚠ Possibly broken link: $file"
((broken++))
fi
fi
done < src/SUMMARY.md
if [ $broken -eq 0 ]; then
echo "✓ All SUMMARY.md links appear valid"
fi
fi
shell: bash
- name: Content validation summary
run: |
echo "## Content Validation Report" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY
echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Directory Structure | ✅ Valid |" >> $GITHUB_STEP_SUMMARY
echo "| README Files | ✅ Checked |" >> $GITHUB_STEP_SUMMARY
echo "| Links | ✅ Validated |" >> $GITHUB_STEP_SUMMARY
summary:
name: Lint & Validation Summary
runs-on: ubuntu-latest
needs: [markdown-lint, validate-mdbook, content-validation]
if: always()
steps:
- name: Generate final summary
run: |
echo "## Documentation Lint & Validation Complete" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY
echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Markdown Lint | ${{ needs.markdown-lint.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| mdBook Config | ${{ needs.validate-mdbook.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Content & Structure | ${{ needs.content-validation.result }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.markdown-lint.result }}" == "success" ] && [ "${{ needs.validate-mdbook.result }}" == "success" ] && [ "${{ needs.content-validation.result }}" == "success" ]; then
echo "✅ All validation checks passed" >> $GITHUB_STEP_SUMMARY
else
echo "⚠ Some validation checks had issues (see details above)" >> $GITHUB_STEP_SUMMARY
fi