mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-06 18:58:22 +08:00
88 lines
2.5 KiB
Bash
Executable File
88 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
echo "🎟️ 导入 beta_codes.txt 到 PostgreSQL"
|
|
|
|
if [ ! -f "beta_codes.txt" ]; then
|
|
echo "❌ 找不到 beta_codes.txt 文件"
|
|
exit 1
|
|
fi
|
|
|
|
if command -v "docker-compose" &> /dev/null; then
|
|
DOCKER_CMD="docker-compose"
|
|
elif command -v "docker" &> /dev/null && docker compose version &> /dev/null; then
|
|
DOCKER_CMD="docker compose"
|
|
else
|
|
echo "❌ 错误:找不到 docker-compose 或 docker compose 命令"
|
|
exit 1
|
|
fi
|
|
|
|
ENV_FILE=".env"
|
|
if [ -f "$ENV_FILE" ]; then
|
|
echo "📁 加载 .env 配置..."
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$ENV_FILE"
|
|
set +a
|
|
else
|
|
echo "⚠️ 未找到 .env 文件,使用默认数据库配置"
|
|
fi
|
|
|
|
POSTGRES_HOST=${POSTGRES_HOST:-postgres}
|
|
POSTGRES_PORT=${POSTGRES_PORT:-5432}
|
|
POSTGRES_DB=${POSTGRES_DB:-nofx}
|
|
POSTGRES_USER=${POSTGRES_USER:-nofx}
|
|
POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}
|
|
POSTGRES_SERVICE=${POSTGRES_SERVICE:-postgres}
|
|
POSTGRES_CONTAINER_NAME=${POSTGRES_CONTAINER_NAME:-nofx-postgres}
|
|
|
|
POSTGRES_CONTAINER=$($DOCKER_CMD ps -q "$POSTGRES_SERVICE" 2>/dev/null || true)
|
|
if [ -z "$POSTGRES_CONTAINER" ]; then
|
|
POSTGRES_CONTAINER=$(docker ps -q --filter "name=$POSTGRES_CONTAINER_NAME" | head -n 1)
|
|
fi
|
|
|
|
if [ -z "$POSTGRES_CONTAINER" ]; then
|
|
echo "❌ 找不到 PostgreSQL 容器 (${POSTGRES_SERVICE}/${POSTGRES_CONTAINER_NAME})"
|
|
echo "💡 请确认数据库服务已启动"
|
|
exit 1
|
|
fi
|
|
|
|
PG_ENV_ARGS=()
|
|
if [ -n "$POSTGRES_PASSWORD" ]; then
|
|
PG_ENV_ARGS=(--env "PGPASSWORD=$POSTGRES_PASSWORD")
|
|
fi
|
|
|
|
SQL_PAYLOAD=$(python3 - <<'PY'
|
|
from pathlib import Path
|
|
|
|
codes = []
|
|
for line in Path('beta_codes.txt').read_text(encoding='utf-8').splitlines():
|
|
code = line.strip()
|
|
if code and not code.startswith('#'):
|
|
codes.append(f"('{code}')")
|
|
|
|
if codes:
|
|
values = ",\n".join(codes)
|
|
print(f"INSERT INTO beta_codes (code) VALUES\n{values}\nON CONFLICT (code) DO NOTHING;")
|
|
PY
|
|
)
|
|
|
|
if [ -z "$SQL_PAYLOAD" ]; then
|
|
echo "⚠️ beta_codes.txt 中没有有效的内测码,已跳过导入"
|
|
exit 0
|
|
fi
|
|
|
|
TOTAL_CODES=$(grep -vc '^\s*$' beta_codes.txt || true)
|
|
echo "📊 检测到 $TOTAL_CODES 条内测码记录"
|
|
|
|
echo "🔄 导入到数据库..."
|
|
printf '%s\n' "$SQL_PAYLOAD" | docker exec -i "${PG_ENV_ARGS[@]}" "$POSTGRES_CONTAINER" \
|
|
psql -v ON_ERROR_STOP=1 --pset pager=off -U "$POSTGRES_USER" -d "$POSTGRES_DB"
|
|
|
|
echo "✅ 导入完成(重复的已跳过)"
|