Mercurial
annotate hg-web/deploy.sh @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | c5129452493e |
| children |
| 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 SERVICE_USER="${SERVICE_USER:-hg_web_server}" |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
6 SERVICE_GROUP="${SERVICE_GROUP:-zenbu_team}" |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
7 DEPLOY_ROOT="${DEPLOY_ROOT:-/opt/hg_web_server}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
8 ACTIVE_PATH="${ACTIVE_PATH:-${DEPLOY_ROOT}/active}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
9 NEW_PATH="${NEW_PATH:-${DEPLOY_ROOT}/new}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
10 BACKUP_PATH="${BACKUP_PATH:-${DEPLOY_ROOT}/previous}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
11 REPOSITORY_PATH="${REPOSITORY_PATH:-${DEPLOY_ROOT}/repository}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
12 REPOSITORY_NEW_PATH="${REPOSITORY_NEW_PATH:-${DEPLOY_ROOT}/repository-new}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
13 HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:6970/}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
14 HG_ALLOW_PUSH="${HG_ALLOW_PUSH:-false}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
15 MANAGE_NGINX="${MANAGE_NGINX:-auto}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
16 NGINX_SERVER_NAME="${NGINX_SERVER_NAME:-zenbu.babocoder.com}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
17 NGINX_SITE_NAME="${NGINX_SITE_NAME:-hg-web}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
18 NGINX_SITE_AVAILABLE="${NGINX_SITE_AVAILABLE:-/etc/nginx/sites-available/${NGINX_SITE_NAME}}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
19 NGINX_SITE_ENABLED="${NGINX_SITE_ENABLED:-/etc/nginx/sites-enabled/${NGINX_SITE_NAME}}" |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
20 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
21 workspace="${BUILD_WORKSPACE_DIRECTORY:-$(cd "$(dirname "$0")/.." && pwd)}" |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
22 cd "$workspace" |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
23 if [[ ! -d "$workspace/.hg" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
24 echo "Run deployment from a Zenbu Mercurial workspace." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
25 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
26 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
27 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
28 DEPLOY_ROOT="$(realpath -m "$DEPLOY_ROOT")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
29 ACTIVE_PATH="$(realpath -m "$ACTIVE_PATH")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
30 NEW_PATH="$(realpath -m "$NEW_PATH")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
31 BACKUP_PATH="$(realpath -m "$BACKUP_PATH")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
32 REPOSITORY_PATH="$(realpath -m "$REPOSITORY_PATH")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
33 REPOSITORY_NEW_PATH="$(realpath -m "$REPOSITORY_NEW_PATH")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
34 if [[ ! "$DEPLOY_ROOT" =~ ^/opt/[A-Za-z0-9._/-]+$ ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
35 echo "DEPLOY_ROOT must be a dedicated directory below /opt." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
36 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
37 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
38 declare -A deployment_paths=() |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
39 for path in \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
40 "$ACTIVE_PATH" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
41 "$NEW_PATH" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
42 "$BACKUP_PATH" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
43 "$REPOSITORY_PATH" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
44 "$REPOSITORY_NEW_PATH"; do |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
45 if [[ "$path" != "$DEPLOY_ROOT/"* ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
46 echo "Deployment path escapes DEPLOY_ROOT: $path" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
47 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
48 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
49 if [[ -n "${deployment_paths[$path]:-}" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
50 echo "Deployment paths must be distinct: $path" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
51 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
52 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
53 deployment_paths["$path"]=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
54 done |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
55 if [[ ! "$SERVICE_USER" =~ ^[A-Za-z0-9._-]+$ || |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
56 ! "$SERVICE_GROUP" =~ ^[A-Za-z0-9._-]+$ || |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
57 ! "$SERVICE_NAME" =~ ^[A-Za-z0-9._@-]+$ || |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
58 ! "$HG_ALLOW_PUSH" =~ ^(true|false)$ ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
59 echo "Invalid systemd deployment setting." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
60 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
61 fi |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
62 |
|
227
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
63 if [[ -n "${BUILD_WORKSPACE_DIRECTORY:-}" ]]; then |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
64 if [[ -n "${RUNFILES_DIR:-}" ]]; then |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
65 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
|
66 elif [[ -n "${RUNFILES_MANIFEST_FILE:-}" ]]; then |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
67 runfiles_library="$( |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
68 grep -sm1 '^bazel_tools/tools/bash/runfiles/runfiles.bash ' \ |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
69 "$RUNFILES_MANIFEST_FILE" | cut -d' ' -f2- |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
70 )" |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
71 source "$runfiles_library" |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
72 elif [[ -d "$0.runfiles" ]]; then |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
73 RUNFILES_DIR="$0.runfiles" |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
74 export RUNFILES_DIR |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
75 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
|
76 elif [[ -f "$0.runfiles_manifest" ]]; then |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
77 RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
78 export RUNFILES_MANIFEST_FILE |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
79 runfiles_library="$( |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
80 grep -sm1 '^bazel_tools/tools/bash/runfiles/runfiles.bash ' \ |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
81 "$RUNFILES_MANIFEST_FILE" | cut -d' ' -f2- |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
82 )" |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
83 source "$runfiles_library" |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
84 else |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
85 echo "Bazel runfiles are unavailable." >&2 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
86 exit 1 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
87 fi |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
88 bundle_dir="$(rlocation _main/hg-web/hg_web_server_bundle)" |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
89 nginx_template="$(rlocation _main/hg-web/nginx/hg-web.conf.template)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
90 service_template="$(rlocation _main/hg-web/systemd/hg-web.service.template)" |
|
227
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
91 else |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
92 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
|
93 bundle_dir="bazel-bin/hg-web/hg_web_server_bundle" |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
94 nginx_template="hg-web/nginx/hg-web.conf.template" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
95 service_template="hg-web/systemd/hg-web.service.template" |
|
227
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
96 fi |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
97 NGINX_SITE_TEMPLATE="${NGINX_SITE_TEMPLATE:-$nginx_template}" |
|
227
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
98 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
99 rendered_nginx="$(mktemp)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
100 rendered_service="$(mktemp)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
101 service_backup="$(mktemp)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
102 repository_bundle="$(mktemp)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
103 release_id="$(date -u +%Y%m%dT%H%M%SZ)-$$" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
104 promotion_prepared=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
105 service_changed=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
106 service_had_previous=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
107 service_was_enabled=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
108 nginx_site_created=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
109 nginx_link_created=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
110 lock_acquired=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
111 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
112 cleanup() { |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
113 rm -f \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
114 "$rendered_nginx" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
115 "$rendered_service" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
116 "$service_backup" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
117 "$repository_bundle" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
118 } |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
119 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
120 health_check() { |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
121 for _ in $(seq 1 20); do |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
122 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
|
123 return 0 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
124 fi |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
125 sleep 1 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
126 done |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
127 return 1 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
128 } |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
129 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
130 restore_host_configuration() { |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
131 local restore_failed=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
132 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
133 if [[ "$nginx_link_created" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
134 sudo rm -f "$NGINX_SITE_ENABLED" || restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
135 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
136 if [[ "$nginx_site_created" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
137 sudo rm -f "$NGINX_SITE_AVAILABLE" || restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
138 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
139 if [[ "$nginx_link_created" -eq 1 || "$nginx_site_created" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
140 if sudo nginx -t; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
141 sudo systemctl reload nginx || restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
142 else |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
143 restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
144 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
145 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
146 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
147 if [[ "$service_changed" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
148 if [[ "$service_had_previous" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
149 sudo install -o root -g root -m 0644 \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
150 "$service_backup" "/etc/systemd/system/$SERVICE_NAME" || |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
151 restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
152 else |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
153 sudo rm -f "/etc/systemd/system/$SERVICE_NAME" || |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
154 restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
155 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
156 sudo systemctl daemon-reload || restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
157 if [[ "$service_was_enabled" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
158 sudo systemctl enable "$SERVICE_NAME" >/dev/null || |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
159 restore_failed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
160 else |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
161 sudo systemctl disable "$SERVICE_NAME" >/dev/null 2>&1 || true |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
162 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
163 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
164 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
165 if [[ "$restore_failed" -ne 0 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
166 echo "Host configuration rollback needs manual attention." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
167 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
168 return 0 |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
169 } |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
170 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
171 rollback() { |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
172 trap - ERR INT TERM EXIT |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
173 if [[ "$lock_acquired" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
174 restore_host_configuration |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
175 if [[ "$promotion_prepared" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
176 if [[ -d "$BACKUP_PATH" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
177 sudo rm -rf "$ACTIVE_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
178 sudo mv "$BACKUP_PATH" "$ACTIVE_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
179 sudo systemctl restart "$SERVICE_NAME" || true |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
180 elif sudo test -f "$ACTIVE_PATH/.hg-web-release" && |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
181 [[ "$(sudo cat "$ACTIVE_PATH/.hg-web-release")" == "$release_id" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
182 sudo rm -rf "$ACTIVE_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
183 sudo systemctl stop "$SERVICE_NAME" || true |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
184 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
185 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
186 sudo rm -rf "$NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
187 sudo rm -rf "$REPOSITORY_NEW_PATH" |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
188 fi |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
189 cleanup |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
190 exit 1 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
191 } |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
192 trap rollback ERR INT TERM |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
193 trap cleanup EXIT |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
194 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
195 deploy_user="$(id -un)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
196 sudo install -d -o "$deploy_user" -g "$SERVICE_GROUP" -m 0755 "$DEPLOY_ROOT" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
197 exec 9>"$DEPLOY_ROOT/deploy.lock" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
198 if ! flock -n 9; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
199 echo "Another hg-web deployment is already running." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
200 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
201 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
202 lock_acquired=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
203 sudo rm -rf "$NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
204 sudo cp -a "$bundle_dir" "$NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
205 sudo chown -R "$deploy_user:$SERVICE_GROUP" "$NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
206 printf '%s\n' "$release_id" > "$NEW_PATH/.hg-web-release" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
207 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
208 bundled_hg="$NEW_PATH/third_party/mercurial/runtime/bin/hg" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
209 test -x "$NEW_PATH/hg_web_server" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
210 test -x "$NEW_PATH/hg-web/run_hg_web" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
211 test -x "$bundled_hg" |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
212 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
213 if [[ -e "$REPOSITORY_PATH" && ! -d "$REPOSITORY_PATH/.hg" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
214 echo "REPOSITORY_PATH exists but is not a Mercurial repository." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
215 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
216 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
217 if [[ ! -d "$REPOSITORY_PATH/.hg" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
218 sudo rm -rf "$REPOSITORY_NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
219 HGRCPATH= "$bundled_hg" clone \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
220 --noupdate --pull "$workspace" "$REPOSITORY_NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
221 sudo chown -R "$SERVICE_USER:$SERVICE_GROUP" "$REPOSITORY_NEW_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
222 sudo mv "$REPOSITORY_NEW_PATH" "$REPOSITORY_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
223 else |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
224 HGRCPATH= "$bundled_hg" --repository "$workspace" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
225 bundle --all "$repository_bundle" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
226 sudo chown "$deploy_user:$SERVICE_GROUP" "$repository_bundle" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
227 chmod 0640 "$repository_bundle" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
228 sudo -u "$SERVICE_USER" env HGRCPATH= \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
229 "$bundled_hg" --repository "$REPOSITORY_PATH" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
230 pull "$repository_bundle" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
231 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
232 sudo -u "$SERVICE_USER" env HGRCPATH= \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
233 "$bundled_hg" --repository "$REPOSITORY_PATH" verify |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
234 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
235 sudo chown -R "$SERVICE_USER:$SERVICE_GROUP" "$NEW_PATH" |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
236 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
237 sed \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
238 -e "s|__SERVICE_USER__|${SERVICE_USER}|g" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
239 -e "s|__SERVICE_GROUP__|${SERVICE_GROUP}|g" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
240 -e "s|__ACTIVE_PATH__|${ACTIVE_PATH}|g" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
241 -e "s|__HG_ALLOW_PUSH__|${HG_ALLOW_PUSH}|g" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
242 -e "s|__REPOSITORY_PATH__|${REPOSITORY_PATH}|g" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
243 "$service_template" > "$rendered_service" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
244 if sudo test -f "/etc/systemd/system/$SERVICE_NAME"; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
245 sudo cat "/etc/systemd/system/$SERVICE_NAME" > "$service_backup" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
246 chmod 0600 "$service_backup" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
247 service_had_previous=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
248 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
249 if sudo systemctl is-enabled --quiet "$SERVICE_NAME"; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
250 service_was_enabled=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
251 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
252 service_changed=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
253 sudo install -o root -g root -m 0644 \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
254 "$rendered_service" "/etc/systemd/system/$SERVICE_NAME" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
255 sudo systemctl daemon-reload |
|
104
2301aeb7503b
[Hg Web] Super simple mercurial server.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
256 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
257 manage_nginx=0 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
258 case "$MANAGE_NGINX" in |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
259 1|true|yes) manage_nginx=1 ;; |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
260 0|false|no) ;; |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
261 auto) |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
262 if command -v nginx >/dev/null 2>&1 && |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
263 [[ -d /etc/nginx/sites-available && -d /etc/nginx/sites-enabled ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
264 manage_nginx=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
265 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
266 ;; |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
267 *) |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
268 echo "MANAGE_NGINX must be auto, true, or false." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
269 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
270 ;; |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
271 esac |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
272 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
273 if [[ "$manage_nginx" -eq 1 && |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
274 ! -e "$NGINX_SITE_AVAILABLE" && |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
275 ! -L "$NGINX_SITE_AVAILABLE" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
276 if [[ ! "$NGINX_SERVER_NAME" =~ ^[A-Za-z0-9.-]+$ ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
277 echo "Invalid NGINX_SERVER_NAME: $NGINX_SERVER_NAME" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
278 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
279 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
280 if [[ ! -f "$NGINX_SITE_TEMPLATE" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
281 echo "Nginx template not found: $NGINX_SITE_TEMPLATE" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
282 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
283 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
284 sed "s/__SERVER_NAME__/${NGINX_SERVER_NAME}/g" \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
285 "$NGINX_SITE_TEMPLATE" > "$rendered_nginx" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
286 sudo install -D -o root -g root -m 0644 \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
287 "$rendered_nginx" "$NGINX_SITE_AVAILABLE" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
288 nginx_site_created=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
289 sudo ln -s "$NGINX_SITE_AVAILABLE" "$NGINX_SITE_ENABLED" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
290 nginx_link_created=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
291 sudo nginx -t |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
292 sudo systemctl reload nginx |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
293 elif [[ "$manage_nginx" -eq 1 && |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
294 ! -e "$NGINX_SITE_ENABLED" && |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
295 ! -L "$NGINX_SITE_ENABLED" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
296 sudo ln -s "$NGINX_SITE_AVAILABLE" "$NGINX_SITE_ENABLED" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
297 nginx_link_created=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
298 sudo nginx -t |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
299 sudo systemctl reload nginx |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
300 elif [[ "$manage_nginx" -eq 1 ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
301 echo "Nginx site already exists; leaving it unchanged." |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
302 fi |
|
104
2301aeb7503b
[Hg Web] Super simple mercurial server.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
303 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
304 sudo rm -rf "$BACKUP_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
305 promotion_prepared=1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
306 if [[ -e "$ACTIVE_PATH" || -L "$ACTIVE_PATH" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
307 sudo mv "$ACTIVE_PATH" "$BACKUP_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
308 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
309 sudo mv "$NEW_PATH" "$ACTIVE_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
310 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
311 sudo systemctl enable "$SERVICE_NAME" >/dev/null |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
312 sudo systemctl restart "$SERVICE_NAME" |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
313 if ! health_check; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
314 echo "hg-web health check failed." >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
315 rollback |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
316 fi |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
105
diff
changeset
|
317 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
318 sudo rm -rf "$BACKUP_PATH" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
319 trap - ERR INT TERM EXIT |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
320 cleanup |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
321 echo "Deployment complete: $ACTIVE_PATH" |