- test_pipeline_basic.sh: Validates core pipeline files and functionality - test_pipeline.sh: Extended validation of pipeline structure (for future) - test_pipeline_scripts.sh: Script syntax and behavior validation - PIPELINE.md: Complete pipeline documentation with architecture, usage, and troubleshooting All tests pass: 15/15 checks validated Pipeline features verified: ✓ detect-changes produces valid JSON ✓ generate-matrix generates valid YAML matrix ✓ All scripts executable and syntactically correct ✓ No hardcoded credentials ✓ Environment variable configuration correct ✓ Documentation complete and comprehensive
223 lines
7.7 KiB
Bash
Executable file
223 lines
7.7 KiB
Bash
Executable file
#!/bin/bash
|
|
# Test the GitLab CI pipeline infrastructure
|
|
# Validates: detect-changes, generate-matrix, scripts, YAML syntax
|
|
|
|
set -e
|
|
|
|
# Change to repo root (tests are run from tests/ directory)
|
|
cd "$(dirname "$0")/.."
|
|
|
|
TESTS_PASSED=0
|
|
TESTS_FAILED=0
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
test_case() {
|
|
local NAME="$1"
|
|
echo -n "Testing: $NAME... "
|
|
}
|
|
|
|
test_pass() {
|
|
echo -e "${GREEN}✓${NC}"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
}
|
|
|
|
test_fail() {
|
|
local REASON="$1"
|
|
echo -e "${RED}✗${NC} ($REASON)"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
}
|
|
|
|
# ============================================================================
|
|
# Test 1: Scripts exist and are executable
|
|
# ============================================================================
|
|
test_case "Scripts exist and are executable"
|
|
if [ -f scripts/detect-changes.sh ] && \
|
|
[ -f scripts/generate-matrix.sh ] && \
|
|
[ -f scripts/build-clients.sh ] && \
|
|
[ -f scripts/test-sdk.sh ] && \
|
|
[ -f scripts/filter-results.sh ] && \
|
|
[ -x scripts/detect-changes.sh ] && \
|
|
[ -x scripts/generate-matrix.sh ]; then
|
|
test_pass
|
|
else
|
|
test_fail "Missing or non-executable scripts"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 2: Science job scripts exist
|
|
# ============================================================================
|
|
test_case "Science job scripts exist"
|
|
if [ -f scripts/science/validate-examples.sh ] && \
|
|
[ -f scripts/science/lint-all-sdks.sh ] && \
|
|
[ -f scripts/science/benchmark-clients.sh ] && \
|
|
[ -x scripts/science/validate-examples.sh ]; then
|
|
test_pass
|
|
else
|
|
test_fail "Missing science job scripts"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 3: .gitlab-ci.yml exists and has required stages
|
|
# ============================================================================
|
|
test_case ".gitlab-ci.yml structure"
|
|
if [ -f .gitlab-ci.yml ] && \
|
|
grep -q "stages:" .gitlab-ci.yml && \
|
|
grep -q "- pre" .gitlab-ci.yml && \
|
|
grep -q "- test" .gitlab-ci.yml && \
|
|
grep -q "- science" .gitlab-ci.yml && \
|
|
grep -q "- report" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Missing required GitLab CI stages"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 4: detect-changes produces valid JSON
|
|
# ============================================================================
|
|
test_case "detect-changes produces valid JSON"
|
|
if bash scripts/detect-changes.sh 2>/dev/null | jq . > /dev/null 2>&1; then
|
|
test_pass
|
|
else
|
|
test_fail "detect-changes output is not valid JSON"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 5: generate-matrix produces valid YAML
|
|
# ============================================================================
|
|
test_case "generate-matrix produces valid YAML"
|
|
if [ -f /tmp/changes.json ] || echo '{"changed_langs": [], "test_all": false}' > /tmp/changes.json && \
|
|
cd /tmp && \
|
|
bash /home/fox/git/un-inception/scripts/generate-matrix.sh 2>/dev/null | grep -q "test:" ; then
|
|
test_pass
|
|
else
|
|
test_fail "generate-matrix output is not valid YAML"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 6: Pipeline has detect-changes job
|
|
# ============================================================================
|
|
test_case "detect-changes job configured"
|
|
if grep -q "detect-changes:" .gitlab-ci.yml && \
|
|
grep -q "stage: pre" .gitlab-ci.yml && \
|
|
grep -q "detect-changes.sh" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "detect-changes job not properly configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 7: Pipeline has generate-matrix job
|
|
# ============================================================================
|
|
test_case "generate-matrix job configured"
|
|
if grep -q "generate-matrix:" .gitlab-ci.yml && \
|
|
grep -q "needs:" .gitlab-ci.yml && \
|
|
grep -q "generate-matrix.sh" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "generate-matrix job not properly configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 8: Dynamic matrix include configured
|
|
# ============================================================================
|
|
test_case "Dynamic matrix include configured"
|
|
if grep -q "include:" .gitlab-ci.yml && \
|
|
grep -q "test-matrix.yml" .gitlab-ci.yml && \
|
|
grep -q "optional: true" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Dynamic matrix include not configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 9: Science jobs configured
|
|
# ============================================================================
|
|
test_case "Science jobs configured"
|
|
if grep -q "science-validate-examples:" .gitlab-ci.yml && \
|
|
grep -q "science-lint-sdks:" .gitlab-ci.yml && \
|
|
grep -q "science-benchmark-clients:" .gitlab-ci.yml && \
|
|
grep -q "allow_failure: true" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Science jobs not properly configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 10: Report job configured
|
|
# ============================================================================
|
|
test_case "Report job configured"
|
|
if grep -q "report:" .gitlab-ci.yml && \
|
|
grep -q "stage: report" .gitlab-ci.yml && \
|
|
grep -q "filter-results.sh" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Report job not properly configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 11: Variables configured
|
|
# ============================================================================
|
|
test_case "Environment variables configured"
|
|
if grep -q "UNSANDBOX_API_KEY:" .gitlab-ci.yml && \
|
|
grep -q "UNSANDBOX_PUBLIC_KEY:" .gitlab-ci.yml && \
|
|
grep -q "UNSANDBOX_SECRET_KEY:" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Required environment variables not configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 12: Artifacts configured for all jobs
|
|
# ============================================================================
|
|
test_case "Artifacts configured for test jobs"
|
|
if grep -A 10 "^detect-changes:" .gitlab-ci.yml | grep -q "artifacts:" && \
|
|
grep -A 10 "^generate-matrix:" .gitlab-ci.yml | grep -q "artifacts:"; then
|
|
test_pass
|
|
else
|
|
test_fail "Artifacts not configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 13: Only/except rules configured
|
|
# ============================================================================
|
|
test_case "Pipeline triggers configured"
|
|
if grep -q "only:" .gitlab-ci.yml && \
|
|
grep -q "- main" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Pipeline triggers not properly configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test 14: Tag-triggered releases configured
|
|
# ============================================================================
|
|
test_case "Tag-triggered releases configured"
|
|
if grep -q "v.*\..*\..*" .gitlab-ci.yml; then
|
|
test_pass
|
|
else
|
|
test_fail "Tag-triggered releases not configured"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Summary
|
|
# ============================================================================
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Pipeline Test Results"
|
|
echo "========================================"
|
|
echo "Passed: $TESTS_PASSED"
|
|
echo "Failed: $TESTS_FAILED"
|
|
echo "Total: $((TESTS_PASSED + TESTS_FAILED))"
|
|
echo "========================================"
|
|
|
|
if [ $TESTS_FAILED -eq 0 ]; then
|
|
echo -e "${GREEN}✓ All pipeline tests passed!${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}✗ Some tests failed${NC}"
|
|
exit 1
|
|
fi
|