| #!/bin/bash |
| |
|
|
| set -e |
|
|
| |
| RED='\033[0;31m' |
| GREEN='\033[0;32m' |
| YELLOW='\033[1;33m' |
| NC='\033[0m' |
|
|
| |
| PROJECT_NAME="backgroundfx-pro" |
| REGISTRY="" |
| VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo "latest") |
|
|
| |
| BUILD_TYPE="gpu" |
| PUSH=false |
| NO_CACHE=false |
|
|
| while [[ $# -gt 0 ]]; do |
| case $1 in |
| --cpu) |
| BUILD_TYPE="cpu" |
| shift |
| ;; |
| --all) |
| BUILD_TYPE="all" |
| shift |
| ;; |
| --push) |
| PUSH=true |
| shift |
| ;; |
| --no-cache) |
| NO_CACHE=true |
| shift |
| ;; |
| --registry) |
| REGISTRY="$2/" |
| shift 2 |
| ;; |
| --version) |
| VERSION="$2" |
| shift 2 |
| ;; |
| *) |
| echo -e "${RED}Unknown option: $1${NC}" |
| echo "Usage: $0 [--cpu|--all] [--push] [--no-cache] [--registry REGISTRY] [--version VERSION]" |
| exit 1 |
| ;; |
| esac |
| done |
|
|
| |
| build_image() { |
| local dockerfile=$1 |
| local tag=$2 |
| local context=${3:-".."} |
| |
| echo -e "${GREEN}Building ${tag}...${NC}" |
| |
| CACHE_FLAG="" |
| if [ "$NO_CACHE" = true ]; then |
| CACHE_FLAG="--no-cache" |
| fi |
| |
| docker build \ |
| $CACHE_FLAG \ |
| -f "$dockerfile" \ |
| -t "${PROJECT_NAME}:${tag}" \ |
| -t "${PROJECT_NAME}:${tag}-${VERSION}" \ |
| -t "${REGISTRY}${PROJECT_NAME}:${tag}" \ |
| -t "${REGISTRY}${PROJECT_NAME}:${tag}-${VERSION}" \ |
| "$context" |
| |
| if [ $? -eq 0 ]; then |
| echo -e "${GREEN}✓ Successfully built ${tag}${NC}" |
| else |
| echo -e "${RED}✗ Failed to build ${tag}${NC}" |
| exit 1 |
| fi |
| } |
|
|
| |
| if ! docker info > /dev/null 2>&1; then |
| echo -e "${RED}Docker daemon is not running${NC}" |
| exit 1 |
| fi |
|
|
| |
| if [ "$BUILD_TYPE" != "cpu" ]; then |
| if ! docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu20.04 nvidia-smi > /dev/null 2>&1; then |
| echo -e "${YELLOW}Warning: NVIDIA Docker runtime not available. GPU features will not work.${NC}" |
| echo "Install nvidia-docker2 for GPU support." |
| fi |
| fi |
|
|
| |
| echo -e "${GREEN}Starting build process...${NC}" |
| echo "Version: ${VERSION}" |
| echo "Build type: ${BUILD_TYPE}" |
|
|
| case $BUILD_TYPE in |
| gpu) |
| build_image "docker/Dockerfile" "gpu" |
| build_image "docker/Dockerfile.prod" "gpu-prod" |
| ;; |
| cpu) |
| build_image "docker/Dockerfile.cpu" "cpu" |
| ;; |
| all) |
| build_image "docker/Dockerfile" "gpu" |
| build_image "docker/Dockerfile.prod" "gpu-prod" |
| build_image "docker/Dockerfile.cpu" "cpu" |
| build_image "docker/Dockerfile.models" "models" |
| ;; |
| esac |
|
|
| |
| if [ "$PUSH" = true ]; then |
| if [ -z "$REGISTRY" ]; then |
| echo -e "${YELLOW}Warning: No registry specified, skipping push${NC}" |
| else |
| echo -e "${GREEN}Pushing images to ${REGISTRY}...${NC}" |
| |
| case $BUILD_TYPE in |
| gpu) |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu" |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu-${VERSION}" |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod" |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod-${VERSION}" |
| ;; |
| cpu) |
| docker push "${REGISTRY}${PROJECT_NAME}:cpu" |
| docker push "${REGISTRY}${PROJECT_NAME}:cpu-${VERSION}" |
| ;; |
| all) |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu" |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu-${VERSION}" |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod" |
| docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod-${VERSION}" |
| docker push "${REGISTRY}${PROJECT_NAME}:cpu" |
| docker push "${REGISTRY}${PROJECT_NAME}:cpu-${VERSION}" |
| docker push "${REGISTRY}${PROJECT_NAME}:models" |
| docker push "${REGISTRY}${PROJECT_NAME}:models-${VERSION}" |
| ;; |
| esac |
| |
| echo -e "${GREEN}✓ Images pushed successfully${NC}" |
| fi |
| fi |
|
|
| |
| echo -e "\n${GREEN}Built images:${NC}" |
| docker images | grep "${PROJECT_NAME}" | head -10 |
|
|
| echo -e "\n${GREEN}Build complete!${NC}" |
| echo "Run with: docker-compose up -d" |