All checks were successful
Build and Deploy / deploy (push) Successful in 5s
80 lines
2.6 KiB
Bash
Executable file
80 lines
2.6 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
set -e
|
|
|
|
usage() {
|
|
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"
|
|
exit 1
|
|
}
|
|
|
|
if [ $# -eq 0 ]; then
|
|
printf "Error: No command specified\n"
|
|
usage
|
|
fi
|
|
|
|
CMD=$1
|
|
|
|
case $CMD in
|
|
sync)
|
|
rsync -avz src/ /var/lib/www/
|
|
;;
|
|
|
|
build)
|
|
printf "Building blog with mdbook...\n"
|
|
[ -s src ] || ln -s /var/lib/www src
|
|
mdbook build
|
|
printf "✓ Build complete!\n"
|
|
;;
|
|
|
|
staging)
|
|
printf "Deploying to STAGING environment...\n"
|
|
|
|
STAGING_PATH="/srv/www/stage.binning.net"
|
|
|
|
sudo mkdir -p ${STAGING_PATH}
|
|
|
|
printf "Deploying website files...\n"
|
|
sudo rsync -av --delete blog/ ${STAGING_PATH}/
|
|
|
|
sudo chown -R nginx:nginx ${STAGING_PATH}/
|
|
|
|
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}"
|
|
;;
|
|
|
|
prod)
|
|
printf "Deploying to PRODUCTION environment...\n"
|
|
|
|
REMOTE_HOST="crossbox"
|
|
REMOTE_USER="brimlock"
|
|
REMOTE_PATH="/srv/www/binning.net"
|
|
|
|
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
|
|
|
|
printf "Deploying website files...\n"
|
|
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}/ && \
|
|
sudo chown -R nginx:nginx ${REMOTE_PATH}/ && \
|
|
printf 'Content deployed.\n'"
|
|
|
|
printf "✓ Production deployment complete!\n\nNginx configuration is managed by the nixos-config flake (hosts/crossbox/nginx.nix).\n"
|
|
;;
|
|
|
|
local)
|
|
printf "Deploying locally to production path...\n"
|
|
|
|
LOCAL_PATH="/srv/www/binning.net"
|
|
|
|
printf "Deploying website files...\n"
|
|
rsync -av --delete blog/ ${LOCAL_PATH}/
|
|
|
|
printf "✓ Local deployment complete!\n Files deployed to: %s\n" "${LOCAL_PATH}"
|
|
;;
|
|
|
|
*)
|
|
printf "Error: Invalid command '%s'\n" "$CMD"
|
|
usage
|
|
;;
|
|
esac
|