Compatibility Notes
This page tracks known OS / version combinations that require a workaround in the example CI workflows. Each entry records what the workaround is, why it is needed, and what must happen before it can be removed.
The matrix JSON files (examples/<lang>/<lang>_project_matrix.json) always declare
the full set of platforms and versions that json2vars-setter supports. Workarounds
live exclusively in the per-language *_test.yml workflows, so the declared support
surface stays accurate even while a temporary CI fix is in place.
Swift — versions capped at 6.2.1 (setup-swift@v2.4.0 limit)
| Field | Detail |
|---|---|
| Affected setup action | swift-actions/setup-swift@v2.4.0 |
| Workaround | swift_project_matrix.json uses ["6.2", "6.2.1"] instead of version-cache stable/latest (6.2.4/6.3.2) |
| Introduced | PR #618 (2026-07) |
Root cause
swift-actions/setup-swift@v2.4.0 contains a hardcoded version list
(src/swift-versions.ts) that ends at 6.2.1. Versions 6.2.2, 6.2.3,
6.2.4, and 6.3.x are not in the list and produce:
At the same time, the macos-latest runner was upgraded to macOS 26 (Xcode 26.5,
Swift 6.3.2 SDK), which made Swift 6.1.x incompatible. The highest version in the
v2.4.0 list that still works on macOS 26 is 6.2.1.
setup-swift@v3.0.0-beta.1 (2025-11-30) rewrites the action to use
Swiftly and installs any version from
swift.org dynamically — no hardcoded list. It is beta and has not reached a stable
release yet.
How to restore
- Confirm
swift-actions/setup-swiftv3 stable is released. - Update the
uses: swift-actions/setup-swift@<sha>pin inswift_test.ymlto the v3 stable SHA (via Dependabot or manually; remove the Dependabotignorerule for major-version bumps if one exists). - Update
examples/swift/swift_project_matrix.jsonto the version-cachestableandlatestvalues (currently6.2.4/6.3.2). - Remove the WORKAROUND comment in
swift_test.yml. - Open a PR and close this item.
Zig — macOS runner pinned to macos-15
| Field | Detail |
|---|---|
| Affected versions | Zig 0.14.1, 0.15.2 (all current releases) |
| Affected runner | macos-latest (= macOS 26 as of 2026-07) |
| Workaround | zig_test.yml maps macos-latest → macos-15 at the runs-on level |
| Introduced | PR #618 (2026-07) |
Root cause
macos-latest was upgraded to macOS 26 (arm64) + Xcode 26.5, which ships a
new macOS 26 SDK. Zig's bundled libc shim does not yet recognise the SDK's
revised symbol layout, causing linker errors for basic C library symbols
(_abort, _bzero, _free, _clock_gettime, etc.) even in a minimal program.
This is an upstream Zig issue unrelated to json2vars-setter. The matrix JSON
keeps macos-latest to accurately show the action supports that platform;
only the actual runner used in CI is temporarily downgraded.
How to restore
- Confirm Zig releases SDK support for macOS 26 (watch
ziglang/zig releases or the
Refresh data filesworkflow output). - In
.github/workflows/zig_test.yml, changerun_tests.runs-onback to${{ matrix.os }}and remove the mapping comment. - Open a PR; CI should pass on
macos-latestwith the new Zig release.
Ruby — 3.4.0 excluded on windows-latest
| Field | Detail |
|---|---|
| Affected version | Ruby 3.4.0 |
| Affected runner | windows-latest |
| Workaround | ruby_test.yml matrix exclude: block skips (windows-latest, 3.4.0) |
| Introduced | commit e22a9b83 (pre-v1.9.0) |
Root cause
Ruby 3.4.0 has a known build/runtime issue on Windows that was fixed in Ruby 3.4.1. The exact failure mode is a native-extension or MSYS2 toolchain incompatibility specific to the 3.4.0 point release; 3.4.1 and later run cleanly on Windows.
The matrix JSON keeps 3.4.0 so that json2vars-setter's version-variable output
for that release string is still exercised on Linux and macOS. Only the
windows-latest + 3.4.0 leg is skipped.
How to restore
Once Ruby 3.4.0 is confirmed fixed on Windows (or once 3.4.0 is no longer in the supported matrix because newer patch releases supersede it):
- Remove the
exclude:block from.github/workflows/ruby_test.yml. - Open a PR; the
(windows-latest, 3.4.0)leg should pass.
Alternatively, if 3.4.0 is dropped from ruby_project_matrix.json because
stable has moved to 3.4.x+ in the version cache, simply remove the version
from the matrix JSON and the exclusion becomes moot.
Adding a new workaround
When you discover a new OS / version incompatibility that is not a
json2vars-setter bug:
- Keep the affected platform/version in the matrix JSON.
- Add the minimum workaround in the
*_test.ymlworkflow (runner mapping, matrixexclude:, orcontinue-on-error). - Add a comment in the workflow pointing to this page.
- Add a new section here following the template above.
- Open a tracking entry in
.issues/if the fix is non-trivial.