2026-01-01 15:38:41 -08:00
#!/usr/bin/env sh
2026-01-01 16:44:54 -08:00
set -e
2026-01-01 15:38:41 -08:00
2026-01-01 16:44:54 -08:00
usage( ) {
2026-03-22 15:41:29 -07:00
printf "Usage: %s [build|staging|prod|local]\n\n build - Build the blog with mdbook\n staging - Deploy to local staging environment (/srv/www/stage.binning.net)\n prod - Deploy to production server via SSH (www.binning.net)\n local - Deploy directly to /srv/www/binning.net (used by Forgejo CI runner)\n\nExample:\n %s build\n %s staging\n %s prod\n %s local\n" " $0 " " $0 " " $0 " " $0 " " $0 "
2026-01-01 16:44:54 -08:00
exit 1
}
2026-01-01 15:38:41 -08:00
2026-01-01 16:44:54 -08:00
if [ $# -eq 0 ] ; then
2026-03-22 15:41:29 -07:00
printf "Error: No command specified\n"
2026-01-01 16:44:54 -08:00
usage
fi
2026-03-22 15:41:29 -07:00
CMD = $1
case $CMD in
build)
printf "Building blog with mdbook...\n"
[ -s src ] || ln -s /var/lib/www src
mdbook build
printf "✓ Build complete!\n"
; ;
2026-01-01 16:44:54 -08:00
staging)
printf "Deploying to STAGING environment...\n"
2026-03-22 15:41:29 -07:00
2026-01-01 16:44:54 -08:00
STAGING_PATH = "/srv/www/stage.binning.net"
2026-03-22 15:41:29 -07:00
2026-01-01 16:44:54 -08:00
sudo mkdir -p ${ STAGING_PATH }
2026-03-22 15:41:29 -07:00
2026-01-01 16:44:54 -08:00
printf "Deploying website files...\n"
2026-03-22 17:21:32 -07:00
sudo rsync -av --delete blog/ ${ STAGING_PATH } /
2026-03-22 15:41:29 -07:00
2026-01-01 16:44:54 -08:00
sudo chown -R nginx:nginx ${ STAGING_PATH } /
2026-03-22 09:05:34 -07:00
printf "✓ Staging deployment complete!\n Files deployed to: %s\n\nTo activate nginx, import staging.nginx.nix into your local NixOS config\nand run: sudo nixos-rebuild switch\n" " ${ STAGING_PATH } "
2026-01-01 16:44:54 -08:00
; ;
2026-03-22 15:41:29 -07:00
2026-01-01 16:44:54 -08:00
prod)
printf "Deploying to PRODUCTION environment...\n"
2026-03-22 15:41:29 -07:00
2026-01-01 17:48:00 -08:00
REMOTE_HOST = "crossbox"
2026-03-22 14:06:34 -07:00
REMOTE_USER = "brimlock"
2026-01-01 16:44:54 -08:00
REMOTE_PATH = "/srv/www/binning.net"
2026-03-22 14:06:34 -07:00
2026-01-01 16:44:54 -08:00
if ! ssh -o BatchMode = yes -o ConnectTimeout = 5 ${ REMOTE_USER } @${ REMOTE_HOST } exit 2>/dev/null; then
printf "Warning: SSH connection test failed. Ensure SSH keys are configured.\nYou may be prompted for a password.\n"
fi
2026-03-22 14:06:34 -07:00
2026-01-01 16:44:54 -08:00
printf "Deploying website files...\n"
2026-03-22 17:21:32 -07:00
ssh ${ REMOTE_USER } @${ REMOTE_HOST } "mkdir -p /tmp/blog-deploy"
rsync -avz --delete blog/ ${ REMOTE_USER } @${ REMOTE_HOST } :/tmp/blog-deploy/
ssh ${ REMOTE_USER } @${ REMOTE_HOST } " sudo rsync -avz --delete /tmp/blog-deploy/ ${ REMOTE_PATH } / && \
2026-01-01 17:48:00 -08:00
sudo chown -R nginx:nginx ${ REMOTE_PATH } / && \
printf 'Content deployed.\n' "
2026-03-22 09:05:34 -07:00
2026-03-22 14:06:34 -07:00
printf "✓ Production deployment complete!\n\nNginx configuration is managed by the nixos-config flake (hosts/crossbox/nginx.nix).\n"
2026-01-01 16:44:54 -08:00
; ;
2026-03-22 15:41:29 -07:00
2026-03-22 14:06:34 -07:00
local )
printf "Deploying locally to production path...\n"
LOCAL_PATH = "/srv/www/binning.net"
printf "Deploying website files...\n"
2026-03-22 17:21:32 -07:00
rsync -av --delete blog/ ${ LOCAL_PATH } /
2026-03-22 14:06:34 -07:00
printf "✓ Local deployment complete!\n Files deployed to: %s\n" " ${ LOCAL_PATH } "
; ;
2026-01-01 16:44:54 -08:00
*)
2026-03-22 15:41:29 -07:00
printf "Error: Invalid command '%s'\n" " $CMD "
2026-01-01 16:44:54 -08:00
usage
; ;
esac