Mercurial
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!" |