Skip to main content

max / mnw-cli

2.4 KB · 93 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 REMOTE_DIR="/opt/mnw-cli"
21 STAGING_DIR="/var/lib/mnw-cli/staging"
22 BINARY_NAME="mnw-cli"
23 TARGET="x86_64-unknown-linux-gnu"
24 DEPLOY_DIR="deploy"
25
26 # Check we're in the right directory
27 if [ ! -f "Cargo.toml" ]; then
28 echo "Error: Run this script from the mnw-cli/ directory"
29 exit 1
30 fi
31
32 upload_config() {
33 echo "[config] Uploading configuration files..."
34 scp $DEPLOY_DIR/mnw-cli.service $SERVER:/etc/systemd/system/mnw-cli.service
35 ssh $SERVER "systemctl daemon-reload"
36
37 # Ensure directories exist
38 ssh $SERVER "mkdir -p $REMOTE_DIR $STAGING_DIR"
39 ssh $SERVER "chown mnw-cli:mnw-cli $STAGING_DIR"
40
41 echo "[config] Done"
42 }
43
44 build_binary() {
45 echo "[build] Cross-compiling for $TARGET..."
46 ulimit -n 65536 2>/dev/null || true
47 cargo zigbuild --release --target $TARGET
48 echo "[build] Done: target/$TARGET/release/$BINARY_NAME"
49 }
50
51 upload_binary() {
52 echo "[upload] Stopping service and uploading binary..."
53 ssh $SERVER "systemctl stop mnw-cli || true"
54 scp target/$TARGET/release/$BINARY_NAME $SERVER:$REMOTE_DIR/$BINARY_NAME
55 ssh $SERVER "chmod +x $REMOTE_DIR/$BINARY_NAME"
56 echo "[upload] Done"
57 }
58
59 restart_app() {
60 echo "[restart] Restarting mnw-cli..."
61 ssh $SERVER "systemctl restart mnw-cli"
62 sleep 1
63 echo ""
64 ssh $SERVER "systemctl status mnw-cli --no-pager"
65 }
66
67 case "${1:-full}" in
68 --quick)
69 echo "=== Quick Deploy ==="
70 build_binary
71 upload_binary
72 restart_app
73 ;;
74 --config)
75 echo "=== Config Deploy ==="
76 upload_config
77 ;;
78 full|"")
79 echo "=== Full Deploy ==="
80 build_binary
81 upload_config
82 upload_binary
83 restart_app
84 ;;
85 *)
86 echo "Usage: $0 [--quick|--config]"
87 exit 1
88 ;;
89 esac
90
91 echo ""
92 echo "=== Deploy Complete ==="
93