mirror of https://github.com/zulip/zulip.git
upgrade-zulip: Factor out a script to run hooks.
This commit is contained in:
parent
b87b26d0f2
commit
4e28e1d3ff
|
@ -0,0 +1,69 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
|
||||||
|
from scripts.lib.zulip_tools import (
|
||||||
|
DEPLOYMENTS_DIR,
|
||||||
|
assert_running_as_root,
|
||||||
|
get_deploy_root,
|
||||||
|
get_zulip_pwent,
|
||||||
|
parse_version_from,
|
||||||
|
su_to_zulip,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert_running_as_root()
|
||||||
|
|
||||||
|
# Updates to the below choices to add a new hook type should
|
||||||
|
# adjust puppet's `app_frontend_base.pp` as well.
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("kind", choices=["pre-deploy", "post-deploy"], help="")
|
||||||
|
parser.add_argument("--from-git", action="store_true", help="Upgrading from git")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
from version import ZULIP_MERGE_BASE as NEW_ZULIP_MERGE_BASE
|
||||||
|
from version import ZULIP_VERSION as NEW_ZULIP_VERSION
|
||||||
|
|
||||||
|
deploy_path = get_deploy_root()
|
||||||
|
old_version = parse_version_from(DEPLOYMENTS_DIR + "/current")
|
||||||
|
old_merge_base = parse_version_from(DEPLOYMENTS_DIR + "/current", merge_base=True)
|
||||||
|
|
||||||
|
path = f"/etc/zulip/hooks/{args.kind}.d"
|
||||||
|
if not os.path.exists(path):
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
# Pass in, via environment variables, the old/new "version
|
||||||
|
# string" (which is a `git describe` output)
|
||||||
|
env = os.environ.copy()
|
||||||
|
env["ZULIP_OLD_VERSION"] = old_version
|
||||||
|
env["ZULIP_NEW_VERSION"] = NEW_ZULIP_VERSION
|
||||||
|
|
||||||
|
# preexec_fn=su_to_zulip normally handles this, but our explicit
|
||||||
|
# env overrides that
|
||||||
|
env["HOME"] = get_zulip_pwent().pw_dir
|
||||||
|
|
||||||
|
|
||||||
|
def resolve_version_string(version: str) -> str:
|
||||||
|
return subprocess.check_output(
|
||||||
|
["git", "rev-parse", version], cwd=deploy_path, preexec_fn=su_to_zulip, text=True
|
||||||
|
).strip()
|
||||||
|
|
||||||
|
|
||||||
|
if NEW_ZULIP_MERGE_BASE:
|
||||||
|
# If we have a git repo, we also resolve those `git describe`
|
||||||
|
# values to full commit hashes, as well as provide the
|
||||||
|
# merge-base of the old/new commits with mainline.
|
||||||
|
env["ZULIP_OLD_COMMIT"] = resolve_version_string(old_version)
|
||||||
|
env["ZULIP_NEW_COMMIT"] = resolve_version_string(NEW_ZULIP_VERSION)
|
||||||
|
env["ZULIP_OLD_MERGE_BASE_COMMIT"] = resolve_version_string(old_merge_base)
|
||||||
|
env["ZULIP_NEW_MERGE_BASE_COMMIT"] = resolve_version_string(NEW_ZULIP_MERGE_BASE)
|
||||||
|
|
||||||
|
for script_name in sorted(f for f in os.listdir(path) if f.endswith(".hook")):
|
||||||
|
subprocess.check_call(
|
||||||
|
[os.path.join(path, script_name)],
|
||||||
|
cwd=deploy_path,
|
||||||
|
preexec_fn=su_to_zulip,
|
||||||
|
env=env,
|
||||||
|
)
|
|
@ -14,7 +14,6 @@ import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
from typing import Literal
|
|
||||||
|
|
||||||
os.environ["PYTHONUNBUFFERED"] = "y"
|
os.environ["PYTHONUNBUFFERED"] = "y"
|
||||||
|
|
||||||
|
@ -29,7 +28,6 @@ from scripts.lib.zulip_tools import (
|
||||||
assert_running_as_root,
|
assert_running_as_root,
|
||||||
get_config,
|
get_config,
|
||||||
get_config_file,
|
get_config_file,
|
||||||
get_zulip_pwent,
|
|
||||||
listening_publicly,
|
listening_publicly,
|
||||||
parse_version_from,
|
parse_version_from,
|
||||||
run_psql_as_postgres,
|
run_psql_as_postgres,
|
||||||
|
@ -110,14 +108,10 @@ if args.from_git:
|
||||||
logging.info("Caching Zulip Git version...")
|
logging.info("Caching Zulip Git version...")
|
||||||
subprocess.check_call(["./tools/cache-zulip-git-version"], preexec_fn=su_to_zulip)
|
subprocess.check_call(["./tools/cache-zulip-git-version"], preexec_fn=su_to_zulip)
|
||||||
|
|
||||||
from version import ZULIP_MERGE_BASE as NEW_ZULIP_MERGE_BASE
|
|
||||||
from version import ZULIP_VERSION as NEW_ZULIP_VERSION
|
from version import ZULIP_VERSION as NEW_ZULIP_VERSION
|
||||||
|
|
||||||
old_version = parse_version_from(DEPLOYMENTS_DIR + "/current")
|
old_version = parse_version_from(DEPLOYMENTS_DIR + "/current")
|
||||||
logging.info("Upgrading from %s to %s, in %s", old_version, NEW_ZULIP_VERSION, deploy_path)
|
logging.info("Upgrading from %s to %s, in %s", old_version, NEW_ZULIP_VERSION, deploy_path)
|
||||||
old_merge_base = (
|
|
||||||
parse_version_from(DEPLOYMENTS_DIR + "/current", merge_base=True) if args.from_git else ""
|
|
||||||
)
|
|
||||||
|
|
||||||
# Check if rabbitmq port 25672 is listening on anything except 127.0.0.1
|
# Check if rabbitmq port 25672 is listening on anything except 127.0.0.1
|
||||||
rabbitmq_dist_listen = listening_publicly(25672)
|
rabbitmq_dist_listen = listening_publicly(25672)
|
||||||
|
@ -381,44 +375,6 @@ if not args.skip_puppet and IS_SERVER_UP:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def run_hooks(kind: Literal["pre-deploy", "post-deploy"]) -> None:
|
|
||||||
# Updates to the above literal to add a new hook type should
|
|
||||||
# adjust puppet's `app_frontend_base.pp` as well.
|
|
||||||
path = f"/etc/zulip/hooks/{kind}.d"
|
|
||||||
if not os.path.exists(path):
|
|
||||||
return
|
|
||||||
# Pass in, via environment variables, the old/new "version
|
|
||||||
# string" (which is a `git describe` output)
|
|
||||||
env = os.environ.copy()
|
|
||||||
env["ZULIP_OLD_VERSION"] = old_version
|
|
||||||
env["ZULIP_NEW_VERSION"] = NEW_ZULIP_VERSION
|
|
||||||
|
|
||||||
# preexec_fn=su_to_zulip normally handles this, but our explicit
|
|
||||||
# env overrides that
|
|
||||||
env["HOME"] = get_zulip_pwent().pw_dir
|
|
||||||
|
|
||||||
def resolve_version_string(version: str) -> str:
|
|
||||||
return subprocess.check_output(
|
|
||||||
["git", "rev-parse", version], cwd=deploy_path, preexec_fn=su_to_zulip, text=True
|
|
||||||
).strip()
|
|
||||||
|
|
||||||
if args.from_git:
|
|
||||||
# If we have a git repo, we also resolve those `git describe`
|
|
||||||
# values to full commit hashes, as well as provide the
|
|
||||||
# merge-base of the old/new commits with mainline.
|
|
||||||
env["ZULIP_OLD_COMMIT"] = resolve_version_string(old_version)
|
|
||||||
env["ZULIP_NEW_COMMIT"] = resolve_version_string(NEW_ZULIP_VERSION)
|
|
||||||
env["ZULIP_OLD_MERGE_BASE_COMMIT"] = resolve_version_string(old_merge_base)
|
|
||||||
env["ZULIP_NEW_MERGE_BASE_COMMIT"] = resolve_version_string(NEW_ZULIP_MERGE_BASE)
|
|
||||||
for script_name in sorted(f for f in os.listdir(path) if f.endswith(".hook")):
|
|
||||||
subprocess.check_call(
|
|
||||||
[os.path.join(path, script_name)],
|
|
||||||
cwd=deploy_path,
|
|
||||||
preexec_fn=su_to_zulip,
|
|
||||||
env=env,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if args.skip_restart:
|
if args.skip_restart:
|
||||||
logging.info("Successfully configured in %s!", deploy_path)
|
logging.info("Successfully configured in %s!", deploy_path)
|
||||||
else:
|
else:
|
||||||
|
@ -427,7 +383,7 @@ else:
|
||||||
# steps that happen between here and the "Restarting Zulip" line
|
# steps that happen between here and the "Restarting Zulip" line
|
||||||
# below.
|
# below.
|
||||||
|
|
||||||
run_hooks("pre-deploy")
|
subprocess.check_call(["./scripts/lib/run_hooks.py", "pre-deploy"])
|
||||||
|
|
||||||
if rabbitmq_dist_listen:
|
if rabbitmq_dist_listen:
|
||||||
shutdown_server()
|
shutdown_server()
|
||||||
|
@ -478,7 +434,7 @@ else:
|
||||||
|
|
||||||
logging.info("Upgrade complete!")
|
logging.info("Upgrade complete!")
|
||||||
|
|
||||||
run_hooks("post-deploy")
|
subprocess.check_call(["./scripts/lib/run_hooks.py", "post-deploy"])
|
||||||
|
|
||||||
if not args.skip_client_reloads:
|
if not args.skip_client_reloads:
|
||||||
subprocess.check_call(["./scripts/reload-clients"], preexec_fn=su_to_zulip)
|
subprocess.check_call(["./scripts/reload-clients"], preexec_fn=su_to_zulip)
|
||||||
|
|
Loading…
Reference in New Issue