annotate hg-web/deploy.sh @ 269:de291f396881

install initial production config Copy the ignored repository config into /etc/mrjunejune on first deployment while preserving existing production configuration on later deploys. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Fri, 07 Aug 2026 13:08:10 -0700
parents c5129452493e
children
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 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"