#!/bin/sh # Entrada única da imagem. Mantém os comandos curtos e garante que todos os # scripts operacionais rodem no MESMO processo do contêiner. # # Por que `node --import tsx` e não o CLI do tsx: o CLI cria um processo filho, # e o SIGTERM do `docker stop` pararia no pai. O worker precisa receber o sinal # para esperar o tick corrente e liberar o lock no `finally`. set -eu TSX="--import=tsx" usage() { cat <<'EOF' uso: entrypoint.sh [args] web servidor Next (saída standalone) worker processo de fila migrate [--dry-run] seed-staging flag on|off cleanup verify-config check-bucket smoke worker-health confere o heartbeat do worker (healthcheck do contêiner) exec qualquer outro comando EOF } cmd="${1:-web}" [ $# -gt 0 ] && shift || true case "$cmd" in web) exec node server.js ;; worker) exec node $TSX scripts/worker.ts ;; migrate) exec node $TSX scripts/migrate.ts "$@" ;; seed-staging) exec node $TSX scripts/seed-staging.ts "$@" ;; flag) exec node $TSX scripts/set-flag.ts "$@" ;; cleanup) exec node $TSX scripts/cleanup-temp.ts "$@" ;; verify-config) exec node $TSX scripts/verify-config.ts ;; check-bucket) exec node $TSX scripts/check-bucket.ts ;; smoke) exec node $TSX scripts/smoke-staging.ts ;; worker-health) exec node docker/worker-health.mjs ;; exec) exec "$@" ;; -h|--help|help) usage ;; *) echo "comando desconhecido: $cmd" >&2; usage >&2; exit 2 ;; esac