Skip to content

ci(consistency): one matrix workflow for the shared suite - #401

Closed
Peefy wants to merge 4 commits into
mainfrom
pr/unified-consistency-ci
Closed

Peefy wants to merge 4 commits into
mainfrom
pr/unified-consistency-ci

Conversation

@Peefy

@Peefy Peefy commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Item F of docs/architecture.md: a single consistency.yaml replaces the per-language silos as the CI gate for the shared consistency suite. It follows the pattern ast-diff-test.yaml already uses — one job, matrix.include of bindings, steps gated on matrix.binding, checkout into lib/.

Legs: one ubuntu-latest leg per binding (15 bindings; lua gets 5.4 + luajit), plus the legs whose failure modes are OS-specific:

  • go on windows-latest (purego LoadLibrary path) and macos-latest
  • go in the golang:1.25-alpine3.21 container (static musl link against go/lib/linux-musl-amd64/libkcl.a)
  • dart on windows-latest (the kcl.dll, no-lib-prefix path)
  • swift on macos-latest (setup-swift cannot provision Linux)

20 legs total.

Why not more OS replication

Consistency checks that every language decodes the core's output identically — the interesting variance is language-level, and the heavy per-OS matrices stay in the per-language workflows. Every runner also self-checks full manifest coverage, so this matrix cannot silently drop a language.

Notes

  • Path filters include tests/consistency/**, spec/**, go/lib/** (prebuilt consumers), wasm/kcl.wasm, Cargo.toml and every binding dir — the same roots the per-language workflows watch.
  • The per-language workflows keep their build/pack/publish roles and full suites; this workflow owns the consistency gate. A follow-up can drop the now-redundant tests/consistency/** entries from their path filters once this is required.
  • Works with the 13-case manifest on main today; the 29-case stack (test(consistency): run every manifest case across the bindings #394 and up) passes on it as each runner lands.

@Peefy
Peefy force-pushed the pr/unified-consistency-ci branch 3 times, most recently from 68accfc to 9c1749d Compare October 8, 2026 03:18
Peefy added 4 commits October 8, 2026 11:27
Item F of docs/architecture.md: a single consistency workflow replaces
the per-language silos as the gate for tests/consistency/**, spec/** and
the prebuilt native libs. Each binding gets one ubuntu leg (the heavy OS
matrices stay in the per-language workflows), plus the legs whose failure
modes are OS-specific: go on windows (purego LoadLibrary), go in the
alpine musl container, go and swift on macOS, and dart on windows for
the kcl.dll path. Every runner already asserts it dispatches the whole
manifest, so the matrix cannot silently drop a language.

Signed-off-by: Peefy <xpf6677@163.com>
$GITHUB_ENV only applies to subsequent steps, so the dart leg loaded
no native library and every test that touches the core failed.

Signed-off-by: Peefy <xpf6677@163.com>
The go musl leg links the prebuilt statically and never builds from
source; installing the rustup musl host toolchain there fails to run
(_Unwind_* symbol errors) and kills the leg before the tests.

Signed-off-by: Peefy <xpf6677@163.com>
alpine has no bash; the conditional shell keeps bash everywhere else.

Signed-off-by: Peefy <xpf6677@163.com>
@Peefy
Peefy force-pushed the pr/unified-consistency-ci branch from 9c1749d to 7d697ee Compare October 8, 2026 03:27
@Peefy Peefy closed this Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant