Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

90 рядки
1.7 KiB

  1. #!/usr/bin/env bash
  2. set -Eeuo pipefail
  3. APP_NAME="${APP_NAME:-pc_nuxt}"
  4. BRANCH="${BRANCH:-}"
  5. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  6. cd "$SCRIPT_DIR"
  7. log() {
  8. printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*"
  9. }
  10. require_command() {
  11. if ! command -v "$1" >/dev/null 2>&1; then
  12. log "Missing command: $1"
  13. exit 1
  14. fi
  15. }
  16. ensure_clean_worktree() {
  17. if [ -n "$(git status --porcelain)" ]; then
  18. log "Working tree is not clean. Commit/stash/clean changes before deploy."
  19. git status --short
  20. exit 1
  21. fi
  22. }
  23. resolve_branch() {
  24. if [ -z "$BRANCH" ]; then
  25. BRANCH="$(git rev-parse --abbrev-ref HEAD)"
  26. fi
  27. if [ "$BRANCH" = "HEAD" ]; then
  28. log "Cannot detect git branch. Please run with BRANCH=main ./restart.sh"
  29. exit 1
  30. fi
  31. }
  32. pull_latest_code() {
  33. log "Pull latest code from origin/$BRANCH"
  34. ensure_clean_worktree
  35. git fetch origin "$BRANCH"
  36. git pull --ff-only origin "$BRANCH"
  37. }
  38. install_dependencies() {
  39. log "Install dependencies"
  40. pnpm install --frozen-lockfile
  41. }
  42. build_app() {
  43. log "Build Nuxt app"
  44. pnpm run build
  45. if [ ! -f ".output/server/index.mjs" ]; then
  46. log "Build output missing: .output/server/index.mjs"
  47. exit 1
  48. fi
  49. }
  50. restart_app() {
  51. log "Reload app with pm2 ecosystem config"
  52. mkdir -p logs
  53. APP_NAME="$APP_NAME" pm2 startOrReload ecosystem.config.cjs --env production --update-env
  54. pm2 save >/dev/null 2>&1 || true
  55. }
  56. main() {
  57. require_command git
  58. require_command node
  59. require_command pnpm
  60. require_command pm2
  61. resolve_branch
  62. log "Deploy start: $APP_NAME"
  63. log "Node: $(node -v 2>/dev/null || echo 'unknown')"
  64. log "pnpm: $(pnpm -v)"
  65. log "pm2: $(pm2 -v)"
  66. pull_latest_code
  67. install_dependencies
  68. build_app
  69. restart_app
  70. log "Deploy done: $APP_NAME"
  71. }
  72. main "$@"