fix(deploy): improve webhook auto-release reliability and deploy.sh defaults
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+28
-1
@@ -9,7 +9,10 @@ APP_ROOT="${APP_ROOT:-/opt/dukang-haoke}"
|
||||
GIT_REMOTE="${GIT_REMOTE:-origin}"
|
||||
GIT_BRANCH="${GIT_BRANCH:-dev}"
|
||||
LOCK_FILE="${DEPLOY_LOCK_FILE:-/var/run/dukang-deploy.lock}"
|
||||
PENDING_FILE="${DEPLOY_PENDING_FILE:-/var/run/dukang-deploy.pending}"
|
||||
LOG_FILE="${DEPLOY_LOG_FILE:-/var/log/dukang/deploy.log}"
|
||||
WEBHOOK_FETCH_RETRIES="${WEBHOOK_FETCH_RETRIES:-5}"
|
||||
WEBHOOK_FETCH_DELAY_SEC="${WEBHOOK_FETCH_DELAY_SEC:-3}"
|
||||
|
||||
if [[ -f "$ENV_FILE" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
@@ -24,7 +27,12 @@ log() {
|
||||
|
||||
exec 9>"$LOCK_FILE"
|
||||
if ! flock -n 9; then
|
||||
log "SKIP: another deploy is in progress"
|
||||
if [[ -n "${DEPLOY_TRIGGER:-}" ]]; then
|
||||
date '+%s' >"$PENDING_FILE"
|
||||
log "QUEUED: another deploy is in progress (webhook will retry after current run)"
|
||||
else
|
||||
log "SKIP: another deploy is in progress"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -43,6 +51,19 @@ git checkout "$GIT_BRANCH"
|
||||
LOCAL_SHA="$(git rev-parse HEAD)"
|
||||
REMOTE_SHA="$(git rev-parse "$GIT_REMOTE/$GIT_BRANCH")"
|
||||
|
||||
# CodeUp 常在 push 完成前连发 webhook,首次 fetch 可能仍拿到旧 SHA
|
||||
if [[ "$LOCAL_SHA" == "$REMOTE_SHA" ]] && [[ -n "${DEPLOY_TRIGGER:-}" ]]; then
|
||||
for ((i = 1; i <= WEBHOOK_FETCH_RETRIES; i++)); do
|
||||
log "WEBHOOK retry fetch $i/$WEBHOOK_FETCH_RETRIES (waiting ${WEBHOOK_FETCH_DELAY_SEC}s for remote)"
|
||||
sleep "$WEBHOOK_FETCH_DELAY_SEC"
|
||||
git fetch "$GIT_REMOTE"
|
||||
REMOTE_SHA="$(git rev-parse "$GIT_REMOTE/$GIT_BRANCH")"
|
||||
if [[ "$LOCAL_SHA" != "$REMOTE_SHA" ]]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ "$LOCAL_SHA" == "$REMOTE_SHA" ]]; then
|
||||
log "SKIP: already up to date ($LOCAL_SHA)"
|
||||
exit 0
|
||||
@@ -75,3 +96,9 @@ fi
|
||||
bash "$APP_ROOT/deploy/remote-release.sh" "${RELEASE_ARGS[@]}"
|
||||
|
||||
log "DONE auto-release ($REMOTE_SHA)"
|
||||
|
||||
if [[ -f "$PENDING_FILE" ]]; then
|
||||
rm -f "$PENDING_FILE"
|
||||
log "RETRY: running queued webhook deploy"
|
||||
DEPLOY_TRIGGER="${DEPLOY_TRIGGER:-queued}" bash "$0"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user