新增一键提交推送部署脚本
This commit is contained in:
parent
d0f1aad626
commit
b1aae8aac4
78
scripts/commit_push_and_deploy.sh
Executable file
78
scripts/commit_push_and_deploy.sh
Executable file
@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
|
||||
ROOT_DIR="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
if [ -x "$ROOT_DIR/.venv/bin/python" ]; then
|
||||
PYTHON_BIN="$ROOT_DIR/.venv/bin/python"
|
||||
else
|
||||
PYTHON_BIN="python3"
|
||||
fi
|
||||
|
||||
fail() {
|
||||
echo "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_command() {
|
||||
if ! command -v "$1" >/dev/null 2>&1; then
|
||||
fail "missing command: $1"
|
||||
fi
|
||||
}
|
||||
|
||||
current_branch() {
|
||||
local branch
|
||||
branch="$(git -C "$ROOT_DIR" rev-parse --abbrev-ref HEAD)"
|
||||
if [ "$branch" = "HEAD" ]; then
|
||||
fail "current git HEAD is detached; switch to a branch first"
|
||||
fi
|
||||
echo "$branch"
|
||||
}
|
||||
|
||||
has_upstream() {
|
||||
git -C "$ROOT_DIR" rev-parse --abbrev-ref --symbolic-full-name '@{upstream}' >/dev/null 2>&1
|
||||
}
|
||||
|
||||
commit_message() {
|
||||
if [ "$#" -gt 0 ]; then
|
||||
printf '%s\n' "$1"
|
||||
return 0
|
||||
fi
|
||||
date '+deploy %Y-%m-%d %H:%M:%S'
|
||||
}
|
||||
|
||||
main() {
|
||||
require_command git
|
||||
require_command "$PYTHON_BIN"
|
||||
|
||||
local branch
|
||||
local message
|
||||
branch="$(current_branch)"
|
||||
message="$(commit_message "$@")"
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
# 统一先把当前工作区改动全部纳入本次发布。
|
||||
git add -A
|
||||
|
||||
# 没有新增改动时跳过提交,仍然允许继续推送和部署。
|
||||
if ! git diff --cached --quiet; then
|
||||
git commit -m "$message"
|
||||
else
|
||||
echo "no local changes to commit"
|
||||
fi
|
||||
|
||||
if has_upstream; then
|
||||
git push
|
||||
else
|
||||
git push -u origin "$branch"
|
||||
fi
|
||||
|
||||
# 强制让远端按当前分支拉取,避免部署脚本和本地分支漂移。
|
||||
MONITOR_REPO_REF="$branch" \
|
||||
MONITOR_REPO_URL="$(git -C "$ROOT_DIR" remote get-url origin)" \
|
||||
"$PYTHON_BIN" "$ROOT_DIR/ops/deploy_via_tat.py"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Loading…
x
Reference in New Issue
Block a user