Commit 9b11d08
ci: harden workflows — timeout caps, pinned+verified elan, drop empty CodeQL language (#153)
## What & why
Follow-up to the merged proof-root work (#152), addressing the two CI
signals that surfaced on it — both pre-existing and about
`.github/workflows/*` (never the proof diff). Scoped to **CI hygiene
only**: no licence changes, no removal of security workflows, no
un-pinning of actions.
### 1. CodeQL configuration error → fixed
`analyze (javascript-typescript, none)` failed with *"CodeQL job status
was configuration error."* The repo has **zero JS/TS sources**
(TypeScript/Node are banned by the language policy), so the extractor
found no code. Dropped `javascript-typescript` from the matrix; kept
`cpp`, which covers the real C sources
(`impl/elixir/c_src/valence_nif.c`, `impl/ocaml/lean_wrapper.c`,
`impl/zig/src/valence_ffi.h`) and already passes.
### 2. Download integrity (Hypatia `download_then_run`, high)
`lean-verification.yml` and `rust-cli.yml` installed Lean via `curl … |
sh`. Now the elan installer is **pinned to an immutable tag (`v3.1.1`),
downloaded to a file, SHA-256-verified, then executed** — no
pipe-to-shell:
```
curl -sSfL https://raw.githubusercontent.com/leanprover/elan/v3.1.1/elan-init.sh -o elan-init.sh
echo "f5d473c9…75b310 elan-init.sh" | sha256sum -c -
sh elan-init.sh -y [--default-toolchain leanprover/lean4:v4.12.0]
```
(Confirmed the pinned script parses `-y`/`--default-toolchain` and
self-executes via `main "$@"`, so file execution is equivalent to the
old stdin form.)
### 3. Timeout caps (Hypatia `missing_timeout_minutes`, medium)
Added `timeout-minutes` to **all 31 `runs-on` jobs that lacked one,
across 16 workflows** (found by parsing the YAML, not the truncated bot
comment). Reusable `uses:` jobs are intentionally untouched — GitHub
disallows `timeout-minutes` on them. Values are tiered by real cost:
| Cap | Jobs |
|---|---|
| 15 | light check / validate / notify / lint / dispatch jobs |
| 30 | build / test / proof / scan jobs |
| 45 | `verify-idris2` (cold cache bootstraps Idris2 0.8.0 from source,
~20 min) |
| 60 | `cflite_batch` (30-min fuzz budget + build/upload overhead per
sanitizer) |
The `cflite_batch` (`fuzz-seconds: 1800`) and `verify-idris2` caps were
deliberately set **above** their known runtimes so the safety cap never
cuts a legitimate run short.
## Verification
Every workflow re-parsed as valid YAML; **0 `runs-on` jobs remain
without a timeout cap**:
```
python3 -c "import glob,yaml; ..." # parse-errors=0 missing-timeout=0
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01KfgJznd6jzSeDYsSXGAXkU
---
_Generated by [Claude
Code](https://claude.ai/code/session_01KfgJznd6jzSeDYsSXGAXkU)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 2ea4ba5 commit 9b11d08
17 files changed
Lines changed: 62 additions & 5 deletions
File tree
- .github/workflows
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
36 | 37 | | |
37 | 38 | | |
38 | 39 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
91 | 92 | | |
92 | 93 | | |
93 | 94 | | |
| 95 | + | |
94 | 96 | | |
95 | 97 | | |
96 | 98 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
21 | 24 | | |
22 | 25 | | |
23 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
35 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
36 | 40 | | |
37 | 41 | | |
| 42 | + | |
| 43 | + | |
38 | 44 | | |
39 | 45 | | |
40 | 46 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| 38 | + | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
| |||
95 | 96 | | |
96 | 97 | | |
97 | 98 | | |
| 99 | + | |
98 | 100 | | |
99 | 101 | | |
100 | 102 | | |
| |||
115 | 117 | | |
116 | 118 | | |
117 | 119 | | |
| 120 | + | |
118 | 121 | | |
119 | 122 | | |
120 | 123 | | |
| |||
147 | 150 | | |
148 | 151 | | |
149 | 152 | | |
| 153 | + | |
150 | 154 | | |
151 | 155 | | |
152 | 156 | | |
| |||
178 | 182 | | |
179 | 183 | | |
180 | 184 | | |
| 185 | + | |
181 | 186 | | |
182 | 187 | | |
183 | 188 | | |
| |||
203 | 208 | | |
204 | 209 | | |
205 | 210 | | |
| 211 | + | |
206 | 212 | | |
207 | 213 | | |
208 | 214 | | |
| |||
225 | 231 | | |
226 | 232 | | |
227 | 233 | | |
| 234 | + | |
228 | 235 | | |
229 | 236 | | |
230 | 237 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
| 70 | + | |
69 | 71 | | |
70 | 72 | | |
71 | 73 | | |
| |||
115 | 117 | | |
116 | 118 | | |
117 | 119 | | |
| 120 | + | |
118 | 121 | | |
119 | 122 | | |
120 | 123 | | |
| |||
179 | 182 | | |
180 | 183 | | |
181 | 184 | | |
| 185 | + | |
182 | 186 | | |
183 | 187 | | |
184 | 188 | | |
| |||
237 | 241 | | |
238 | 242 | | |
239 | 243 | | |
| 244 | + | |
240 | 245 | | |
241 | 246 | | |
242 | 247 | | |
| |||
316 | 321 | | |
317 | 322 | | |
318 | 323 | | |
| 324 | + | |
319 | 325 | | |
320 | 326 | | |
321 | 327 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| 46 | + | |
46 | 47 | | |
47 | 48 | | |
48 | 49 | | |
| |||
0 commit comments