55# Validates that the repo uses hyperpolymath's own formats and tools.
66# Companion to static-analysis-gate.yml (security) — this is for format compliance.
77name : Dogfood Gate
8-
98on :
109 pull_request :
1110 branches : ['**']
1211 push :
1312 branches : [main, master]
14-
1513permissions :
1614 contents : read
17-
1815jobs :
1916 # ---------------------------------------------------------------------------
2017 # Job 1: A2ML manifest validation
2118 # ---------------------------------------------------------------------------
2219 a2ml-validate :
2320 name : Validate A2ML manifests
2421 runs-on : ubuntu-latest
25-
22+ timeout-minutes : 15
2623 steps :
2724 - name : Checkout repository
2825 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
@@ -35,14 +32,12 @@ jobs:
3532 if [ "$COUNT" -eq 0 ]; then
3633 echo "::warning::No .a2ml manifest files found. Every RSR repo should have 0-AI-MANIFEST.a2ml"
3734 fi
38-
3935 - name : Validate A2ML manifests
4036 if : steps.detect.outputs.count > 0
4137 uses : hyperpolymath/a2ml-validate-action@59145c7d1039fa3059b3ecacdb50ee23d7505898 # main
4238 with :
4339 path : ' .'
4440 strict : ' false'
45-
4641 - name : Write summary
4742 run : |
4843 A2ML_COUNT="${{ steps.detect.outputs.count }}"
@@ -59,14 +54,13 @@ jobs:
5954 echo "" >> "$GITHUB_STEP_SUMMARY"
6055 echo "Scanned **${A2ML_COUNT}** .a2ml file(s). See step output for details." >> "$GITHUB_STEP_SUMMARY"
6156 fi
62-
6357 # ---------------------------------------------------------------------------
6458 # Job 2: K9 contract validation
6559 # ---------------------------------------------------------------------------
6660 k9-validate :
6761 name : Validate K9 contracts
6862 runs-on : ubuntu-latest
69-
63+ timeout-minutes : 15
7064 steps :
7165 - name : Checkout repository
7266 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
@@ -83,14 +77,12 @@ jobs:
8377 if [ "$COUNT" -eq 0 ] && [ "$CONFIG_COUNT" -gt 0 ]; then
8478 echo "::warning::Found $CONFIG_COUNT config files but no K9 contracts. Run k9iser to generate contracts."
8579 fi
86-
8780 - name : Validate K9 contracts
8881 if : steps.detect.outputs.k9_count > 0
8982 uses : hyperpolymath/k9-validate-action@2d96f43c538964b097d159ed3a56ba5b5ceca227 # main
9083 with :
9184 path : ' .'
9285 strict : ' false'
93-
9486 - name : Write summary
9587 run : |
9688 K9_COUNT="${{ steps.detect.outputs.k9_count }}"
@@ -108,14 +100,13 @@ jobs:
108100 echo "" >> "$GITHUB_STEP_SUMMARY"
109101 echo "Validated **${K9_COUNT}** K9 contract(s) against **${CFG_COUNT}** config file(s)." >> "$GITHUB_STEP_SUMMARY"
110102 fi
111-
112103 # ---------------------------------------------------------------------------
113104 # Job 3: Empty-linter — invisible character detection
114105 # ---------------------------------------------------------------------------
115106 empty-lint :
116107 name : Empty-linter (invisible characters)
117108 runs-on : ubuntu-latest
118-
109+ timeout-minutes : 15
119110 steps :
120111 - name : Checkout repository
121112 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
@@ -153,7 +144,6 @@ jobs:
153144 REL_PATH="${filepath#$GITHUB_WORKSPACE/}"
154145 echo "::warning file=${REL_PATH}::Invisible Unicode characters detected (zero-width space, BOM, NBSP, etc.)"
155146 done < /tmp/empty-lint-results.txt
156-
157147 - name : Write summary
158148 run : |
159149 if [ "${{ steps.lint.outputs.ready }}" = "true" ]; then
@@ -172,14 +162,13 @@ jobs:
172162 echo "" >> "$GITHUB_STEP_SUMMARY"
173163 echo "Skipped: empty-linter not available." >> "$GITHUB_STEP_SUMMARY"
174164 fi
175-
176165 # ---------------------------------------------------------------------------
177166 # Job 4: Groove manifest check (for repos that should expose services)
178167 # ---------------------------------------------------------------------------
179168 groove-check :
180169 name : Groove manifest check
181170 runs-on : ubuntu-latest
182-
171+ timeout-minutes : 15
183172 steps :
184173 - name : Checkout repository
185174 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
@@ -220,7 +209,6 @@ jobs:
220209 if [ "$HAS_SERVER" = "true" ] && [ "$HAS_MANIFEST" = "false" ] && [ "$HAS_GROOVE_CODE" = "false" ]; then
221210 echo "::warning::This repo has server code but no Groove endpoint. Add .well-known/groove/manifest.json for service discovery."
222211 fi
223-
224212 - name : Write summary
225213 run : |
226214 echo "## Groove Protocol Check" >> "$GITHUB_STEP_SUMMARY"
@@ -230,16 +218,15 @@ jobs:
230218 echo "| Static manifest (.well-known/groove/manifest.json) | ${{ steps.groove.outputs.has_manifest }} |" >> "$GITHUB_STEP_SUMMARY"
231219 echo "| Groove endpoint in code | ${{ steps.groove.outputs.has_groove_code }} |" >> "$GITHUB_STEP_SUMMARY"
232220 echo "| Has HTTP server code | ${{ steps.groove.outputs.has_server }} |" >> "$GITHUB_STEP_SUMMARY"
233-
234221 # ---------------------------------------------------------------------------
235222 # Job 5: Dogfooding summary
236223 # ---------------------------------------------------------------------------
237224 dogfood-summary :
238225 name : Dogfooding compliance summary
239226 runs-on : ubuntu-latest
227+ timeout-minutes : 15
240228 needs : [a2ml-validate, k9-validate, empty-lint, groove-check]
241229 if : always()
242-
243230 steps :
244231 - name : Checkout repository
245232 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
@@ -306,4 +293,3 @@ jobs:
306293 *Generated by the [Dogfood Gate](https://github.com/hyperpolymath/rsr-template-repo) workflow.*
307294 *Dogfooding is guinea pig fooding — we test our tools on ourselves.*
308295 EOF
309-
0 commit comments