provisioning/justfiles/docker.just

260 lines
9.5 KiB
Text
Raw Normal View History

# Docker Module - Container image building and management (Nickel-native)
# =========================================================================
# Source of truth: Nickel templates in schemas/platform/templates/docker/
# Dockerfiles are GENERATED on-demand, NOT tracked in git
# Show detailed docker help
@docker-help:
echo "🐳 DOCKER MODULE HELP (Nickel-Native Build System)"
echo "=================================================="
echo ""
echo "This module uses Nickel templates + cargo-chef for optimized Docker builds:"
echo "• Dockerfiles generated on-demand from Nickel schemas"
echo "• 4-stage builds: PLANNER → CACHER → BUILDER → RUNTIME"
echo "• 60-80% build time reduction via dependency caching"
echo "• BuildKit cache modes: local, registry, inline"
echo "• Mode-specific tuning: solo, cicd, enterprise"
echo ""
echo "SERVICES:"
echo " orchestrator - Workflow engine and task queue"
echo " control-center - Policy and RBAC management"
echo " mcp-server - AI/LLM integration"
echo " extension-registry - Plugin management"
echo " provisioning-daemon - System daemon"
echo " ai-service - AI service integration"
echo " rag - Retrieval augmented generation"
echo " vault-service - Secret management"
echo ""
echo "RECIPES:"
echo " docker-gen Generate Dockerfiles from Nickel templates"
echo " docker-gen-compose Generate docker-compose.build.yml"
echo " docker-build SERVICES Build service(s) with auto-generation"
echo " docker-build-all Build all services with BuildKit cache"
echo " docker-clean-gen Remove generated Dockerfiles"
echo " image-list Show available services"
echo " image-validate Validate all built images"
echo " image-clean Remove all provisioning images"
echo ""
echo "EXAMPLES:"
echo " just docker-gen orchestrator # Generate Dockerfile for orchestrator"
echo " just docker-gen-compose # Generate docker-compose.build.yml"
echo " just docker-build orchestrator # Build orchestrator (auto-generates Dockerfile)"
echo " just docker-build-all # Build all services with parallel BuildKit"
echo " just docker-clean-gen # Remove all generated Dockerfiles"
echo ""
echo "NOTES:"
echo " • Dockerfiles are NOT tracked in git (source = Nickel templates)"
echo " • docker-build auto-generates Dockerfiles before building"
echo " • Change base images in schemas/platform/docker-build.ncl"
# Generate Dockerfiles from Nickel templates (on-demand)
docker-gen MODE='solo' +SERVICES='all':
#!/usr/bin/env bash
cd {{provisioning_root}}
if [ "{{SERVICES}}" == "all" ]; then
echo "🏗️ Generating Dockerfiles for all services (mode: {{MODE}})..."
{{nu}} scripts/docker-generate-builds.nu all --mode {{MODE}}
else
echo "🏗️ Generating Dockerfiles for: {{SERVICES}} (mode: {{MODE}})..."
for service in {{SERVICES}}; do
{{nu}} scripts/docker-generate-builds.nu "$service" --mode {{MODE}}
done
fi
# Generate docker-compose.build.yml from Nickel template
docker-gen-compose REGISTRY='localhost:5000':
#!/usr/bin/env bash
cd {{provisioning_root}}
echo "🏗️ Generating docker-compose.build.yml (registry: {{REGISTRY}})..."
{{nu}} scripts/docker-generate-compose.nu --registry {{REGISTRY}}
# Build Docker images with auto-generation and BuildKit cache
docker-build MODE='solo' REGISTRY='localhost:5000' +SERVICES='':
#!/usr/bin/env bash
cd {{provisioning_root}}
if [ -z "{{SERVICES}}" ]; then
echo "🐳 Building all services (mode: {{MODE}})..."
{{nu}} scripts/docker-build.nu --all --mode {{MODE}} --registry {{REGISTRY}}
else
echo "🐳 Building service(s): {{SERVICES}} (mode: {{MODE}})..."
{{nu}} scripts/docker-build.nu {{SERVICES}} --mode {{MODE}} --registry {{REGISTRY}}
fi
# Build all services with BuildKit parallel builds
docker-build-all MODE='solo' REGISTRY='localhost:5000':
#!/usr/bin/env bash
cd {{provisioning_root}}
echo "🐳 Building all platform services (mode: {{MODE}})..."
{{nu}} scripts/docker-build.nu --all --mode {{MODE}} --registry {{REGISTRY}}
# Remove all generated Dockerfiles (not tracked in git)
docker-clean-gen:
#!/usr/bin/env bash
cd {{provisioning_root}}
echo "🧹 Removing generated Dockerfiles..."
find platform/crates -name "Dockerfile" -type f -delete
rm -f docker-compose.build.yml
echo "✅ Generated files cleaned"
# Legacy: Build platform service Docker images (deprecated - use docker-build)
build-images +SERVICES='':
#!/usr/bin/env bash
echo "⚠️ DEPRECATED: Use 'just docker-build' instead"
cd {{provisioning_root}}
if [ -z "{{SERVICES}}" ]; then
{{nu}} scripts/docker-build.nu --all
else
{{nu}} scripts/docker-build.nu {{SERVICES}}
fi
# List available service images
@image-list:
echo "📋 Available Platform Services"
echo "=============================="
echo ""
echo "Core Platform Services:"
echo " • orchestrator (Rust) - Workflow engine and task queue"
echo " • control-center (Rust) - Policy and RBAC management"
echo " • mcp-server (Rust) - AI/LLM integration"
echo " • extension-registry (Rust) - Plugin management"
echo " • rag (Rust) - Retrieval augmented generation"
echo ""
echo "Image Tags:"
echo " • provisioning-orchestrator:latest"
echo " • provisioning-control-center:latest"
echo " • provisioning-mcp-server:latest"
echo " • provisioning-extension-registry:latest"
echo " • provisioning-rag:latest"
echo ""
echo "Usage: just build-images [service...]"
echo " just build-images orchestrator"
echo " just build-images orchestrator control-center"
# Validate all built Docker images
@image-validate:
#!/usr/bin/env bash
echo "🔍 Validating platform Docker images..."
echo ""
SERVICES=("provisioning-orchestrator:latest" \
"provisioning-control-center:latest" \
"provisioning-mcp-server:latest" \
"provisioning-extension-registry:latest" \
"provisioning-rag:latest")
VALID=0
INVALID=0
for image in "${SERVICES[@]}"; do
if docker image inspect "$image" >/dev/null 2>&1; then
echo "✅ $image"
((VALID++))
else
echo "❌ $image (not found)"
((INVALID++))
fi
done
echo ""
echo "📊 Validation Summary"
echo "===================="
echo "Valid: $VALID"
echo "Invalid: $INVALID"
if [ $INVALID -gt 0 ]; then
echo ""
echo "Run 'just build-images' to build missing images"
exit 1
fi
# Remove all provisioning platform images
@image-clean:
#!/usr/bin/env bash
echo "🧹 Removing provisioning platform Docker images..."
IMAGES=("provisioning-orchestrator:latest" \
"provisioning-control-center:latest" \
"provisioning-mcp-server:latest" \
"provisioning-extension-registry:latest" \
"provisioning-rag:latest")
for image in "${IMAGES[@]}"; do
if docker image inspect "$image" >/dev/null 2>&1; then
echo "Removing $image..."
docker image rm "$image" || echo "⚠️ Failed to remove $image"
fi
done
echo "✅ Image cleanup completed"
# Show Docker image information
@image-info:
#!/usr/bin/env bash
echo "🐳 Provisioning Platform Docker Images"
echo "======================================"
echo ""
IMAGES=("provisioning-orchestrator:latest" \
"provisioning-control-center:latest" \
"provisioning-mcp-server:latest" \
"provisioning-extension-registry:latest" \
"provisioning-rag:latest")
for image in "${IMAGES[@]}"; do
if docker image inspect "$image" >/dev/null 2>&1; then
echo "📦 $image"
docker image inspect "$image" | jq -r '.[0] | " Created: \(.Created)\n Size: \(.Size) bytes\n OS: \(.Os)/\(.Architecture)"'
echo ""
fi
done
if [ $(docker images --filter "reference=provisioning-*" --quiet | wc -l) -eq 0 ]; then
echo " No provisioning images found. Run 'just build-images' to build them."
fi
# Build specific service image
[no-cd]
build-service SERVICE:
#!/usr/bin/env bash
cd {{provisioning_root}}
echo "🐳 Building service image: {{SERVICE}}"
{{nu}} scripts/build-images.nu {{SERVICE}}
# Show Docker system status
@docker-status:
#!/usr/bin/env bash
echo "🐳 Docker System Status"
echo "======================"
echo ""
if ! command -v docker &> /dev/null; then
echo "❌ Docker is not installed"
exit 1
fi
echo "Docker version:"
docker --version
echo ""
echo "Docker daemon status:"
if docker ps -q >/dev/null 2>&1; then
echo "✅ Docker daemon is running"
else
echo "❌ Docker daemon is not running or not accessible"
exit 1
fi
echo ""
echo "Provisioning platform images:"
docker images --filter "reference=provisioning-*" | tail -n +2 || echo "None found"
echo ""
echo "Docker disk usage:"
docker system df
# Build and verify Docker images
@build-verify:
just build-images
just image-validate
echo "✅ Docker images built and verified"