annotate hg-web/deploy.sh @ 239:40fa2363fee1

[mrjunejune] Simplify homepage copy
author MrJuneJune <me@mrjunejune.com>
date Mon, 03 Aug 2026 10:36:12 -0700
parents 8bb0ac8f4587
children c5129452493e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
1 #!/usr/bin/env bash
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
2 set -Eeuo pipefail
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
3
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
4 SERVICE_NAME="${SERVICE_NAME:-hg_web_server.service}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
5 RELEASE_ROOT="${RELEASE_ROOT:-/opt/hg_web_server_releases}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
6 ACTIVE_PATH="${ACTIVE_PATH:-/opt/hg_web_server_bundle_active}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
7 HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:6970/}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
8 SERVICE_USER="${SERVICE_USER:-hg_web_server}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
9 SERVICE_GROUP="${SERVICE_GROUP:-zenbu_team}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
10
227
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
11 workspace="${BUILD_WORKSPACE_DIRECTORY:-$(hg root)}"
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
12 cd "$workspace"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
13
227
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
14 if [[ -n "${BUILD_WORKSPACE_DIRECTORY:-}" ]]; then
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
15 if [[ -n "${RUNFILES_DIR:-}" ]]; then
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
16 source "$RUNFILES_DIR/bazel_tools/tools/bash/runfiles/runfiles.bash"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
17 elif [[ -n "${RUNFILES_MANIFEST_FILE:-}" ]]; then
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
18 runfiles_library="$(
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
19 grep -sm1 '^bazel_tools/tools/bash/runfiles/runfiles.bash ' \
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
20 "$RUNFILES_MANIFEST_FILE" | cut -d' ' -f2-
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
21 )"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
22 source "$runfiles_library"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
23 elif [[ -d "$0.runfiles" ]]; then
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
24 RUNFILES_DIR="$0.runfiles"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
25 export RUNFILES_DIR
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
26 source "$RUNFILES_DIR/bazel_tools/tools/bash/runfiles/runfiles.bash"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
27 elif [[ -f "$0.runfiles_manifest" ]]; then
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
28 RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
29 export RUNFILES_MANIFEST_FILE
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
30 runfiles_library="$(
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
31 grep -sm1 '^bazel_tools/tools/bash/runfiles/runfiles.bash ' \
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
32 "$RUNFILES_MANIFEST_FILE" | cut -d' ' -f2-
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
33 )"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
34 source "$runfiles_library"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
35 else
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
36 echo "Bazel runfiles are unavailable." >&2
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
37 exit 1
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
38 fi
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
39 bundle_dir="$(rlocation _main/hg-web/hg_web_server_bundle)"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
40 else
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
41 bazel build -c opt //hg-web:hg_web_server_bundle
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
42 bundle_dir="bazel-bin/hg-web/hg_web_server_bundle"
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
43 fi
8bb0ac8f4587 [hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
44
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
45 revision="$(hg log -r . -T '{node|short}')"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
46 release_name="${revision}-$(date -u +%Y%m%dT%H%M%SZ)"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
47 release_dir="${RELEASE_ROOT}/${release_name}"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
48 staging_dir="${RELEASE_ROOT}/.${release_name}.tmp"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
49 next_link="${ACTIVE_PATH}.next"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
50 previous_release=""
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
51 promoted=0
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
52
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
53 health_check() {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
54 for _ in $(seq 1 20); do
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
55 if curl --fail --silent --max-time 3 "$HEALTH_URL" >/dev/null; then
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
56 return 0
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
57 fi
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
58 sleep 1
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
59 done
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
60 echo "Health check failed: $HEALTH_URL" >&2
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
61 return 1
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
62 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
63
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
64 point_active_at() {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
65 local target="$1"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
66 sudo rm -f "$next_link"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
67 sudo ln -s "$target" "$next_link"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
68 sudo mv -Tf "$next_link" "$ACTIVE_PATH"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
69 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
70
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
71 rollback() {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
72 trap - ERR
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
73 if [[ "$promoted" -eq 1 && -n "$previous_release" && -d "$previous_release" ]]; then
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
74 echo "Deployment failed; rolling back to $previous_release" >&2
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
75 point_active_at "$previous_release"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
76 sudo systemctl restart "$SERVICE_NAME"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
77 health_check || echo "Rollback completed, but the health check still fails." >&2
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
78 else
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
79 echo "Deployment failed and no previous release is available for rollback." >&2
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
80 fi
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
81 sudo rm -rf "$staging_dir"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
82 exit 1
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
83 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
84 trap rollback ERR
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
85
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
86 sudo install -d -o root -g "$SERVICE_GROUP" -m 0755 "$RELEASE_ROOT"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
87 sudo rm -rf "$staging_dir"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
88 sudo install -d -o "$SERVICE_USER" -g "$SERVICE_GROUP" -m 0755 "$staging_dir"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
89 sudo cp -a "${bundle_dir}/." "$staging_dir/"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
90 sudo chown -R "$SERVICE_USER:$SERVICE_GROUP" "$staging_dir"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
91
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
92 sudo test -x "$staging_dir/hg_web_server"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
93 sudo test -f "$staging_dir/hg-web/src/index.html"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
94 sudo test -f "$staging_dir/hg-web/src/page.js"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
95 sudo mv "$staging_dir" "$release_dir"
104
2301aeb7503b [Hg Web] Super simple mercurial server.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
96
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
97 if [[ -L "$ACTIVE_PATH" ]]; then
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
98 previous_release="$(readlink -f "$ACTIVE_PATH")"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
99 elif [[ -d "$ACTIVE_PATH" ]]; then
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
100 previous_release="${RELEASE_ROOT}/legacy-$(date -u +%Y%m%dT%H%M%SZ)"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
101 sudo mv "$ACTIVE_PATH" "$previous_release"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
102 fi
104
2301aeb7503b [Hg Web] Super simple mercurial server.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
103
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
104 point_active_at "$release_dir"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
105 promoted=1
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
106 sudo systemctl restart "$SERVICE_NAME"
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
107 health_check
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
108
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
109 trap - ERR
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 105
diff changeset
110 echo "Deployment complete: $release_dir"