Bash · 1296 bytes Raw Blame History
1 #!/usr/bin/env bash
2 set -euo pipefail
3
4 STAMP=$(date +%Y-%m-%d-%H%M%S)
5 OUTDIR=~/builds/$STAMP
6 SITE=/var/www/dougk.world
7
8 # Detect distro
9 if [ -f /etc/os-release ]; then
10 . /etc/os-release
11 DISTRO="${ID:-unknown}"
12 else
13 DISTRO="unknown"
14 fi
15
16 echo "▶ Detected distro: $DISTRO"
17
18 # Ensure builds directory exists
19 mkdir -p ~/builds
20
21 echo "▶ npm ci"
22 npm ci
23
24 echo "▶ npm run build"
25 npm run build
26 mv dist "$OUTDIR"
27
28 echo "▶ copy into releases"
29 sudo mkdir -p "$SITE/releases"
30 sudo rsync -az --delete "$OUTDIR"/ "$SITE/releases/$STAMP/"
31
32 # SELinux context fix (Alma/RHEL/Fedora only)
33 case "$DISTRO" in
34 almalinux|rhel|centos|fedora|rocky)
35 echo "▶ fix selinux context"
36 sudo restorecon -Rv "$SITE/releases/$STAMP"
37 ;;
38 nixos|arch|manjaro|endeavouros)
39 echo "▶ skipping selinux (not used on $DISTRO)"
40 ;;
41 *)
42 # Fallback: run restorecon if available
43 if command -v restorecon &>/dev/null; then
44 echo "▶ fix selinux context"
45 sudo restorecon -Rv "$SITE/releases/$STAMP"
46 fi
47 ;;
48 esac
49
50 echo "▶ flip current symlink"
51 sudo rm -rf "$SITE/current"
52 sudo ln -s "$SITE/releases/$STAMP" "$SITE/current"
53
54 echo "▶ reload nginx"
55 sudo systemctl reload nginx
56
57 echo "✓ Deployed dougk $STAMP on $DISTRO"