新增一键提交推送部署脚本
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