57 lines
1.5 KiB
Bash
Executable File
57 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
##
|
|
# deploys from your dev machine to your NOSEputer
|
|
# installs NOSE on the NOSEputer if it hasn't been installed yet
|
|
|
|
set -euo pipefail
|
|
|
|
HOST="chris@nose-pluto.local"
|
|
DEST="~/pluto"
|
|
SOCK="$HOME/.ssh/cm-%r@%h:%p"
|
|
|
|
# 0) Open a master SSH connection (one auth prompt)
|
|
ssh -MNf -o ControlMaster=yes -o ControlPersist=180 \
|
|
-o ControlPath="$SOCK" "$HOST"
|
|
|
|
# 1) Sync repo (exclude junk)
|
|
rsync -az --delete \
|
|
-e "ssh -o ControlPath=$SOCK" \
|
|
--exclude 'node_modules/' \
|
|
--exclude '.git/' \
|
|
--exclude '.DS_Store' \
|
|
./ "$HOST:$DEST/"
|
|
|
|
# 2) First-time setup if needed, then install deps and restart service
|
|
ssh -t -o ControlPath="$SOCK" "$HOST" bash -lc "
|
|
set -euo pipefail
|
|
cd $DEST
|
|
|
|
# Ensure bun on PATH (/usr/local/bin) if user-installed in ~/.bun
|
|
if ! command -v bun >/dev/null 2>&1; then
|
|
if [ -x \"\$HOME/.bun/bin/bun\" ]; then
|
|
echo '>> Symlinking bun to /usr/local/bin'
|
|
sudo ln -sf \"\$HOME/.bun/bin/bun\" /usr/local/bin/bun
|
|
else
|
|
echo 'ERROR: bun not found (expected at ~/.bun/bin/bun)'; exit 1
|
|
fi
|
|
fi
|
|
|
|
# If service not present yet, run install (sets caps, installs unit, enables)
|
|
if ! systemctl list-unit-files | grep -q '^nose-pluto.service'; then
|
|
echo '>> Running first-time install for systemd unit'
|
|
bash scripts/install.sh
|
|
fi
|
|
|
|
echo '>> bun install'
|
|
bun install --frozen-lockfile
|
|
|
|
echo '>> Restarting service'
|
|
sudo systemctl restart nose-pluto.service
|
|
"
|
|
|
|
# 3) Close the master connection
|
|
ssh -O exit -o ControlPath="$SOCK" "$HOST"
|
|
|
|
echo "Deploy complete ✅"
|