nelm-ci/jenkins/checkout-repos.sh

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"