test: Add comprehensive pipeline test suite and documentation
- 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
This commit is contained in:
parent
88683c67e1
commit
2d789cfcde
4 changed files with 927 additions and 0 deletions
223
tests/test_pipeline.sh
Executable file
223
tests/test_pipeline.sh
Executable file
|
|
@ -0,0 +1,223 @@
|
|||
#!/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
|
||||
104
tests/test_pipeline_basic.sh
Executable file
104
tests/test_pipeline_basic.sh
Executable file
|
|
@ -0,0 +1,104 @@
|
|||
#!/bin/bash
|
||||
# Basic pipeline validation
|
||||
# Just verify the core files exist and have correct structure
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$REPO_ROOT" || exit 1
|
||||
|
||||
PASSED=0
|
||||
FAILED=0
|
||||
|
||||
echo "Pipeline Validation"
|
||||
echo "=================="
|
||||
echo ""
|
||||
|
||||
# Test 1: .gitlab-ci.yml exists
|
||||
if [ -f .gitlab-ci.yml ]; then
|
||||
echo "✓ .gitlab-ci.yml exists"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ .gitlab-ci.yml missing"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
# Test 2: All scripts exist
|
||||
for SCRIPT in scripts/detect-changes.sh scripts/generate-matrix.sh scripts/build-clients.sh scripts/test-sdk.sh scripts/filter-results.sh scripts/science/{validate-examples,lint-all-sdks,benchmark-clients}.sh; do
|
||||
if [ -f "$SCRIPT" ] && [ -x "$SCRIPT" ]; then
|
||||
echo "✓ $(basename "$SCRIPT") exists and is executable"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ $(basename "$SCRIPT") missing or not executable"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
# Test 3: detect-changes produces JSON
|
||||
echo ""
|
||||
if bash scripts/detect-changes.sh 2>/dev/null | jq . > /dev/null 2>&1; then
|
||||
echo "✓ detect-changes.sh produces valid JSON"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ detect-changes.sh output is not valid JSON"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
# Test 4: generate-matrix handles empty changes
|
||||
if echo '{"changed_langs": [], "test_all": false}' > changes.json && \
|
||||
bash scripts/generate-matrix.sh 2>/dev/null | head -1 | grep -q "#"; then
|
||||
echo "✓ generate-matrix.sh handles empty changes"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ generate-matrix.sh failed on empty changes"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
# Test 5: generate-matrix generates matrix for changes
|
||||
if echo '{"changed_langs": ["python"], "test_all": false}' > changes.json && \
|
||||
bash scripts/generate-matrix.sh 2>/dev/null | grep -q "SDK_LANG:"; then
|
||||
echo "✓ generate-matrix.sh generates test matrix"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ generate-matrix.sh doesn't generate matrix"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
rm -f changes.json test-matrix.yml
|
||||
|
||||
# Test 6: No hardcoded credentials
|
||||
if ! grep -r "unsb-sk-\|unsb-pk-" scripts/ 2>/dev/null; then
|
||||
echo "✓ No hardcoded credentials in scripts"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ Found hardcoded credentials"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
# Test 7: Scripts reference env vars
|
||||
if grep -q "UNSANDBOX_API_KEY\|UNSANDBOX_PUBLIC_KEY" scripts/*.sh scripts/science/*.sh 2>/dev/null; then
|
||||
echo "✓ Scripts use environment variables for auth"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ Scripts don't reference auth env vars"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
# Test 8: PIPELINE.md documentation exists
|
||||
if [ -f PIPELINE.md ]; then
|
||||
echo "✓ PIPELINE.md documentation exists"
|
||||
PASSED=$((PASSED + 1))
|
||||
else
|
||||
echo "✗ PIPELINE.md documentation missing"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=================="
|
||||
echo "Total: $PASSED passed, $FAILED failed"
|
||||
if [ $FAILED -eq 0 ]; then
|
||||
echo "✓ All checks passed"
|
||||
exit 0
|
||||
else
|
||||
echo "✗ Some checks failed"
|
||||
exit 1
|
||||
fi
|
||||
228
tests/test_pipeline_scripts.sh
Executable file
228
tests/test_pipeline_scripts.sh
Executable file
|
|
@ -0,0 +1,228 @@
|
|||
#!/bin/bash
|
||||
# Test pipeline scripts in isolation
|
||||
# Validates: syntax, basic functionality, error handling
|
||||
|
||||
set -e
|
||||
|
||||
TESTS_PASSED=0
|
||||
TESTS_FAILED=0
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
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_skip() {
|
||||
echo -e "${YELLOW}⊘${NC} (skipped)"
|
||||
}
|
||||
|
||||
cd /home/fox/git/un-inception
|
||||
|
||||
# ============================================================================
|
||||
# Test 1: detect-changes.sh syntax
|
||||
# ============================================================================
|
||||
test_case "detect-changes.sh has valid bash syntax"
|
||||
if bash -n scripts/detect-changes.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in detect-changes.sh"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 2: generate-matrix.sh syntax
|
||||
# ============================================================================
|
||||
test_case "generate-matrix.sh has valid bash syntax"
|
||||
if bash -n scripts/generate-matrix.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in generate-matrix.sh"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 3: build-clients.sh syntax
|
||||
# ============================================================================
|
||||
test_case "build-clients.sh has valid bash syntax"
|
||||
if bash -n scripts/build-clients.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in build-clients.sh"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 4: test-sdk.sh syntax
|
||||
# ============================================================================
|
||||
test_case "test-sdk.sh has valid bash syntax"
|
||||
if bash -n scripts/test-sdk.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in test-sdk.sh"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 5: filter-results.sh syntax
|
||||
# ============================================================================
|
||||
test_case "filter-results.sh has valid bash syntax"
|
||||
if bash -n scripts/filter-results.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in filter-results.sh"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 6: Science job scripts syntax
|
||||
# ============================================================================
|
||||
test_case "validate-examples.sh has valid bash syntax"
|
||||
if bash -n scripts/science/validate-examples.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in validate-examples.sh"
|
||||
fi
|
||||
|
||||
test_case "lint-all-sdks.sh has valid bash syntax"
|
||||
if bash -n scripts/science/lint-all-sdks.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in lint-all-sdks.sh"
|
||||
fi
|
||||
|
||||
test_case "benchmark-clients.sh has valid bash syntax"
|
||||
if bash -n scripts/science/benchmark-clients.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Bash syntax error in benchmark-clients.sh"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 7: detect-changes with no changes
|
||||
# ============================================================================
|
||||
test_case "detect-changes handles no SDK changes"
|
||||
TMPDIR=$(mktemp -d)
|
||||
cd "$TMPDIR"
|
||||
git init > /dev/null 2>&1 || true
|
||||
if bash /home/fox/git/un-inception/scripts/detect-changes.sh 2>/dev/null | \
|
||||
jq -r '.test_all' | grep -q "false"; then
|
||||
test_pass
|
||||
rm -rf "$TMPDIR"
|
||||
else
|
||||
test_fail "detect-changes failed to handle no changes"
|
||||
fi
|
||||
|
||||
cd /home/fox/git/un-inception
|
||||
|
||||
# ============================================================================
|
||||
# Test 8: generate-matrix with empty changes
|
||||
# ============================================================================
|
||||
test_case "generate-matrix handles empty changes"
|
||||
echo '{"changed_langs": [], "test_all": false}' > /tmp/changes.json
|
||||
if bash scripts/generate-matrix.sh 2>/dev/null | grep -q "No SDK changes"; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "generate-matrix didn't handle empty changes correctly"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 9: generate-matrix with single language
|
||||
# ============================================================================
|
||||
test_case "generate-matrix generates jobs for single language"
|
||||
echo '{"changed_langs": ["python"], "test_all": false}' > /tmp/changes.json
|
||||
if bash scripts/generate-matrix.sh 2>/dev/null | grep -q "SDK_LANG: python"; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "generate-matrix didn't generate python job"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 10: generate-matrix produces valid YAML
|
||||
# ============================================================================
|
||||
test_case "generate-matrix output is valid YAML"
|
||||
echo '{"changed_langs": ["python", "javascript"], "test_all": false}' > /tmp/changes.json
|
||||
if bash scripts/generate-matrix.sh 2>/dev/null | head -20 | grep -q "matrix:"; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "generate-matrix didn't produce valid matrix YAML"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 11: build-clients.sh creates build directory
|
||||
# ============================================================================
|
||||
test_case "build-clients.sh creates output directory"
|
||||
rm -rf build/
|
||||
if bash scripts/build-clients.sh > /dev/null 2>&1 && [ -d build ]; then
|
||||
test_pass
|
||||
rm -rf build/
|
||||
else
|
||||
test_fail "build-clients.sh didn't create build directory"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 12: filter-results.sh creates reports directory
|
||||
# ============================================================================
|
||||
test_case "filter-results.sh creates report directory"
|
||||
rm -rf reports/ final-report.xml
|
||||
mkdir -p test-results-python/
|
||||
echo '<?xml version="1.0"?><testsuites tests="1" failures="0"><testsuite name="test"/></testsuites>' > test-results-python/test-results.xml
|
||||
if bash scripts/filter-results.sh > /dev/null 2>&1 && [ -f final-report.xml ]; then
|
||||
test_pass
|
||||
rm -rf reports/ final-report.xml test-results-python/
|
||||
else
|
||||
test_fail "filter-results.sh didn't create reports"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 13: Scripts don't have hardcoded credentials
|
||||
# ============================================================================
|
||||
test_case "Scripts have no hardcoded credentials"
|
||||
if grep -r "unsb-sk-" scripts/ 2>/dev/null || \
|
||||
grep -r "unsb-pk-" scripts/ 2>/dev/null || \
|
||||
grep -r "UNSANDBOX_API_KEY=" scripts/ 2>/dev/null; then
|
||||
test_fail "Found hardcoded credentials in scripts"
|
||||
else
|
||||
test_pass
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Test 14: Scripts properly use environment variables
|
||||
# ============================================================================
|
||||
test_case "Scripts reference env variables"
|
||||
if grep -q "UNSANDBOX_API_KEY" scripts/*.sh scripts/science/*.sh 2>/dev/null; then
|
||||
test_pass
|
||||
else
|
||||
test_fail "Scripts don't reference auth environment variables"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Summary
|
||||
# ============================================================================
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo "Pipeline Script 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 script tests passed!${NC}"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}✗ Some tests failed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue