provisioning/justfiles/docker.just

259 lines
9.5 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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"