hy-app-monitor/testbox/scripts/deploy-from-git-remote.sh
2026-05-09 14:28:09 +08:00

102 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REMOTE_DIR="${REMOTE_DIR:-/opt/chatapp-test}"
MONITOR_CHECKOUT_DIR="${MONITOR_CHECKOUT_DIR:-$REMOTE_DIR/git/hy-app-monitor}"
export GIT_SSH_COMMAND="${GIT_SSH_COMMAND:-ssh -o StrictHostKeyChecking=accept-new}"
env_file_value() {
local key="$1"
local file="${2:-$REMOTE_DIR/.env}"
[ -f "$file" ] || return 0
awk -v key="$key" '
BEGIN { FS = "=" }
$1 == key {
sub(/^[^=]*=/, "")
gsub(/^[ \t"'"'"']+|[ \t"'"'"']+$/, "")
print
exit
}
' "$file"
}
MONITOR_REPO_URL="${MONITOR_REPO_URL:-$(env_file_value TESTBOX_MONITOR_REPO_URL)}"
MONITOR_REPO_URL="${MONITOR_REPO_URL:-git@gitea.haiyihy.com:hy/hy-app-monitor.git}"
MONITOR_BRANCH="${MONITOR_BRANCH:-$(env_file_value TESTBOX_MONITOR_BRANCH)}"
MONITOR_BRANCH="${MONITOR_BRANCH:-main}"
sync_repo() {
local dir="$1"
local url="$2"
local branch="$3"
local stamp
mkdir -p "$(dirname "$dir")"
if [ -e "$dir" ] && [ ! -d "$dir/.git" ]; then
stamp="$(date +%Y%m%d%H%M%S)"
mv "$dir" "$dir.pre-git-$stamp"
echo "moved non-git directory to $dir.pre-git-$stamp"
fi
if [ ! -d "$dir/.git" ]; then
git clone --branch "$branch" "$url" "$dir"
fi
git -C "$dir" remote set-url origin "$url"
git -C "$dir" fetch --prune origin "$branch"
git -C "$dir" checkout -B "$branch" "origin/$branch"
git -C "$dir" reset --hard "origin/$branch"
}
sync_repo "$MONITOR_CHECKOUT_DIR" "$MONITOR_REPO_URL" "$MONITOR_BRANCH"
latest_script="$MONITOR_CHECKOUT_DIR/testbox/scripts/deploy-from-git-remote.sh"
current_script="${BASH_SOURCE[0]}"
if [ "${TESTBOX_REMOTE_DEPLOY_BOOTSTRAPPED:-0}" != "1" ] && [ "$current_script" != "$latest_script" ]; then
export TESTBOX_REMOTE_DEPLOY_BOOTSTRAPPED=1
exec bash "$latest_script"
fi
mkdir -p "$REMOTE_DIR"/{git,sources,run,logs}
rsync --archive --delete \
--exclude ".env" \
--exclude "git" \
--exclude "sources" \
--exclude "run" \
--exclude "logs" \
--exclude "mysql/baseline/*.sql" \
"$MONITOR_CHECKOUT_DIR/testbox/" "$REMOTE_DIR/"
bash "$REMOTE_DIR/scripts/bootstrap-server.sh"
bash "$REMOTE_DIR/scripts/merge-env-defaults.sh" "$REMOTE_DIR/.env" "$REMOTE_DIR/.env.example"
env_value() {
python3 "$REMOTE_DIR/scripts/env-value.py" "$REMOTE_DIR/.env" "$1" "${2:-}"
}
JAVA_REPO_URL="$(env_value JAVA_REPO_URL git@gitea.haiyihy.com:hy/chatapp3-java.git)"
JAVA_BRANCH="$(env_value JAVA_BRANCH main)"
GOLANG_REPO_URL="$(env_value GOLANG_REPO_URL git@gitea.haiyihy.com:hy/chatapp3-golang.git)"
GOLANG_BRANCH="$(env_value GOLANG_BRANCH main)"
CRON_REPO_URL="$(env_value CRON_REPO_URL git@gitea.haiyihy.com:hy/chatapp-cron.git)"
CRON_BRANCH="$(env_value CRON_BRANCH main)"
ADMIN_REPO_URL="$(env_value ADMIN_REPO_URL git@gitea.haiyihy.com:hy/chatapp3-admin.git)"
ADMIN_BRANCH="$(env_value ADMIN_BRANCH main)"
JAVA_SOURCE_DIR="$(env_value JAVA_SOURCE_DIR "$REMOTE_DIR/sources/chatapp3-java")"
GOLANG_SOURCE_DIR="$(env_value GOLANG_SOURCE_DIR "$REMOTE_DIR/sources/chatapp3-golang")"
CRON_SOURCE_DIR="$(env_value CRON_SOURCE_DIR "$REMOTE_DIR/sources/chatapp-cron")"
ADMIN_SOURCE_DIR="$(env_value ADMIN_SOURCE_DIR "$REMOTE_DIR/sources/chatapp3-admin")"
echo "updating source repos from git..."
sync_repo "$JAVA_SOURCE_DIR" "$JAVA_REPO_URL" "$JAVA_BRANCH"
sync_repo "$GOLANG_SOURCE_DIR" "$GOLANG_REPO_URL" "$GOLANG_BRANCH"
sync_repo "$CRON_SOURCE_DIR" "$CRON_REPO_URL" "$CRON_BRANCH"
sync_repo "$ADMIN_SOURCE_DIR" "$ADMIN_REPO_URL" "$ADMIN_BRANCH"
cd "$REMOTE_DIR"
flock "$REMOTE_DIR/run/deploy.lock" bash scripts/deploy-all.sh
bash scripts/install-auto-deploy-service.sh