Skip to main content

max / makenotwork

2.5 KB · 96 lines History Blame Raw
1 #!/bin/bash
2 # MNW CLI Deployment Script
3 # Cross-compiles for x86_64 Linux on macOS, uploads binary, restarts service.
4 # Run from the mnw-cli directory.
5 #
6 # Usage:
7 # ./deploy/deploy.sh # Full deploy (build + upload + config + restart)
8 # ./deploy/deploy.sh --quick # Quick deploy (build + upload binary + restart)
9 # ./deploy/deploy.sh --config # Config only (upload systemd unit)
10 #
11 # Prerequisites (one-time):
12 # brew install zig
13 # cargo install cargo-zigbuild
14 # rustup target add x86_64-unknown-linux-gnu
15
16 set -e
17
18 # Configuration
19 SERVER="root@100.120.174.96"
20 SSH_PORT=2200
21 SSH_OPTS="-p $SSH_PORT"
22 SCP_OPTS="-P $SSH_PORT"
23 REMOTE_DIR="/opt/mnw-cli"
24 STAGING_DIR="/var/lib/mnw-cli/staging"
25 BINARY_NAME="mnw-cli"
26 TARGET="x86_64-unknown-linux-gnu"
27 DEPLOY_DIR="deploy"
28
29 # Check we're in the right directory
30 if [ ! -f "Cargo.toml" ]; then
31 echo "Error: Run this script from the mnw-cli/ directory"
32 exit 1
33 fi
34
35 upload_config() {
36 echo "[config] Uploading configuration files..."
37 scp $SCP_OPTS $DEPLOY_DIR/mnw-cli.service $SERVER:/etc/systemd/system/mnw-cli.service
38 ssh $SSH_OPTS $SERVER "systemctl daemon-reload"
39
40 # Ensure directories exist
41 ssh $SSH_OPTS $SERVER "mkdir -p $REMOTE_DIR $STAGING_DIR"
42 ssh $SSH_OPTS $SERVER "chown mnw-cli:mnw-cli $STAGING_DIR"
43
44 echo "[config] Done"
45 }
46
47 build_binary() {
48 echo "[build] Cross-compiling for $TARGET..."
49 ulimit -n 65536 2>/dev/null || true
50 cargo zigbuild --release --target $TARGET
51 echo "[build] Done: target/$TARGET/release/$BINARY_NAME"
52 }
53
54 upload_binary() {
55 echo "[upload] Stopping service and uploading binary..."
56 ssh $SSH_OPTS $SERVER "systemctl stop mnw-cli || true"
57 scp $SCP_OPTS target/$TARGET/release/$BINARY_NAME $SERVER:$REMOTE_DIR/$BINARY_NAME
58 ssh $SSH_OPTS $SERVER "chmod +x $REMOTE_DIR/$BINARY_NAME"
59 echo "[upload] Done"
60 }
61
62 restart_app() {
63 echo "[restart] Restarting mnw-cli..."
64 ssh $SSH_OPTS $SERVER "systemctl restart mnw-cli"
65 sleep 1
66 echo ""
67 ssh $SSH_OPTS $SERVER "systemctl status mnw-cli --no-pager"
68 }
69
70 case "${1:-full}" in
71 --quick)
72 echo "=== Quick Deploy ==="
73 build_binary
74 upload_binary
75 restart_app
76 ;;
77 --config)
78 echo "=== Config Deploy ==="
79 upload_config
80 ;;
81 full|"")
82 echo "=== Full Deploy ==="
83 build_binary
84 upload_config
85 upload_binary
86 restart_app
87 ;;
88 *)
89 echo "Usage: $0 [--quick|--config]"
90 exit 1
91 ;;
92 esac
93
94 echo ""
95 echo "=== Deploy Complete ==="
96