Skip to content

Commit ab664a3

Browse files
fix(ci): repair dogfood-gate.yml — the workflow has never run (#55)
This workflow is **invalid YAML**, so GitHub refuses it at parse time. It produces **no run, no check-run, no annotation and no log** — not a red X, an **absence**. Nothing on a dashboard distinguishes *"this gate passed"* from *"this gate does not exist"*. The tell: the Actions API reports the workflow's `name` as its **file path** instead of its `name:` — GitHub registers a file it cannot parse under its path. ``` name = ".github/workflows/dogfood-gate.yml" path = ".github/workflows/dogfood-gate.yml" <- name == path ``` ## Cause The embedded `python3 -c "` body starts at **column 0**: ```yaml run: | python3 -c " import tomllib, sys # <- column 0 ends the block scalar ``` A `run: |` literal block ends at the first non-empty line indented *less* than the block. The Python terminates it, and YAML then tries to parse `import tomllib, sys` as a mapping key — *"could not find expected `:`"*. ## Fix Indent the embedded body and its closing quote to the block indent. **YAML strips that indent again when parsing**, so the shell and the interpreter still receive the code at column 0. The content is unchanged; only the YAML framing differs. ## Verified, not assumed - the file parses and yields a `jobs:` mapping - `bash -n` passes on the reconstructed run block - the resulting `run:` value is **byte-identical** to the same workflow in repos where it already parses (e.g. `bofig`) — this reproduces the known-good form rather than inventing one - **exactly one file changed** ## Scope Measured estate-wide: **211 invalid workflow files across 116 repos**, confirmed by the Actions API. `dogfood-gate.yml` accounts for **71** of them. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2 parents a31cc02 + 63535a7 commit ab664a3

1 file changed

Lines changed: 20 additions & 20 deletions

File tree

.github/workflows/dogfood-gate.yml

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -263,26 +263,26 @@ jobs:
263263
264264
# Validate TOML structure using Python 3.11+ tomllib
265265
python3 -c "
266-
import tomllib, sys
267-
with open('eclexiaiser.toml', 'rb') as f:
268-
data = tomllib.load(f)
269-
project = data.get('project', {})
270-
if not project.get('name', '').strip():
271-
print('ERROR: project.name is required', file=sys.stderr)
272-
sys.exit(1)
273-
functions = data.get('functions', [])
274-
if not functions:
275-
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
276-
sys.exit(1)
277-
for fn in functions:
278-
if not fn.get('name', '').strip():
279-
print('ERROR: function name cannot be empty', file=sys.stderr)
280-
sys.exit(1)
281-
if not fn.get('source', '').strip():
282-
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
283-
sys.exit(1)
284-
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
285-
" || {
266+
import tomllib, sys
267+
with open('eclexiaiser.toml', 'rb') as f:
268+
data = tomllib.load(f)
269+
project = data.get('project', {})
270+
if not project.get('name', '').strip():
271+
print('ERROR: project.name is required', file=sys.stderr)
272+
sys.exit(1)
273+
functions = data.get('functions', [])
274+
if not functions:
275+
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
276+
sys.exit(1)
277+
for fn in functions:
278+
if not fn.get('name', '').strip():
279+
print('ERROR: function name cannot be empty', file=sys.stderr)
280+
sys.exit(1)
281+
if not fn.get('source', '').strip():
282+
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
283+
sys.exit(1)
284+
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
285+
" || {
286286
echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"
287287
exit 1
288288
}

0 commit comments

Comments
 (0)