Mercurial
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 |
| 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 | 92 sudo systemctl restart mrjunejune_server.service |
| 93 echo "Deployment complete!" |