feat: Add a Forgejo Actions pipeline
Added a Forgejo Actions CI/CD pipeline to supersede the manual deploy.sh, automating builds and deployments on push.
This commit is contained in:
parent
e1801e257b
commit
8a843b832a
2 changed files with 36 additions and 10 deletions
17
.forgejo/workflows/deploy.yaml
Normal file
17
.forgejo/workflows/deploy.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
name: Build and Deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
run: nix shell nixpkgs#mdbook --command ./deploy.sh local
|
||||||
29
deploy.sh
29
deploy.sh
|
|
@ -9,7 +9,7 @@ mdbook build
|
||||||
|
|
||||||
# Usage information
|
# Usage information
|
||||||
usage() {
|
usage() {
|
||||||
printf "Usage: %s [staging|prod]\n\n staging - Deploy to local staging environment (/srv/www/stage.binning.net)\n prod - Deploy to production server via SSH (www.binning.net)\n\nExample:\n %s staging\n %s prod\n" "$0" "$0" "$0"
|
printf "Usage: %s [staging|prod|local]\n\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 staging\n %s prod\n %s local\n" "$0" "$0" "$0" "$0"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,27 +46,36 @@ case $ENV in
|
||||||
|
|
||||||
# SSH details
|
# SSH details
|
||||||
REMOTE_HOST="crossbox"
|
REMOTE_HOST="crossbox"
|
||||||
REMOTE_USER="m3b"
|
REMOTE_USER="brimlock"
|
||||||
REMOTE_PATH="/srv/www/binning.net"
|
REMOTE_PATH="/srv/www/binning.net"
|
||||||
|
|
||||||
# Check if SSH key is set up
|
# Check if SSH key is set up
|
||||||
if ! ssh -o BatchMode=yes -o ConnectTimeout=5 ${REMOTE_USER}@${REMOTE_HOST} exit 2>/dev/null; then
|
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"
|
printf "Warning: SSH connection test failed. Ensure SSH keys are configured.\nYou may be prompted for a password.\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Deploy website files via rsync over SSH
|
# Deploy website files via rsync over SSH
|
||||||
# Using just the host from SSH config without user@ prefix
|
|
||||||
printf "Deploying website files...\n"
|
printf "Deploying website files...\n"
|
||||||
ssh ${REMOTE_HOST} "mkdir -p /tmp/${REMOTE_PATH}"
|
ssh ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p /tmp/${REMOTE_PATH}"
|
||||||
rsync -avz --delete ${DEPLOY_FILES} ${REMOTE_HOST}:/tmp/${REMOTE_PATH}/
|
rsync -avz --delete main/ blog ${REMOTE_USER}@${REMOTE_HOST}:/tmp/${REMOTE_PATH}/
|
||||||
# Set proper permissions and move config on remote server
|
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo rsync -avz --delete /tmp/${REMOTE_PATH}/ ${REMOTE_PATH}/ && \
|
||||||
ssh ${REMOTE_HOST} "sudo rsync -avz --delete /tmp/${REMOTE_PATH}/ ${REMOTE_PATH} && \
|
|
||||||
sudo chown -R nginx:nginx ${REMOTE_PATH}/ && \
|
sudo chown -R nginx:nginx ${REMOTE_PATH}/ && \
|
||||||
printf 'Content deployed.\n'"
|
printf 'Content deployed.\n'"
|
||||||
|
|
||||||
printf "✓ Production deployment complete!\n\nNginx configuration is managed by the nixos-config flake (hosts/crossbox/nginx.nix).\n" "${REMOTE_HOST}"
|
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 main/ blog ${LOCAL_PATH}/
|
||||||
|
|
||||||
|
printf "✓ Local deployment complete!\n Files deployed to: %s\n" "${LOCAL_PATH}"
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
printf "Error: Invalid environment '%s'\n" "$ENV"
|
printf "Error: Invalid environment '%s'\n" "$ENV"
|
||||||
usage
|
usage
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue