Monorepo for Aesthetic.Computer
aesthetic.computer
1#!/usr/bin/env fish
2# help - deploy to help.aesthetic.computer
3#
4# Usage:
5# fish deploy.fish # Full deploy (server + page, restarts service)
6# fish deploy.fish --page # Page-only (uploads HTML, SIGHUP reload, zero downtime)
7
8set RED '\033[0;31m'
9set GREEN '\033[0;32m'
10set YELLOW '\033[1;33m'
11set NC '\033[0m'
12
13set SCRIPT_DIR (dirname (status --current-filename))
14set VAULT_DIR "$SCRIPT_DIR/../aesthetic-computer-vault"
15set SSH_KEY "$VAULT_DIR/home/.ssh/id_rsa"
16set SERVICE_ENV "$VAULT_DIR/help/.env"
17set HELP_HOST "help.aesthetic.computer"
18set HELP_USER "root"
19set REMOTE_DIR "/opt/help"
20
21set PAGE_ONLY false
22if contains -- --page $argv
23 set PAGE_ONLY true
24end
25
26# Check SSH key
27if not test -f $SSH_KEY
28 echo -e "$RED x SSH key not found: $SSH_KEY$NC"
29 exit 1
30end
31
32# Test SSH
33echo -e "$GREEN-> Testing SSH to $HELP_HOST...$NC"
34if not ssh -i $SSH_KEY -o StrictHostKeyChecking=no -o ConnectTimeout=10 $HELP_USER@$HELP_HOST "echo ok" &>/dev/null
35 echo -e "$RED x Cannot connect to $HELP_HOST$NC"
36 exit 1
37end
38echo -e "$GREEN Connected.$NC"
39
40if test $PAGE_ONLY = true
41 # Page-only deploy
42 echo -e "$GREEN-> Uploading index.html (zero-downtime)...$NC"
43 scp -i $SSH_KEY -o StrictHostKeyChecking=no \
44 $SCRIPT_DIR/index.html \
45 $HELP_USER@$HELP_HOST:$REMOTE_DIR/
46
47 ssh -i $SSH_KEY $HELP_USER@$HELP_HOST "
48 chown help:help $REMOTE_DIR/index.html
49 kill -HUP \$(systemctl show -p MainPID --value help)
50 "
51 echo -e "$GREEN Page reloaded.$NC"
52else
53 # Full deploy
54 echo -e "$GREEN-> Uploading help files...$NC"
55 scp -i $SSH_KEY -o StrictHostKeyChecking=no \
56 $SCRIPT_DIR/server.mjs \
57 $SCRIPT_DIR/index.html \
58 $SCRIPT_DIR/package.json \
59 $HELP_USER@$HELP_HOST:$REMOTE_DIR/
60
61 # Upload .env from vault
62 if test -f $SERVICE_ENV
63 scp -i $SSH_KEY -o StrictHostKeyChecking=no \
64 $SERVICE_ENV $HELP_USER@$HELP_HOST:$REMOTE_DIR/.env
65 else
66 echo -e "$YELLOW No vault .env found — skipping$NC"
67 end
68
69 echo -e "$GREEN-> Installing dependencies & restarting...$NC"
70 ssh -i $SSH_KEY $HELP_USER@$HELP_HOST "
71 chown -R help:help $REMOTE_DIR 2>/dev/null || true
72 cd $REMOTE_DIR && npm install --production --silent 2>&1 | tail -1
73 systemctl restart help
74 sleep 2
75 systemctl is-active help
76 "
77
78 set STATUS $status
79 if test $STATUS -eq 0
80 echo -e "$GREEN Help is running.$NC"
81 else
82 echo -e "$RED x Help failed to start. Check logs:$NC"
83 echo -e "$YELLOW ssh -i $SSH_KEY $HELP_USER@$HELP_HOST journalctl -u help -n 30$NC"
84 exit 1
85 end
86end
87
88echo ""
89echo -e "$GREEN Done. https://$HELP_HOST$NC"