CodeQL SAST now resolves a build mode per language instead of applying one value to every matrix leg, so language sets with conflicting requirements work in a single call.
'["go","rust"]' was previously impossible — Go rejects build-mode: none and Rust supports nothing else — and now resolves each leg correctly.
languages entries may also be objects carrying a per-language build-mode or runs-on, which makes swift usable since it requires a macOS runner.
A new resolve job validates the language set before any analysis starts. Additive. Callers passing a plain string array need no change, declared permissions are unchanged, and the analyze job keeps the name CodeQL (<language>) so required status checks continue to match. A new non-required check, Resolve language matrix, appears alongside it.
Full notes: CHANGELOG.md