#!/bin/sh
# sgame-admin-server 容器守护入口（alpine 容器内由 busybox sh 执行）。
# /repo 是 gitsync 容器同步下来的部署仓（只读挂载），里面有：
#   server       — linux/amd64 静态二进制（前端已 embed，时区已内嵌）
#   config.yaml  — 基础配置（敏感项全部由环境变量覆盖）
#   app-entry.sh — 本脚本
# 逻辑：启动 server → 每 10s 比对仓库里二进制的 md5 → 变了就杀进程重启。
# 进程崩溃同样会回到循环顶部自动拉起。

BIN=/repo/server
RUN=/tmp/server.run

echo "[entry] waiting for $BIN ..."
while [ ! -f "$BIN" ]; do sleep 2; done

while true; do
  # 等 gitsync 的 checkout 落定：两次校验和一致才启动
  SUM=$(md5sum "$BIN" | cut -d' ' -f1)
  sleep 1
  SUM2=$(md5sum "$BIN" | cut -d' ' -f1)
  if [ "$SUM" != "$SUM2" ]; then
    continue
  fi

  # 跑 /tmp 副本而不是 /repo 原件，避免 git reset 覆盖运行中的可执行文件
  cp "$BIN" "$RUN"
  chmod +x "$RUN"
  echo "[entry] starting server (md5 $SUM)"
  "$RUN" -config /repo/config.yaml &
  PID=$!

  while kill -0 "$PID" 2>/dev/null; do
    sleep 10
    NEW=$(md5sum "$BIN" 2>/dev/null | cut -d' ' -f1)
    if [ -n "$NEW" ] && [ "$NEW" != "$SUM" ]; then
      echo "[entry] new binary detected, restarting"
      kill "$PID"
      wait "$PID" 2>/dev/null
      break
    fi
  done

  echo "[entry] server exited, relaunching in 2s"
  sleep 2
done
