Adds cleanup-services stage to child pipeline that destroys any
existing test services before the 42-language parallel test matrix
runs. Prevents concurrency limit failures from orphaned services.
Remove compiled language filter - the sandbox has compilers!
Now tests Go, Rust, C, C++, Java, Kotlin, etc. through the API.
Added hello world code for all compiled languages.
- Add -- separator to pass arguments to SDK scripts correctly
- Add complete file mappings for all 42 languages (r, awk, tcl, scheme,
commonlisp, clojure, elixir, erlang, groovy, raku, julia, dart,
prolog, forth, powershell, objc, v, etc.)
- Filter compiled languages from test matrix (no point running jobs
that will be skipped)
- Improve validation patterns for list endpoints (accept empty lists)
- Add fallback file search for unmapped languages
GitLab's YAML parser was failing with 'jobs:test:script config should be
a string or a nested array of strings' due to the inline comment in the
before_script section of the dynamically generated test-matrix.yml.
- Build C CLI binary for testing all SDKs through unsandbox
- test-sdk.sh runs: build/un → unsandbox → SDK → unsandbox → test code
- Each SDK is tested for --help and code execution
- No local language interpreters needed on build server
- Implement detect-changes stage: identifies which SDKs changed
- Implement generate-matrix stage: creates dynamic test matrix based on changes
- Only test SDKs that changed (5x faster than testing all 42)
- Parallel test execution via GitLab matrix strategy
- Science jobs for pool burning: validate-examples, lint-all-sdks, benchmark-clients
- Zero cost execution: uses warm pool + idle capacity
- Comprehensive reporting with JUnit XML and markdown summaries
Pipeline flow:
detect-changes → generate-matrix → build → test (parallel) → science → report
The unfair advantage:
- GitLab sees changes, tests only what's needed
- GitHub shows traditional Actions (external view)
- Internal: 5x faster, $0 per execution
- External: looks normal (strategic asymmetry)