#!/usr/bin/env bash set -euo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" CONFIG_PATH="${1:-${APP_DIR}/config.json}" DOMAIN_FILE="${APP_DIR}/runtime/current_domain.txt" before="" if [[ -f "$DOMAIN_FILE" ]]; then before="$(tr -d '\r\n' < "$DOMAIN_FILE")" fi /usr/bin/python3 "${APP_DIR}/scripts/domain_updater.py" --config "$CONFIG_PATH" after="" if [[ -f "$DOMAIN_FILE" ]]; then after="$(tr -d '\r\n' < "$DOMAIN_FILE")" fi if [[ -z "$after" ]]; then echo "[vmess-domain-rotator] empty selected domain, skip git commit" exit 0 fi if [[ "$before" == "$after" ]]; then echo "[vmess-domain-rotator] domain unchanged (${after}), skip git commit" exit 0 fi if ! command -v git >/dev/null 2>&1; then echo "[vmess-domain-rotator] git not found, skip git commit" exit 0 fi if ! git -C "$APP_DIR" rev-parse --is-inside-work-tree >/dev/null 2>&1; then echo "[vmess-domain-rotator] not a git repo, skip git commit" exit 0 fi git -C "$APP_DIR" add runtime/current_domain.txt runtime/current_domain.json runtime/state.json runtime/substore_vars.json || true if git -C "$APP_DIR" diff --cached --quiet; then echo "[vmess-domain-rotator] no staged changes, skip git commit" exit 0 fi commit_name="${GIT_COMMIT_NAME:-vmess-domain-rotator}" commit_email="${GIT_COMMIT_EMAIL:-vmess-domain-rotator@localhost}" ts="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" git -C "$APP_DIR" \ -c user.name="$commit_name" \ -c user.email="$commit_email" \ commit -m "chore: rotate preferred domain to ${after} (${ts})" push_remote="${GIT_PUSH_REMOTE:-origin}" if ! git -C "$APP_DIR" remote get-url "$push_remote" >/dev/null 2>&1; then push_remote="" while IFS= read -r r; do push_remote="$r" break done < <(git -C "$APP_DIR" remote) fi current_branch="$(git -C "$APP_DIR" symbolic-ref --quiet --short HEAD 2>/dev/null || true)" if [[ -z "$push_remote" ]]; then echo "[vmess-domain-rotator] no remote found, skip git push" elif [[ -z "$current_branch" ]]; then echo "[vmess-domain-rotator] detached HEAD, skip git push" else if git -C "$APP_DIR" rev-parse --abbrev-ref --symbolic-full-name "@{u}" >/dev/null 2>&1; then if git -C "$APP_DIR" push; then echo "[vmess-domain-rotator] pushed to ${push_remote}/${current_branch}" else echo "[vmess-domain-rotator] git push failed" fi else if git -C "$APP_DIR" push -u "$push_remote" "$current_branch"; then echo "[vmess-domain-rotator] pushed to ${push_remote}/${current_branch} (set upstream)" else echo "[vmess-domain-rotator] git push failed" fi fi fi echo "[vmess-domain-rotator] committed domain change: ${before} -> ${after}"