Files
ai-tax-agent/scripts/build-and-push-images.sh
harkon 5e68597ce2
Some checks failed
CI/CD Pipeline / Security Scanning (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
CI/CD Pipeline / Policy Validation (push) Has been cancelled
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-firm-connectors) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-forms) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-hmrc) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ingestion) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-normalize-map) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ocr) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-indexer) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-reason) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rpa) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (ui-review) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (ui-review) (push) Has been cancelled
CI/CD Pipeline / Generate SBOM (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Notifications (push) Has been cancelled
build scripts
2025-12-01 16:15:21 +02:00

165 lines
4.9 KiB
Bash
Executable File
Raw Permalink 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.

#!/bin/bash
# Build and Push Docker Images to Registry
# Usage: ./scripts/build-and-push-images.sh [registry] [version] [owner] [skip-existing]
# Example: ./scripts/build-and-push-images.sh gitea.harkon.co.uk v1.0.1 harkon
# Example (skip existing): ./scripts/build-and-push-images.sh gitea.harkon.co.uk v1.0.1 harkon skip
# Don't exit on error - we want to continue building other services
set +e
# Configuration
REGISTRY="${1:-gitea.harkon.co.uk}"
VERSION="${2:-latest}"
OWNER="${3:-harkon}" # Gitea organization/team name
SKIP_EXISTING="${4:-}" # Set to "skip" to skip already built images
# Note: Gitea container registry requires format: {registry}/{owner}/{image}:{tag}
# The owner must be your Gitea username or organization name
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() {
echo -e "${BLUE} $1${NC}"
}
log_success() {
echo -e "${GREEN}$1${NC}"
}
log_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
# List of services to build
SERVICES=(
"svc-ingestion"
"svc-extract"
"svc-kg"
"svc-rag-retriever"
"svc-rag-indexer"
"svc-forms"
"svc-hmrc"
"svc-ocr"
"svc-rpa"
"svc-normalize-map"
"svc-reason"
"svc-firm-connectors"
"svc-coverage"
# "ui-review"
)
# Check if Docker is running
if ! docker info > /dev/null 2>&1; then
log_warning "Docker is not running. Please start Docker and try again."
exit 1
fi
# Login to registry
log_info "Logging in to registry: $REGISTRY"
docker login $REGISTRY
# Build and push each service
for service in "${SERVICES[@]}"; do
log_info "Building $service..."
# Determine Dockerfile path
if [ "$service" = "ui-review" ]; then
DOCKERFILE="apps/ui_review/Dockerfile"
else
# Convert service name to directory name (e.g., svc-ingestion -> svc_ingestion)
DIR_NAME=$(echo $service | tr '-' '_')
DOCKERFILE="apps/$DIR_NAME/Dockerfile"
fi
# Check if Dockerfile exists
if [ ! -f "$DOCKERFILE" ]; then
log_warning "Dockerfile not found: $DOCKERFILE - Skipping $service"
continue
fi
# Build image
IMAGE_NAME="$REGISTRY/$OWNER/$service:$VERSION"
# Check if image already exists locally (if skip mode enabled)
if [ "$SKIP_EXISTING" = "skip" ]; then
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^$IMAGE_NAME$"; then
log_info "Image already exists: $IMAGE_NAME - Skipping build"
# Still try to push it
log_info "Pushing existing image: $IMAGE_NAME"
if docker push $IMAGE_NAME 2>/dev/null; then
log_success "Pushed: $IMAGE_NAME"
else
log_warning "Failed to push: $IMAGE_NAME (may already exist in registry)"
fi
# Also push latest tag
if [ "$VERSION" != "latest" ]; then
LATEST_IMAGE="$REGISTRY/$OWNER/$service:latest"
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^$LATEST_IMAGE$"; then
docker push $LATEST_IMAGE 2>/dev/null
fi
fi
echo ""
continue
fi
fi
log_info "Building: $IMAGE_NAME"
if docker build \
-t $IMAGE_NAME \
-f $DOCKERFILE \
--build-arg VERSION=$VERSION \
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
. ; then
log_success "Built: $IMAGE_NAME"
# Push image
log_info "Pushing: $IMAGE_NAME"
if docker push $IMAGE_NAME; then
log_success "Pushed: $IMAGE_NAME"
else
log_warning "Failed to push: $IMAGE_NAME"
fi
# Also tag as version number if not latest
if [ "$VERSION" != "latest" ]; then
LATEST_IMAGE="$REGISTRY/$OWNER/$service:latest"
docker tag $IMAGE_NAME $LATEST_IMAGE
if docker push $LATEST_IMAGE; then
log_success "Also pushed as: $LATEST_IMAGE"
else
log_warning "Failed to push: $LATEST_IMAGE"
fi
fi
else
log_warning "Failed to build: $IMAGE_NAME - Continuing with next service"
fi
echo ""
done
log_success "🎉 All images built and pushed successfully!"
log_info "Images pushed to: $REGISTRY/$OWNER"
log_info "Version: $VERSION"
# Show summary
echo ""
echo "Summary of pushed images:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
for service in "${SERVICES[@]}"; do
echo " $REGISTRY/$OWNER/$service:$VERSION"
done
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
log_info "Next steps:"
echo " 1. Deploy to production: ./scripts/deploy-to-production.sh"
echo " 2. Or deploy specific step: ./scripts/deploy-to-production.sh services"