#!/usr/bin/env bash # Run CI pipeline inside a container (for isolation) # Usage: ./scripts/ci-container.sh [quick|dev|full] set -euo pipefail MODE="${1:-dev}" case $MODE in quick) echo "🐳 Running Quick CI in Container..." SKIP_FLAGS="-e HARNESS_SKIP_DOCKER=true -e HARNESS_SKIP_MATH_AUDIT=true -e HARNESS_SKIP_SECURITY=true" ;; dev) echo "🐳 Running Development CI in Container..." SKIP_FLAGS="-e HARNESS_SKIP_DOCKER=true" ;; full) echo "🐳 Running Full CI in Container (no Docker build)..." SKIP_FLAGS="-e HARNESS_SKIP_DOCKER=true" ;; *) echo "Usage: $0 [quick|dev|full]" echo " quick - Fast validation (30-60s)" echo " dev - Development pipeline (1-2min)" echo " full - Complete validation except Docker (2-3min)" exit 1 ;; esac # Check for container runtime if command -v podman >/dev/null 2>&1; then RUNTIME="podman" elif command -v docker >/dev/null 2>&1; then RUNTIME="docker" else echo "❌ Error: Neither podman nor docker found" echo "Install with: sudo apt install podman" exit 1 fi echo "Using container runtime: $RUNTIME" echo "" # Create cache directories for performance mkdir -p .gocache .gomodcache # Run pipeline in container $RUNTIME run --rm \ -v "$(pwd)":/workspace \ -v "$(pwd)/.gocache":/root/.cache/go-build \ -v "$(pwd)/.gomodcache":/go/pkg/mod \ -w /workspace \ $SKIP_FLAGS \ golang:1.25-alpine \ sh -c " echo 'Installing CI tools...' && apk add --no-cache git make bash curl && go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest && echo 'Running pipeline...' && ./harness/local-ci-pipeline.sh " echo "" echo "✅ Container CI completed successfully!" echo "📊 Check reports in: harness/reports/"