annotate mrjunejune/deploy.sh @ 270:358dd5950985

sync production config on every deploy Always install the ignored repository .config into /etc/mrjunejune before promoting the new bundle. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Fri, 07 Aug 2026 13:16:47 -0700
parents de291f396881
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
1 #!/usr/bin/env bash
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
2 set -euo pipefail
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
3
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
4 bazel build -c opt //mrjunejune:mrjunejune_server_bundle
99
684edfaf93b7 Updating deployment script
June Park <parkjune1995@gmail.com>
parents: 98
diff changeset
5
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
6 bundle="$(realpath bazel-bin/mrjunejune/mrjunejune_server_bundle)"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
7 staging="/opt/mrjunejune_server_bundle_new"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
8 active="/opt/mrjunejune_server_bundle_active"
269
de291f396881 install initial production config
MrJuneJune <me@mrjunejune.com>
parents: 268
diff changeset
9 source_config="$(pwd)/mrjunejune/.config"
de291f396881 install initial production config
MrJuneJune <me@mrjunejune.com>
parents: 268
diff changeset
10 production_config="/etc/mrjunejune/.config"
de291f396881 install initial production config
MrJuneJune <me@mrjunejune.com>
parents: 268
diff changeset
11
de291f396881 install initial production config
MrJuneJune <me@mrjunejune.com>
parents: 268
diff changeset
12 # The real config is ignored and intentionally excluded from the immutable
270
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
13 # bundle. Synchronize the repository's service config on every deployment.
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
14 if [[ ! -f "$source_config" ]]; then
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
15 echo "Missing deployment config: $source_config" >&2
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
16 exit 1
269
de291f396881 install initial production config
MrJuneJune <me@mrjunejune.com>
parents: 268
diff changeset
17 fi
270
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
18 sudo install -d -o mrjunejune_server -g zenbu_team -m 0750 \
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
19 "$(dirname "$production_config")"
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
20 sudo install -o mrjunejune_server -g zenbu_team -m 0640 \
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
21 "$source_config" "$production_config"
358dd5950985 sync production config on every deploy
MrJuneJune <me@mrjunejune.com>
parents: 269
diff changeset
22 echo "Updated production config at $production_config"
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
23
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
24 # Always create staging from an empty directory. Copying into an existing
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
25 # directory nests the bundle and can promote stale/incomplete runtime files.
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
26 sudo rm -rf "$staging"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
27 sudo mkdir -p "$staging"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
28 sudo cp -a "$bundle"/. "$staging"/
260
1f9877b637e9 Add Copilot-powered cyberpunk JRPG chat
MrJuneJune <mrjunejune@users.noreply.github.com>
parents: 207
diff changeset
29 sudo mv \
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
30 "$staging/mrjunejune_server" \
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
31 "$staging/mrjunejune_server_binary"
260
1f9877b637e9 Add Copilot-powered cyberpunk JRPG chat
MrJuneJune <mrjunejune@users.noreply.github.com>
parents: 207
diff changeset
32 sudo cp \
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
33 "$staging/mrjunejune/production_entrypoint.sh" \
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
34 "$staging/mrjunejune_server"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
35
267
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
36 copilot_cli="$(
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
37 sudo find -L "$staging" -type f \
268
f7b1188d5fb1 support repo rules Copilot bundle path
MrJuneJune <me@mrjunejune.com>
parents: 267
diff changeset
38 \( \
f7b1188d5fb1 support repo rules Copilot bundle path
MrJuneJune <me@mrjunejune.com>
parents: 267
diff changeset
39 -path '*+_repo_rules2+copilot_cli_linux_x86_64/copilot' -o \
f7b1188d5fb1 support repo rules Copilot bundle path
MrJuneJune <me@mrjunejune.com>
parents: 267
diff changeset
40 -path '*+http_archive+copilot_cli_linux_x86_64/copilot' \
f7b1188d5fb1 support repo rules Copilot bundle path
MrJuneJune <me@mrjunejune.com>
parents: 267
diff changeset
41 \) -print -quit
267
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
42 )"
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
43 python_runtime="$(
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
44 sudo find -L "$staging" -type f \
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
45 -path '*/rules_python++python+python_3_11_x86_64-unknown-linux-gnu/bin/python3' \
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
46 -print -quit
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
47 )"
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
48 if [[ -z "$copilot_cli" ]]; then
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
49 echo "Deployment bundle does not contain the Copilot CLI" >&2
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
50 exit 1
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
51 fi
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
52 if [[ -z "$python_runtime" ]]; then
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
53 echo "Deployment bundle does not contain the Python runtime" >&2
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
54 exit 1
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
55 fi
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
56
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
57 required_runtime=(
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
58 "$staging/mrjunejune_server"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
59 "$staging/mrjunejune_server_binary"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
60 "$staging/mrjunejune/inference_stack.sh"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
61 "$staging/mrjunejune/inference_sidecar_launcher.sh"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
62 "$staging/mrjunejune/inference/copilot_sidecar.zip"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
63 "$staging/mrjunejune/inference/litellm_proxy.zip"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
64 "$staging/mrjunejune/inference/litellm_config.yaml"
267
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
65 "$copilot_cli"
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
66 "$python_runtime"
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
67 )
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
68 for runtime_path in "${required_runtime[@]}"; do
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
69 if [[ ! -e "$runtime_path" ]]; then
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
70 echo "Deployment bundle is missing runtime: $runtime_path" >&2
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
71 exit 1
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
72 fi
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
73 done
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
74
260
1f9877b637e9 Add Copilot-powered cyberpunk JRPG chat
MrJuneJune <mrjunejune@users.noreply.github.com>
parents: 207
diff changeset
75 sudo chmod +x \
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
76 "$staging/mrjunejune_server" \
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
77 "$staging/mrjunejune/inference_stack.sh" \
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
78 "$staging/mrjunejune/inference_sidecar_launcher.sh" \
267
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
79 "$copilot_cli" \
a78f5986011f discover bundled production runtimes
MrJuneJune <me@mrjunejune.com>
parents: 266
diff changeset
80 "$python_runtime"
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
81 sudo chown -R mrjunejune_server:zenbu_team "$staging"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
82
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
83 # Persistent database, config, and Copilot tokens stay outside the immutable
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
84 # bundle and survive swaps.
207
58d9b64d8dca Updated deployment script to include sqlite3
MrJuneJune <me@mrjunejune.com>
parents: 102
diff changeset
85 sudo mkdir -p /opt/data/mrjunejune/
58d9b64d8dca Updated deployment script to include sqlite3
MrJuneJune <me@mrjunejune.com>
parents: 102
diff changeset
86 sudo chown -R mrjunejune_server:zenbu_team /opt/data/mrjunejune/
99
684edfaf93b7 Updating deployment script
June Park <parkjune1995@gmail.com>
parents: 98
diff changeset
87
684edfaf93b7 Updating deployment script
June Park <parkjune1995@gmail.com>
parents: 98
diff changeset
88 # Swap
266
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
89 sudo rm -rf "$active"
efaf4c63cc94 fix clean production bundle staging
MrJuneJune <me@mrjunejune.com>
parents: 260
diff changeset
90 sudo mv "$staging" "$active"
99
684edfaf93b7 Updating deployment script
June Park <parkjune1995@gmail.com>
parents: 98
diff changeset
91
98
5c47eab8032d Updated deploy script
June Park <parkjune1995@gmail.com>
parents: 97
diff changeset
92 sudo systemctl restart mrjunejune_server.service
5c47eab8032d Updated deploy script
June Park <parkjune1995@gmail.com>
parents: 97
diff changeset
93 echo "Deployment complete!"