From b523b675878964e68b7932e41423a9b23ac81ae0 Mon Sep 17 00:00:00 2001 From: ilia Date: Tue, 24 Mar 2026 23:27:54 -0400 Subject: [PATCH] chore(deploy): server script to reset main, npm ci, build, rsync dist - Hard reset to origin/main so local package edits cannot block pulls - Optional rsync to SITE_ROOT (default /var/www/iliadobkin.com) if dir exists - engines.node >=20.19, .nvmrc 22 for Vite 7 Made-with: Cursor --- .nvmrc | 1 + package.json | 6 +++++- scripts/deploy-site.sh | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 .nvmrc create mode 100644 scripts/deploy-site.sh diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..2bd5a0a --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22 diff --git a/package.json b/package.json index 1bbf20a..6ca8554 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "description": "Create an automatic portfolio based on GitHub profile", "version": "4.0.0", "type": "module", + "engines": { + "node": ">=20.19.0" + }, "license": "MIT", "author": "arifszn", "repository": { @@ -19,7 +22,8 @@ "lint:fix": "eslint . --fix --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "prettier": "prettier --check \"./**/*.{js,jsx,ts,tsx,css,md,json}\"", "prettier:fix": "prettier --write \"./**/*.{js,jsx,ts,tsx,css,md,json}\"", - "preview": "vite preview" + "preview": "vite preview", + "deploy:site": "bash scripts/deploy-site.sh" }, "dependencies": { "react": "^19.1.0", diff --git a/scripts/deploy-site.sh b/scripts/deploy-site.sh new file mode 100644 index 0000000..b8a8e75 --- /dev/null +++ b/scripts/deploy-site.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Run on the production host from the repo clone (e.g. /var/www/iliadobkin.com-src). +# Fixes stuck deploys: local edits to package.json / lockfile block git pull — this resets to origin/main. +# +# Requires Node >= 20.19 (see .nvmrc). Example: nvm install && nvm use +# +# Optional: SITE_ROOT=/var/www/iliadobkin.com (default). Rsync runs only if that directory exists. + +set -euo pipefail +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" + +SITE_ROOT="${SITE_ROOT:-/var/www/iliadobkin.com}" + +echo "==> Node $(node -v) (Vite 7 needs 20.19+ or 22.12+)" + +echo "==> Git: match origin/main exactly (drops local changes to tracked files)" +git fetch origin +git checkout main +git reset --hard origin/main + +echo "==> Dependencies (clean)" +rm -rf node_modules +npm ci + +echo "==> Build" +npm run build + +if [[ -d "$SITE_ROOT" ]]; then + echo "==> Publish dist/ -> $SITE_ROOT/" + rsync -av --delete "${REPO_ROOT}/dist/" "${SITE_ROOT}/" + echo "==> Done. Reload nginx if needed: systemctl reload nginx" +else + echo "WARN: SITE_ROOT '$SITE_ROOT' is not a directory — not copying dist." + echo " Set SITE_ROOT to your nginx root, or copy ${REPO_ROOT}/dist/ manually." +fi