mirror of
https://github.com/Quad4-Software/Reticulum-Go
synced 2026-08-29 23:48:44 -04:00
101 lines
3.1 KiB
Bash
101 lines
3.1 KiB
Bash
#!/bin/sh
|
|
# Clone or shallow-fetch the repository using Gitea/GitHub Actions-compatible env.
|
|
#
|
|
# CI workflows may use actions/checkout on GitHub or inline git in other hosts; this script
|
|
# is for local runs or act when you want a single shared implementation.
|
|
# Use this script for local runs or act when you want a single shared implementation.
|
|
#
|
|
# Usage: checkout.sh [fetch_depth]
|
|
# fetch_depth: commit depth (default 1), or 0 for full clone then checkout SHA.
|
|
#
|
|
# Env: GITEA_SERVER_URL or GITHUB_SERVER_URL, GITEA_REPOSITORY or GITHUB_REPOSITORY,
|
|
# GITHUB_SHA (or GITEA_SHA), optional GITHUB_REF / GITEA_REF / GITHUB_REF_NAME.
|
|
# Optional: GITEA_TOKEN or GITHUB_TOKEN, GITEA_WORKSPACE or GITHUB_WORKSPACE.
|
|
#
|
|
# Prefers fetching GITHUB_REF when set (e.g. refs/heads/master) because some Git hosts
|
|
# do not allow shallow fetch by raw SHA over HTTPS.
|
|
set -eu
|
|
|
|
FETCH_DEPTH="${1:-1}"
|
|
SERVER="${GITEA_SERVER_URL:-${GITHUB_SERVER_URL:-}}"
|
|
REPO="${GITEA_REPOSITORY:-${GITHUB_REPOSITORY:-}}"
|
|
SHA="${GITHUB_SHA:-${GITEA_SHA:-}}"
|
|
REF="${GITHUB_REF:-${GITEA_REF:-}}"
|
|
TOKEN="${GITEA_TOKEN:-${GITHUB_TOKEN:-}}"
|
|
WORKSPACE="${GITEA_WORKSPACE:-${GITHUB_WORKSPACE:-.}}"
|
|
|
|
REF_TYPE="${GITHUB_REF_TYPE:-${GITEA_REF_TYPE:-branch}}"
|
|
if [ -z "$REF" ] && [ -z "${GITHUB_REF_NAME:-}" ] && [ -n "${GITEA_REF_NAME:-}" ]; then
|
|
REF="refs/heads/${GITEA_REF_NAME}"
|
|
elif [ -z "$REF" ] && [ -n "${GITHUB_REF_NAME:-}" ]; then
|
|
case "$REF_TYPE" in
|
|
tag)
|
|
REF="refs/tags/${GITHUB_REF_NAME}"
|
|
;;
|
|
*)
|
|
REF="refs/heads/${GITHUB_REF_NAME}"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
SERVER="${SERVER%/}"
|
|
|
|
if [ -z "$SERVER" ] || [ -z "$REPO" ]; then
|
|
echo "checkout.sh: need SERVER and REPO (GITEA_* or GITHUB_* URL and repository)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$SHA" ] && [ -z "$REF" ]; then
|
|
echo "checkout.sh: need GITHUB_SHA (or GITEA_SHA) and/or GITHUB_REF (or GITEA_REF / *_REF_NAME)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cd "$WORKSPACE"
|
|
|
|
if [ -n "$TOKEN" ]; then
|
|
git config --global credential.helper \
|
|
"!f() { echo username=x-access-token; echo \"password=${TOKEN}\"; }; f"
|
|
fi
|
|
|
|
ORIGIN="${SERVER}/${REPO}.git"
|
|
|
|
checkout_target() {
|
|
if [ -n "$SHA" ]; then
|
|
git checkout -q "$SHA" 2>/dev/null || git checkout -q FETCH_HEAD
|
|
else
|
|
git checkout -q FETCH_HEAD
|
|
fi
|
|
}
|
|
|
|
fetch_shallow() {
|
|
if [ -n "$REF" ]; then
|
|
if git fetch -q --depth="$FETCH_DEPTH" origin "$REF"; then
|
|
return 0
|
|
fi
|
|
echo "checkout.sh: fetch by ref failed (${REF}), trying SHA" >&2
|
|
fi
|
|
if [ -n "$SHA" ]; then
|
|
git fetch -q --depth="$FETCH_DEPTH" origin "$SHA"
|
|
return $?
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
if [ "$FETCH_DEPTH" = "0" ]; then
|
|
git clone -q "$ORIGIN" .
|
|
checkout_target
|
|
else
|
|
if [ -d .git ]; then
|
|
git remote set-url origin "$ORIGIN" 2>/dev/null || {
|
|
git remote remove origin 2>/dev/null || true
|
|
git remote add origin "$ORIGIN"
|
|
}
|
|
else
|
|
git init -q
|
|
git remote add origin "$ORIGIN"
|
|
fi
|
|
fetch_shallow || exit 1
|
|
checkout_target
|
|
fi
|
|
|
|
echo "Checked out ${REPO} at $(git rev-parse --short HEAD)"
|