un-inception/scripts/generate-matrix.sh
russell@unturf.com 75f687f12f feat: Complete Python and C SDK implementations with examples and pipeline integration
Python Sync SDK (clients/python/sync/):
- 712 lines core implementation with 13 public APIs
- HMAC-SHA256 authentication with OpenSSL
- 4-tier credential system (args > env > ~/.unsandbox > ./accounts.csv)
- Language caching with 1-hour TTL
- 64+ comprehensive unit tests
- Full documentation (README, USAGE, IMPLEMENTATION)

Python Async SDK (clients/python/async/):
- 705 lines async implementation using aiohttp
- Full async/await pattern support
- Exponential backoff polling strategy
- 200+ test cases with ~95% coverage
- 7 working async examples
- 5 documentation guides

C SDK (clients/c/):
- 823 lines C implementation
- Header file with 15 public functions
- OpenSSL HMAC-SHA256 + libcurl HTTP client
- Language detection for 48 file extensions
- 22/22 tests passing
- Proper memory management

Examples:
- 14 Python examples (7 sync, 7 async) with docstrings
- 4 C examples (hello_world, fibonacci, error_handling, credentials)
- All examples ready for pipeline validation
- Expected outputs documented for validation

Pipeline Integration:
- Updated .gitlab-ci.yml with gcc/musl-dev for C compilation
- Enhanced validate-examples.sh with C compilation support
- Updated detect-changes.sh to recognize python/c changes
- Updated generate-matrix.sh with python/c in matrix
- E2E tests updated with mock Python/C examples
- All tests passing (30+ test cases)

Documentation:
- PYTHON_C_INTEGRATION_SUMMARY.md (452 lines)
- Complete API references for both SDKs
- Quick start guides
- Pattern documentation
- Error handling guides
2026-01-15 16:42:58 -05:00

68 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
# Generate dynamic test matrix based on detected changes
# Reads changes.json, outputs test-matrix.yml with parallel jobs
set -e
# Read changes from detect-changes output
CHANGES=$(cat changes.json)
CHANGED_LANGS=$(echo "$CHANGES" | jq -r '.changed_langs[]' 2>/dev/null || echo "")
TEST_ALL=$(echo "$CHANGES" | jq -r '.test_all' 2>/dev/null || echo "false")
# If test_all is true or no changes detected, generate comprehensive matrix
# Now includes Python and C with full SDK support
if [ "$TEST_ALL" = "true" ]; then
LANGS="python javascript typescript go ruby php perl lua bash rust java csharp cpp c haskell kotlin elixir erlang crystal dart nim julia r groovy clojure fsharp ocaml objc d vlang zig fortran cobol scheme lisp tcl awk prolog forth powershell raku"
elif [ -z "$CHANGED_LANGS" ]; then
# No changes - don't generate any jobs
echo "# No SDK changes detected"
exit 0
else
LANGS="$CHANGED_LANGS"
fi
# Start generating test-matrix.yml
cat > test-matrix.yml << 'EOF'
# Dynamically generated test matrix based on changed SDKs
test:
stage: test
image: alpine:latest
parallel:
matrix:
EOF
# Add each language as a parallel job
FIRST=true
for LANG in $LANGS; do
if [ "$FIRST" = true ]; then
echo " - SDK_LANG: $LANG" >> test-matrix.yml
FIRST=false
else
echo " - SDK_LANG: $LANG" >> test-matrix.yml
fi
done
# Complete the test job template
cat >> test-matrix.yml << 'EOF'
script:
- apk add --no-cache curl jq bash
- export TEST_LANG=$SDK_LANG
- |
echo "Testing $TEST_LANG..."
if [ ! -f "un.py" ]; then
echo "ERROR: SDKs not found"
exit 1
fi
# Call unsandbox to test the SDK
- bash scripts/test-sdk.sh "$TEST_LANG"
artifacts:
reports:
junit: "test-results-$SDK_LANG.xml"
paths:
- "test-results-$SDK_LANG/"
expire_in: 30 days
allow_failure: false
retry: 1
EOF
cat test-matrix.yml