v0.8.0
Notable features#
glci merged — Print the fully-resolved CI configuration after includes, extends, and inputs are applied (docs)- Structured JSON output — Machine-readable run and state output for scripting and CI integration (docs)
- Git submodules — The mock server now serves submodules, including for child pipelines (docs)
[images] config section — Retarget the images glci pulls for its own infrastructure (docs)- GitLab’s wildcard path grammar —
include: local: wildcards and repository path patterns now match GitLab exactly (docs)
- fix(cli): carry –file into pipelines started from the TUI !152 — thanks @vertisan!
- docs: Resolve the committed merge conflict in the doctor section !153 — thanks @vertisan!
- fix(runner): give parallel shards CI_NODE_INDEX and CI_NODE_TOTAL !156 — thanks @vertisan!
- fix(cli): Redact masked variable values from include-resolution output !165 — thanks @vertisan!
- feat(glob): Add GitLab’s repository wildcard path grammar !166 — thanks @vertisan!
- fix(config): Fix flatten nested
stages: arrays as GitLab does !167 — thanks @vertisan! - fix(config): Reject include paths without a YAML extension !168 — thanks @vertisan!
- fix(rules): Stop a rules: if: regex error quoting the pattern !178 — thanks @vertisan!
- fix(config): Reject non-string script: entries instead of dropping them !176 — thanks @vertisan!
- fix(rules): Evaluate a job’s rules against its own scope !175 — thanks @vertisan!
- fix(rules): Reject an unparseable
if: instead of dropping the job !174 — thanks @vertisan! - fix(cli): Mask a shadowed secret in the rule trace !177 — thanks @vertisan!
- fix(rules): Make
rules: if: operands match GitLab !180 — thanks @vertisan! - fix(planner): Drop a dangling
optional: needs edge !181 — thanks @vertisan! - fix(daemon): Resume against the commit the mock actually serves !182 — thanks @vertisan!
New features#
- feat(cli): add
glci merged to print the fully-resolved CI configuration (caa1ca7) - feat(cli): structured JSON output for runs and state (6acebd7)
- feat(submodules): serve git submodules from the mock server (bbda830)
- feat(submodules): serve submodules for child pipelines (fbeceb2)
- feat(glob): Add GitLab’s repository wildcard path grammar (2a5e7b2)
- feat(changelog): credit community contributions in release notes (7fce26d)
- feat(config): Add [images] to retarget the images glci pulls for itself (08ae0da)
Bug fixes#
- fix(daemon): don’t drop trace lines at the live-log handover (f1a09c5)
- fix(daemon): keep a log event stamped exactly at the dedup cutoff (9271ad8)
- fix(daemon): stop FlushTrace duplicating bytes into the persisted trace (fc631e3)
- fix(daemon): make RemoveTraceWriter wait for in-flight trace writes (d77b43f)
- fix(daemon): track the trace stream by offset, not by bytes counted (da2b6e0)
- fix(daemon): retire the trace writer that a re-registration replaces (f104087)
- fix(daemon): serve the project’s default branch as the repo’s HEAD (334cb8c)
- fix(daemon): resolve child pipeline includes the way GitLab does (4c4ba68)
- fix(daemon): fall back to the CI file’s directory outside a git repo (e1036c0)
- fix(cli): carry –file into pipelines started from the TUI (624269c)
- fix(runner): give parallel shards CI_NODE_INDEX and CI_NODE_TOTAL (e9263fe)
- fix(daemon): stream artifacts so reuse survives archives over 1 GB (b8ff3b7)
- fix(mockserver): cap what an artifact size hint may reserve (8aaa242)
- fix: address Duo review on
glci merged (9fa4711) - fix(cli): scope job durations by pipeline in the JSON stream (aee2bf5)
- fix(submodules): address Duo review on submodule serving (1b2b35d)
- fix(daemon): honour allow_failure on the failure paths (5c73c1e)
- fix(compat): let rules:allow_failure discard allow_failure:exit_codes (474cf01)
- fix(daemon): report the effective allow_failure on the failure paths (f860552)
- fix(submodules): claim a triggered project’s path before uploading it (ca7433b)
- fix(config): reject the hooks: sub-keys GitLab rejects (ba5c974)
- fix(tui): make log search work and stop esc trapping the log view (d260ace)
- fix(tui): reserve the search bar line before auto-scrolling the graph (69544be)
- fix(tui): make the log viewer’s wrap toggle work and enable horizontal panning (80b2636)
- fix(cli): redact secret values from include-resolution output (34b35a4)
- fix(daemon): redact local-layer secrets from trigger job traces (3539b17)
- fix(cli): redact include errors on the daemon path and scope the mask flags (a3b0d82)
- fix(variables): cover quoted and encoded secret forms, and surface redaction (6e79f9d)
- fix(variables): mask only marked variables, matching GitLab (33c584d)
- fix(variables): count characters not bytes in GitLab’s masking rule (c3b39c7)
- fix(cli): re-arm the redaction hint on each watch pass (4423875)
- fix(cli): close remaining mask gaps found in review (218966c)
- fix(daemon): sanitize trigger job logs and redact the finished line (e01d335)
- fix(cli): keep mask warnings inside doctor’s report (b2de5a3)
- fix(config): Match include: local: wildcards the way GitLab does (de62a74)
- fix(daemon): Use one wildcard predicate for trigger includes (cdfa3c0)
- fix(glob): Bound pathological wildcard patterns and harden expansion (0390056)
- fix(config): Flatten nested stages: arrays as GitLab does (5edfce9)
- fix(config): Reject include paths without a YAML extension (5181e4b)
- fix(config): Preserve include exemptions on wildcard re-validation (dc545eb)
- fix(rules): Stop a bad regex error quoting the pattern (b394c2a)
- fix(config): Reject non-string script: entries instead of dropping them (d8641f0)
- fix(rules): Evaluate a job’s rules against its own scope (721dae5)
- fix(changelog): anchor the credit marker to end of line (361e02f)
- fix(config): Report a malformed config instead of dropping it (332d8a5)
- fix(planner): Evaluate workflow: rules: instead of dropping them (aea593d)
- fix(config): Expand parallel:matrix in declaration order (c150ddb)
- fix(rules): Reject an unparseable
if: instead of dropping the job (1ee18d7) - fix(cli): Mask a shadowed secret in the rule trace (5197ccb)
- fix(rules): Bind
! to its operand instead of the whole comparison (83b6180) - fix(rules): Accept a negation or a group wherever a value is valid (0a0f697)
- fix(planner): Drop a dangling
optional: needs edge (cd3b6a6) - fix(daemon): Resume against the commit the mock serves (e7bfc77)
- fix(daemon): Validate the resumed ref as well as the commit (7a4bd24)
Maintenance#
- docs: the per-job trace lock doesn’t isolate jobs from a slow writer (7893238)
- docs: child include resolution, cloned targets, and CI_DEFAULT_BRANCH (26b879b)
- test(mockserver): give the advanceHeads helper a committer identity (59440f2)
- docs: Resolve the committed merge conflict in the doctor section (d073808)
- ci: disable buildx provenance attestations on the image push (628a93b)
- docs: allow_failure semantics on the daemon’s failure paths (9d02159)
- test(e2e): integration fixture for allow_failure:exit_codes (a50e3c7)
- refactor(variables): Move value redaction into a shared package (ae984a5)
- docs: Document include-output masking and the –mask flag (3b30cf1)
- refactor(gitutil): Share the project file listing with include resolution (9cf8e58)
- test(e2e): Cover a recursive wildcard include in the comprehensive fixture (f2e2907)
- docs(glob): Scope the package doc’s grammar claim to CI patterns (f548ad7)
- test(cli): Move include-redaction fixtures out of the query string (cb3ffa6)
- test(rules): Cover the rendered rule trace and the operand capture (c533fde)
- test(e2e): Quote the script: entries GitLab’s YAML reads as mappings (1f1784e)
- test(e2e): Make the two checks that only now run assert what GitLab does (8239742)
- docs: Move a note out of the event-types table (ab70165)
Other changes#
- Resolve remote includes when parsing child pipelines (84b5a75)