Repository files, collaboration, releases and project activity.
ARCHFORGE HISTORY
Blame · scripts/deploy.sh
Branch main · the Commit author is not necessarily a verified ArchForge account.
e59b7f7cc6archadmin2026-10-11
1 #!/usr/bin/env bashe59b7f7cc6archadmin2026-10-11
2 set -Eeuo pipefaile59b7f7cc6archadmin2026-10-11
3 umask 022e59b7f7cc6archadmin2026-10-11
4 [[ $EUID -eq 0 ]] || { echo 'Run as root through sudo.' >&2; exit 1; }e59b7f7cc6archadmin2026-10-11
5 [[ $# -eq 1 && -d "$1/src" && -f "$1/package.json" ]] || { echo 'Usage: sudo scripts/deploy.sh /path/to/git-checkout' >&2; exit 1; }e59b7f7cc6archadmin2026-10-11
6 SOURCE=$(realpath -- "$1")e59b7f7cc6archadmin2026-10-11
7 BASE=/opt/archforge-statuse59b7f7cc6archadmin2026-10-11
8 mkdir -p "$BASE/releases"e59b7f7cc6archadmin2026-10-11
9 TMP=$(mktemp -d "$BASE/.incoming.XXXXXXXX")e59b7f7cc6archadmin2026-10-11
10 trap 'rm -rf "$TMP"' EXITe59b7f7cc6archadmin2026-10-11
11 mkdir -p "$TMP/app"e59b7f7cc6archadmin2026-10-11
12 rsync -a --delete --exclude='.git' --exclude='data' --exclude='backups' --exclude='.env' --exclude='node_modules' --chmod=D755,F644 "$SOURCE/" "$TMP/app/"e59b7f7cc6archadmin2026-10-11
13 /usr/bin/node --check "$TMP/app/src/server.js"e59b7f7cc6archadmin2026-10-11
14 /usr/bin/node --test "$TMP/app/tests/"*.test.jse59b7f7cc6archadmin2026-10-11
15 if [[ -d "$BASE/app" ]]; thene59b7f7cc6archadmin2026-10-11
16 /bin/bash "$BASE/app/scripts/backup.sh"e59b7f7cc6archadmin2026-10-11
17 systemctl stop archforge-statuse59b7f7cc6archadmin2026-10-11
18 SNAP="$BASE/releases/release-$(date -u +%Y%m%d-%H%M%S)"e59b7f7cc6archadmin2026-10-11
19 mv "$BASE/app" "$SNAP"e59b7f7cc6archadmin2026-10-11
20 echo "$SNAP" > "$BASE/previous-release"e59b7f7cc6archadmin2026-10-11
21 fie59b7f7cc6archadmin2026-10-11
22 mv "$TMP/app" "$BASE/app"e59b7f7cc6archadmin2026-10-11
23 chown -R root:root "$BASE/app"e59b7f7cc6archadmin2026-10-11
24 chmod 755 "$BASE/app"e59b7f7cc6archadmin2026-10-11
25 systemctl start archforge-statuse59b7f7cc6archadmin2026-10-11
26 sleep 2e59b7f7cc6archadmin2026-10-11
27 if ! systemctl is-active --quiet archforge-status; thene59b7f7cc6archadmin2026-10-11
28 echo 'New version failed to start! Restoring previous release...' >&2e59b7f7cc6archadmin2026-10-11
29 systemctl stop archforge-status || truee59b7f7cc6archadmin2026-10-11
30 mv "$BASE/app" "$BASE/releases/failed-$(date +%s)"e59b7f7cc6archadmin2026-10-11
31 if [[ -f "$BASE/previous-release" ]]; then mv "$(cat "$BASE/previous-release")" "$BASE/app";systemctl start archforge-status; fie59b7f7cc6archadmin2026-10-11
32 exit 1e59b7f7cc6archadmin2026-10-11
33 fie59b7f7cc6archadmin2026-10-11
34 echo 'Deployment successful.'