feat(cicontext): rules:changes: path-glob evaluation; 100% test coverage
- Add --changes PATH and --changes-from REF flags to glint check and glint graph
for rules:changes: evaluation. --changes marks files explicitly; --changes-from
runs git diff --name-only <REF> automatically. Both flags can be combined.
- Implement doublestar glob matching (*, ** across path segments) in EvalJob and
EvalWorkflow; extended {paths, compare_to} map form supported.
- Without --changes/--changes-from the condition stays permissive (existing behaviour).
- Context summary line now shows changed-file count when file data is provided.
- Achieve 100% statement coverage: comprehensive tests added across all packages;
removed provably dead code; added testability seams (exit, userHomeDirFn,
execCommandOutput variables) to cover previously unreachable paths.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+9
-1
@@ -128,9 +128,10 @@ expressions are always evaluated.
|
||||
- `rules:if:` — full expression language: `==`, `!=`, `=~`, `!~`, `&&`, `||`, `!`, `(…)`, `$VAR`/`${VAR}`, string literals, `null`, regex flags (`/pat/i`)
|
||||
- `only:` / `except:` — ref keywords, branch-name globs, and `/regex/` patterns
|
||||
- `workflow:rules:` — evaluated to determine whether the pipeline would run; matching rule's `variables:` are injected before job evaluation
|
||||
- `rules:changes:` — path-glob patterns evaluated against the supplied changed-file list (see `--changes` / `--changes-from` flags); `*` matches within a segment, `**` crosses `/` boundaries; the extended `{paths: [...], compare_to: ...}` form is supported; without changed-file data the condition is always treated as matching (permissive)
|
||||
- Variable expansion — `$VAR` / `${VAR}` references in variable values expanded after all sources merge; transitive chains resolved (up to 10 passes)
|
||||
|
||||
**Not evaluated** (no git tree at lint time): `rules:changes:`, `rules:exists:`.
|
||||
**Not evaluated** (no git tree at lint time): `rules:exists:`.
|
||||
|
||||
**Predefined variables** set by shortcut flags:
|
||||
|
||||
@@ -143,6 +144,13 @@ expressions are always evaluated.
|
||||
|
||||
Use `--list-vars` to print the resolved variable table to stderr.
|
||||
|
||||
**Changed-file flags** (for `rules:changes:` evaluation):
|
||||
|
||||
| Flag | Effect |
|
||||
|------|--------|
|
||||
| `--changes PATH` | Mark PATH as changed; repeatable |
|
||||
| `--changes-from REF` | Run `git diff --name-only REF` to auto-detect changed files |
|
||||
|
||||
---
|
||||
|
||||
## Output formats
|
||||
|
||||
Reference in New Issue
Block a user