#!/usr/bin/env bash set -euo pipefail # Clone/update service repos from Bitbucket (or Gitea) into DEST. # Required env: # GIT_BASE_URL e.g. http://192.168.10.68:7990/bbadmin # SERVICES space-separated list, e.g. "postgres seaweedfs" # Optional: # GIT_BRANCH default main # DEST default $WORKSPACE/repos (or ./repos) # GIT_USER / GIT_TOKEN if set, injected into clone URL # GIT_SSL_NO_VERIFY=1 for lab self-signed HTTPS GIT_BRANCH="${GIT_BRANCH:-main}" DEST="${DEST:-${WORKSPACE:-.}/repos}" GIT_BASE_URL="${GIT_BASE_URL:?GIT_BASE_URL is required}" SERVICES="${SERVICES:?SERVICES is required}" mkdir -p "$DEST" auth_base="$GIT_BASE_URL" if [ -n "${GIT_USER:-}" ] && [ -n "${GIT_TOKEN:-}" ]; then # inject user:token after scheme:// auth_base="$(echo "$GIT_BASE_URL" | sed -E "s#^(https?://)#\1${GIT_USER}:${GIT_TOKEN}@#")" fi export GIT_TERMINAL_PROMPT=0 for svc in $SERVICES; do url="${auth_base%/}/${svc}.git" dir="$DEST/$svc" echo "==> checkout $svc from $GIT_BASE_URL/$svc.git branch=$GIT_BRANCH" if [ -d "$dir/.git" ]; then git -C "$dir" remote set-url origin "$url" git -C "$dir" fetch --depth 1 origin "$GIT_BRANCH" git -C "$dir" checkout -B "$GIT_BRANCH" "FETCH_HEAD" git -C "$dir" reset --hard "FETCH_HEAD" git -C "$dir" clean -fdx else rm -rf "$dir" git clone --depth 1 --branch "$GIT_BRANCH" "$url" "$dir" fi test -d "$dir/.helm" || { echo "ERROR: $svc has no .helm chart"; exit 1; } echo " HEAD=$(git -C "$dir" rev-parse --short HEAD)" done echo "CHECKOUT_DIR=$DEST"