#!/bin/bash set -e PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" CARGO_VERSION=$(grep -m1 'version' "${PROJECT_ROOT}/Cargo.toml" | sed 's/.*"\(.*\)".*/\1/') REGISTRY=${REGISTRY:-"harbor.gitdata.me/app"} TAG=${TAG:-"${CARGO_VERSION:-latest}"} if command -v podman &>/dev/null; then DOCKER=podman elif command -v docker &>/dev/null; then DOCKER=docker else echo "ERROR: neither podman nor docker found" exit 1 fi SERVICES=("gitdata" "gitpod" "gitsync" "email" "web") log_info() { echo -e "\033[0;32m[INFO]\033[0m $1"; } log_warn() { echo -e "\033[1;33m[WARN]\033[0m $1"; } log_error() { echo -e "\033[0;31m[ERROR]\033[0m $1"; } push_image() { local service=$1 local image="${REGISTRY}/gitdata-${service}:${TAG}" if ! $DOCKER image inspect "$image" >/dev/null 2>&1; then log_error "Image not found: $image" log_error "Build first: ./build.sh $service" return 1 fi log_info "Pushing $image" $DOCKER push "$image" log_info "Pushed $image" } PUSH_SERVICES=() PUSH_ALL=true while [[ $# -gt 0 ]]; do case $1 in --tag|-t) TAG="$2"; shift 2 ;; --registry|-r) REGISTRY="$2"; shift 2 ;; --help|-h) echo "Usage: $0 [OPTIONS] [SERVICE...]" echo "" echo "Options:" echo " -t, --tag TAG Image tag (default: from Cargo.toml)" echo " -r, --registry REG Registry prefix (default: harbor.gitdata.me/app)" echo "" echo "Services:" echo " gitdata gitpod gitsync email web" echo "" echo "Examples:" echo " $0 # Push all" echo " $0 gitdata gitpod # Push specific services" echo " $0 -t v1.2.0 # Push with custom tag" echo " $0 -r myreg.io/app -t dev # Push with custom registry and tag" exit 0 ;; *) PUSH_SERVICES+=("$1"); PUSH_ALL=false; shift ;; esac done log_info "Registry: ${REGISTRY}" log_info "Tag: ${TAG}" if [ "$PUSH_ALL" = true ]; then log_info "Pushing all services..." for svc in "${SERVICES[@]}"; do push_image "$svc" done else log_info "Pushing: ${PUSH_SERVICES[*]}" for svc in "${PUSH_SERVICES[@]}"; do push_image "$svc" done fi log_info "Done."