|
1 | | -name: Validate Artifacts |
2 | 1 |
|
3 | | -on: |
4 | | - push: |
5 | | - branches: [main] |
6 | | - paths: |
7 | | - - '**.md' |
8 | | - - '.github/**' |
9 | | - - '.gitignore' |
10 | | - pull_request: |
11 | | - branches: [main] |
12 | | - workflow_dispatch: |
13 | | - |
14 | | -jobs: |
15 | | - validate: |
16 | | - runs-on: ubuntu-latest |
17 | | - steps: |
18 | | - - uses: actions/checkout@v6 |
19 | | - |
20 | | - - name: Check required artifacts exist |
21 | | - run: | |
22 | | - required_files=( |
23 | | - "PROJECT-PLAN.md" |
24 | | - "GANTT-CHART.md" |
25 | | - "_plan/JIRA-STRUCTURE.md" |
26 | | - "RACI-CHART.md" |
27 | | - "RISK-REGISTER.md" |
28 | | - "SEVERITY-CLASSIFICATION.md" |
29 | | - "_research/BEST-PRACTICES.md" |
30 | | - "SUCCESS-METRICS.md" |
31 | | - "RUNBOOK-TEMPLATE.md" |
32 | | - "README.md" |
33 | | - "CHANGELOG.md" |
34 | | - ) |
35 | | - missing=0 |
36 | | - for f in "${required_files[@]}"; do |
37 | | - if [ ! -f "$f" ]; then |
38 | | - echo "MISSING: $f" |
39 | | - missing=$((missing + 1)) |
40 | | - else |
41 | | - echo "OK: $f" |
42 | | - fi |
43 | | - done |
44 | | - if [ $missing -gt 0 ]; then |
45 | | - echo "" |
46 | | - echo "$missing required artifact(s) missing." |
47 | | - echo "Run @project-architect to generate all artifacts." |
48 | | - exit 1 |
49 | | - fi |
50 | | -
|
51 | | - - name: Check for placeholder content |
52 | | - run: | |
53 | | - placeholder_count=0 |
54 | | - for f in *.md; do |
55 | | - if grep -qE '\[TODO\]|\[TBD\]|\[PLACEHOLDER\]|\[INSERT\]' "$f" 2>/dev/null; then |
56 | | - echo "PLACEHOLDER CONTENT in $f:" |
57 | | - grep -nE '\[TODO\]|\[TBD\]|\[PLACEHOLDER\]|\[INSERT\]' "$f" |
58 | | - placeholder_count=$((placeholder_count + 1)) |
59 | | - fi |
60 | | - done |
61 | | - if [ $placeholder_count -gt 0 ]; then |
62 | | - echo "" |
63 | | - echo "Found placeholder content in $placeholder_count file(s)." |
64 | | - exit 1 |
65 | | - fi |
66 | | - echo "No placeholder content found." |
67 | | -
|
68 | | - - name: Validate internal links |
69 | | - run: | |
70 | | - broken=0 |
71 | | - for f in *.md; do |
72 | | - while IFS= read -r link; do |
73 | | - target=$(echo "$link" | sed 's/.*](//' | sed 's/).*//') |
74 | | - if [[ "$target" != http* ]] && [[ "$target" != "#"* ]] && [ ! -e "$target" ]; then |
75 | | - echo "BROKEN LINK in $f: $target" |
76 | | - broken=$((broken + 1)) |
77 | | - fi |
78 | | - done < <(grep -oE '\[.*?\]\([^)]+\)' "$f" 2>/dev/null || true) |
79 | | - done |
80 | | - if [ $broken -gt 0 ]; then |
81 | | - echo "" |
82 | | - echo "$broken broken internal link(s) found." |
83 | | - exit 1 |
84 | | - fi |
85 | | - echo "All internal links valid." |
0 commit comments