103 lines
3.7 KiB
YAML
103 lines
3.7 KiB
YAML
# template-ci.yml — Pillar 3: CI pipeline for the template repo
|
|
# Runs on every push/PR to validate all template combinations
|
|
|
|
name: Template CI — Validate & Golden Tests
|
|
|
|
on:
|
|
push:
|
|
branches: [main, develop]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
# ── Job 1: Validate all brief combinations ──────────────────────────────
|
|
validate-templates:
|
|
name: Validate template rendering
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: dart-lang/setup-dart@v1
|
|
with:
|
|
sdk: stable
|
|
|
|
- name: Install dependencies
|
|
working-directory: generator
|
|
run: dart pub get
|
|
|
|
- name: Run generator test suite
|
|
working-directory: generator
|
|
run: dart test test/generator_test.dart --reporter=expanded
|
|
|
|
- name: Verify no unreplaced placeholders
|
|
working-directory: generator
|
|
run: |
|
|
dart test test/generator_test.dart \
|
|
--name "Rendered output has no unreplaced" \
|
|
--reporter=expanded
|
|
|
|
# ── Job 2: Golden file comparison ───────────────────────────────────────
|
|
golden-tests:
|
|
name: Golden file tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dart-lang/setup-dart@v1
|
|
with:
|
|
sdk: stable
|
|
- name: Install dependencies
|
|
working-directory: generator
|
|
run: dart pub get
|
|
- name: Run golden tests
|
|
working-directory: generator
|
|
run: dart test test/generator_test.dart --name "Golden" --reporter=expanded
|
|
|
|
# ── Job 3: Lint template files ──────────────────────────────────────────
|
|
lint-templates:
|
|
name: Lint template files
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Check for orphaned placeholders in static files
|
|
run: |
|
|
# Verify no .mdc files (non-template) have unresolved {{PLACEHOLDERS}}
|
|
# These should only be in .mdc.tmpl files
|
|
if find templates/ -name "*.mdc" -not -name "*.tmpl" | xargs grep -l '{{[A-Z_]*}}' 2>/dev/null; then
|
|
echo "ERROR: Found unreplaced placeholders in non-template .mdc files"
|
|
exit 1
|
|
fi
|
|
echo "✔ No orphaned placeholders in static files"
|
|
|
|
- name: Check for duplicate alwaysApply: true
|
|
run: |
|
|
# Warn if more than 5 rules have alwaysApply: true (context bloat)
|
|
count=$(grep -r "alwaysApply: true" templates/ | wc -l)
|
|
echo "Files with alwaysApply: true: $count"
|
|
if [ "$count" -gt 10 ]; then
|
|
echo "WARNING: $count files have alwaysApply: true — review for context bloat"
|
|
fi
|
|
|
|
# ── Job 4: Validate brief schema ────────────────────────────────────────
|
|
validate-schema:
|
|
name: Validate reference project-brief
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dart-lang/setup-dart@v1
|
|
with:
|
|
sdk: stable
|
|
- name: Install dependencies
|
|
working-directory: generator
|
|
run: dart pub get
|
|
- name: Validate reference project brief
|
|
working-directory: generator
|
|
run: |
|
|
brief="../../example-project/project-brief.yaml"
|
|
if [ ! -f "$brief" ]; then
|
|
echo "ERROR: Missing reference brief at $brief (expected monorepo layout)."
|
|
exit 1
|
|
fi
|
|
echo "Validating: $brief"
|
|
dart run bin/cursor_gen.dart --validate --brief "$brief"
|