gitdataai/docker/push.sh
2026-06-01 22:04:17 +08:00

84 lines
2.3 KiB
Bash
Executable File

#!/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."