mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 14:26:42 +02:00
first implementation
This commit is contained in:
parent
98efa6f6e8
commit
74dc6892ab
61 changed files with 30899 additions and 4934 deletions
170
scripts/deploy/build-and-push.sh
Executable file
170
scripts/deploy/build-and-push.sh
Executable file
|
|
@ -0,0 +1,170 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Build and push Docker images for manacore services
|
||||
# Usage: ./build-and-push.sh [service] [tag]
|
||||
# Example: ./build-and-push.sh chat-backend v1.0.0
|
||||
# Example: ./build-and-push.sh all latest
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
DOCKER_REGISTRY=${DOCKER_REGISTRY:-"wuesteon"}
|
||||
SERVICE=${1:-"all"}
|
||||
TAG=${2:-"latest"}
|
||||
PLATFORM=${PLATFORM:-"linux/amd64"}
|
||||
|
||||
# Function to print colored output
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to build and push a service
|
||||
build_and_push() {
|
||||
local service=$1
|
||||
local dockerfile=$2
|
||||
local context=${3:-.}
|
||||
local image_name="${DOCKER_REGISTRY}/${service}"
|
||||
|
||||
log_info "Building ${service}..."
|
||||
|
||||
# Build the image
|
||||
if docker buildx build \
|
||||
--platform ${PLATFORM} \
|
||||
--tag "${image_name}:${TAG}" \
|
||||
--tag "${image_name}:latest" \
|
||||
--file "${dockerfile}" \
|
||||
--progress plain \
|
||||
${context}; then
|
||||
|
||||
log_info "Successfully built ${service}"
|
||||
|
||||
# Push the image
|
||||
log_info "Pushing ${service} to registry..."
|
||||
|
||||
if docker push "${image_name}:${TAG}" && docker push "${image_name}:latest"; then
|
||||
log_info "Successfully pushed ${service}"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to push ${service}"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_error "Failed to build ${service}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to build all services
|
||||
build_all() {
|
||||
local services=(
|
||||
"mana-core-auth:services/mana-core-auth/Dockerfile"
|
||||
"maerchenzauber-backend:apps/maerchenzauber/apps/backend/Dockerfile"
|
||||
"chat-backend:apps/chat/apps/backend/Dockerfile"
|
||||
"manadeck-backend:apps/manadeck/apps/backend/Dockerfile"
|
||||
"nutriphi-backend:apps/nutriphi/apps/backend/Dockerfile"
|
||||
"news-api:apps/news/apps/api/Dockerfile"
|
||||
)
|
||||
|
||||
local failed_services=()
|
||||
|
||||
for service_config in "${services[@]}"; do
|
||||
IFS=':' read -r service dockerfile <<< "$service_config"
|
||||
|
||||
if [ -f "$dockerfile" ]; then
|
||||
if ! build_and_push "$service" "$dockerfile" "."; then
|
||||
failed_services+=("$service")
|
||||
fi
|
||||
else
|
||||
log_warn "Dockerfile not found for ${service}: ${dockerfile}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
done
|
||||
|
||||
# Report results
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
if [ ${#failed_services[@]} -eq 0 ]; then
|
||||
log_info "All services built and pushed successfully!"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to build/push the following services:"
|
||||
for service in "${failed_services[@]}"; do
|
||||
echo " - ${service}"
|
||||
done
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if Docker is installed
|
||||
if ! command -v docker &> /dev/null; then
|
||||
log_error "Docker is not installed or not in PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if buildx is available
|
||||
if ! docker buildx version &> /dev/null; then
|
||||
log_error "Docker buildx is not available"
|
||||
log_info "Install it with: docker buildx install"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Login to Docker registry
|
||||
if [ -n "${DOCKER_USERNAME}" ] && [ -n "${DOCKER_PASSWORD}" ]; then
|
||||
log_info "Logging in to Docker registry..."
|
||||
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
|
||||
fi
|
||||
|
||||
# Main execution
|
||||
log_info "Starting build and push process..."
|
||||
log_info "Registry: ${DOCKER_REGISTRY}"
|
||||
log_info "Tag: ${TAG}"
|
||||
log_info "Platform: ${PLATFORM}"
|
||||
echo ""
|
||||
|
||||
if [ "$SERVICE" == "all" ]; then
|
||||
build_all
|
||||
else
|
||||
# Build specific service
|
||||
case "$SERVICE" in
|
||||
"mana-core-auth")
|
||||
build_and_push "mana-core-auth" "services/mana-core-auth/Dockerfile" "."
|
||||
;;
|
||||
"maerchenzauber-backend")
|
||||
build_and_push "maerchenzauber-backend" "apps/maerchenzauber/apps/backend/Dockerfile" "."
|
||||
;;
|
||||
"chat-backend")
|
||||
build_and_push "chat-backend" "apps/chat/apps/backend/Dockerfile" "."
|
||||
;;
|
||||
"manadeck-backend")
|
||||
build_and_push "manadeck-backend" "apps/manadeck/apps/backend/Dockerfile" "."
|
||||
;;
|
||||
"nutriphi-backend")
|
||||
build_and_push "nutriphi-backend" "apps/nutriphi/apps/backend/Dockerfile" "."
|
||||
;;
|
||||
"news-api")
|
||||
build_and_push "news-api" "apps/news/apps/api/Dockerfile" "."
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown service: $SERVICE"
|
||||
echo "Available services: all, mana-core-auth, maerchenzauber-backend, chat-backend, manadeck-backend, nutriphi-backend, news-api"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
log_info "Build and push process completed!"
|
||||
Loading…
Add table
Add a link
Reference in a new issue