48 lines
1.5 KiB
Bash
Executable File
48 lines
1.5 KiB
Bash
Executable File
#!/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"
|