84 lines
2.3 KiB
Bash
Executable File
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."
|