chore: enforce standard branch release workflow
This commit is contained in:
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
BASE_REF="${BASE_REF:-}"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
bash scripts/new-branch.sh <branch-name>
|
||||
|
||||
Creates a new development branch from the latest origin/main.
|
||||
|
||||
Environment:
|
||||
BASE_REF Base ref to create from. Defaults to origin/main when available.
|
||||
EOF
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -ne 1 ]]; then
|
||||
usage
|
||||
[[ $# -eq 1 ]] && exit 0 || exit 1
|
||||
fi
|
||||
|
||||
branch="$1"
|
||||
|
||||
if [[ -n "$(git -C "${ROOT}" status --porcelain=v1 --untracked-files=all)" ]]; then
|
||||
echo "New branch check failed: current worktree is not clean." >&2
|
||||
git -C "${ROOT}" status --short --untracked-files=all >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if git -C "${ROOT}" remote get-url origin >/dev/null 2>&1; then
|
||||
git -C "${ROOT}" fetch origin --prune
|
||||
fi
|
||||
|
||||
if [[ -z "${BASE_REF}" ]]; then
|
||||
for candidate in origin/main origin/master main master; do
|
||||
if git -C "${ROOT}" rev-parse --verify --quiet "${candidate}" >/dev/null; then
|
||||
BASE_REF="${candidate}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
git -C "${ROOT}" rev-parse --verify --quiet "${BASE_REF}" >/dev/null || {
|
||||
echo "New branch check failed: base ref not found: ${BASE_REF}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
git -C "${ROOT}" switch -c "${branch}" "${BASE_REF}"
|
||||
echo "Created ${branch} from ${BASE_REF}."
|
||||
Reference in New Issue
Block a user