Mercurial
annotate hg-web/deploy.sh @ 252:7a7581f040e8
[ui] Add scoped notification component
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Tue, 04 Aug 2026 11:57:16 -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" |