comparison mrjunejune/deploy.sh @ 266:efaf4c63cc94

fix clean production bundle staging Recreate deployment staging before copying the Bazel bundle and verify required inference runtime paths before promoting it. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Fri, 07 Aug 2026 12:52:30 -0700
parents 1f9877b637e9
children a78f5986011f
comparison
equal deleted inserted replaced
265:056790c4fb0d 266:efaf4c63cc94
1 #!/bin/bash 1 #!/usr/bin/env bash
2 bazel build -c opt //mrjunejune:mrjunejune_server_bundle 2 set -euo pipefail
3 3
4 # Create 4 bazel build -c opt //mrjunejune:mrjunejune_server_bundle
5 sudo mkdir -p /opt/mrjunejune_server 5
6 sudo cp -a bazel-bin/mrjunejune/mrjunejune_server_bundle /opt/mrjunejune_server_bundle_new 6 bundle="$(realpath bazel-bin/mrjunejune/mrjunejune_server_bundle)"
7 staging="/opt/mrjunejune_server_bundle_new"
8 active="/opt/mrjunejune_server_bundle_active"
9
10 # Always create staging from an empty directory. Copying into an existing
11 # directory nests the bundle and can promote stale/incomplete runtime files.
12 sudo rm -rf "$staging"
13 sudo mkdir -p "$staging"
14 sudo cp -a "$bundle"/. "$staging"/
7 sudo mv \ 15 sudo mv \
8 /opt/mrjunejune_server_bundle_new/mrjunejune_server \ 16 "$staging/mrjunejune_server" \
9 /opt/mrjunejune_server_bundle_new/mrjunejune_server_binary 17 "$staging/mrjunejune_server_binary"
10 sudo cp \ 18 sudo cp \
11 /opt/mrjunejune_server_bundle_new/mrjunejune/production_entrypoint.sh \ 19 "$staging/mrjunejune/production_entrypoint.sh" \
12 /opt/mrjunejune_server_bundle_new/mrjunejune_server 20 "$staging/mrjunejune_server"
21
22 required_runtime=(
23 "$staging/mrjunejune_server"
24 "$staging/mrjunejune_server_binary"
25 "$staging/mrjunejune/inference_stack.sh"
26 "$staging/mrjunejune/inference_sidecar_launcher.sh"
27 "$staging/mrjunejune/inference/copilot_sidecar.zip"
28 "$staging/mrjunejune/inference/litellm_proxy.zip"
29 "$staging/mrjunejune/inference/litellm_config.yaml"
30 "$staging/+http_archive+copilot_cli_linux_x86_64/copilot"
31 "$staging/rules_python++python+python_3_11_x86_64-unknown-linux-gnu/bin/python3"
32 )
33 for runtime_path in "${required_runtime[@]}"; do
34 if [[ ! -e "$runtime_path" ]]; then
35 echo "Deployment bundle is missing runtime: $runtime_path" >&2
36 exit 1
37 fi
38 done
39
13 sudo chmod +x \ 40 sudo chmod +x \
14 /opt/mrjunejune_server_bundle_new/mrjunejune_server \ 41 "$staging/mrjunejune_server" \
15 /opt/mrjunejune_server_bundle_new/mrjunejune/inference_stack.sh \ 42 "$staging/mrjunejune/inference_stack.sh" \
16 /opt/mrjunejune_server_bundle_new/mrjunejune/inference_sidecar_launcher.sh 43 "$staging/mrjunejune/inference_sidecar_launcher.sh" \
17 sudo chown -R mrjunejune_server:zenbu_team /opt/mrjunejune_server_bundle_new 44 "$staging/+http_archive+copilot_cli_linux_x86_64/copilot"
18 # sqlite3 db 45 sudo chown -R mrjunejune_server:zenbu_team "$staging"
46
47 # Persistent database, config, and Copilot tokens stay outside the immutable
48 # bundle and survive swaps.
19 sudo mkdir -p /opt/data/mrjunejune/ 49 sudo mkdir -p /opt/data/mrjunejune/
20 sudo chown -R mrjunejune_server:zenbu_team /opt/data/mrjunejune/ 50 sudo chown -R mrjunejune_server:zenbu_team /opt/data/mrjunejune/
21 51
22 # Swap 52 # Swap
23 sudo rm -rf /opt/mrjunejune_server_bundle_active 53 sudo rm -rf "$active"
24 sudo mv /opt/mrjunejune_server_bundle_new /opt/mrjunejune_server_bundle_active 54 sudo mv "$staging" "$active"
25 55
26 sudo systemctl restart mrjunejune_server.service 56 sudo systemctl restart mrjunejune_server.service
27 echo "Deployment complete!" 57 echo "Deployment complete!"