fix(ci): Use child pipeline trigger for test matrix

- Child pipeline gets generated test-matrix.yml from artifact
- Each of 42 languages runs as parallel job
- Child pipeline builds its own C CLI
This commit is contained in:
russell@unturf.com 2026-01-17 10:24:08 -05:00
parent 47c63394cf
commit f46d8cd556
3 changed files with 62 additions and 21 deletions

View file

@ -72,11 +72,21 @@ build:
- /^v\d+\.\d+\.\d+$/
# ============================================================================
# STAGE 4: Test Matrix (dynamically included)
# STAGE 4: Test Matrix (child pipeline trigger)
# ============================================================================
include:
- local: test-matrix.yml
optional: true
trigger-test-matrix:
stage: test
needs:
- generate-matrix
- build
trigger:
include:
- artifact: test-matrix.yml
job: generate-matrix
strategy: depend
only:
- main
- /^v\d+\.\d+\.\d+$/
# ============================================================================
# STAGE 5: Science Jobs (Pool Burning)

View file

@ -1,6 +1,6 @@
#!/bin/bash
# Generate dynamic test matrix based on detected changes
# Reads changes.json, outputs test-matrix.yml with parallel jobs
# Reads changes.json, outputs test-matrix.yml as a child pipeline config
set -e
@ -21,25 +21,48 @@ echo "Available SDKs from API: $ALL_SDKS"
if [ "$TEST_ALL" = "true" ]; then
LANGS="$ALL_SDKS"
elif [ -z "$CHANGED_LANGS" ]; then
# No changes - don't generate any test jobs
echo "# No SDK changes detected - no tests to run" > test-matrix.yml
# No changes - create minimal valid child pipeline that does nothing
cat > test-matrix.yml << 'EOF'
# No SDK changes detected - skip tests
stages:
- skip
skip-tests:
stage: skip
tags:
- build
script:
- echo "No SDK changes detected - skipping inception tests"
EOF
echo "No SDK changes - created skip pipeline"
cat test-matrix.yml
exit 0
else
LANGS="$CHANGED_LANGS"
fi
# Start generating test-matrix.yml
# Count languages
LANG_COUNT=$(echo $LANGS | wc -w)
echo "Testing $LANG_COUNT languages: $LANGS"
# Generate child pipeline config
cat > test-matrix.yml << 'EOF'
# Dynamically generated test matrix - inception tests for changed SDKs
# Dynamically generated child pipeline - inception tests
# Each test runs: build/un → unsandbox → SDK → unsandbox → test code
stages:
- test
default:
tags:
- build
variables:
UNSANDBOX_PUBLIC_KEY: $UNSANDBOX_PUBLIC_KEY
UNSANDBOX_SECRET_KEY: $UNSANDBOX_SECRET_KEY
test:
stage: test
tags:
- build
needs:
- build
parallel:
matrix:
EOF
@ -51,9 +74,11 @@ done
# Complete the test job template
cat >> test-matrix.yml << 'EOF'
before_script:
# Build the C CLI for inception testing (child pipeline needs its own build)
- bash scripts/build-clients.sh
script:
- echo "=== Inception Test Matrix ==="
- echo "Testing SDK: $SDK_LANG"
- echo "=== Inception Test: $SDK_LANG ==="
- bash scripts/test-sdk.sh "$SDK_LANG"
artifacts:
reports:
@ -61,10 +86,11 @@ cat >> test-matrix.yml << 'EOF'
paths:
- "test-results-$SDK_LANG/"
expire_in: 30 days
when: always
allow_failure: true
retry: 1
EOF
echo ""
echo "Generated test-matrix.yml:"
echo "Generated test-matrix.yml with $LANG_COUNT parallel jobs:"
cat test-matrix.yml

View file

@ -1,9 +1,14 @@
# Auto-generated test matrix placeholder
# Overwritten by generate-matrix job during CI/CD runs
# Placeholder child pipeline - replaced by generate-matrix job
# This file must be valid GitLab CI YAML for initial pipeline parsing
# Empty job that does nothing (valid GitLab CI syntax)
.test-matrix-placeholder:
stages:
- placeholder
placeholder:
stage: placeholder
tags:
- build
script:
- echo "Placeholder"
- echo "This placeholder is replaced by dynamically generated test matrix"
rules:
- when: never