mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	The refactoring in 4e28e1d3ff incorrectly switched a check for
`if args.from_git` into `if NEW_ZULIP_MERGE_BASE`, which is
incorrect -- the merge-base is always defined, it may just match the
version.  This led to errors when installing from tarball, without a
git repo.
Since the run_hooks command was already set up to take a `--from-git`
argument, but was ignoring it, pass down that flag from
upgrade-zulip-stage-3 when necessary, and swap the run_hooks logic
back to basing the version-resolution logic on that flag.
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/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()
 | 
						|
 | 
						|
if args.kind == "post-deploy":
 | 
						|
    old_dir_name = "last"
 | 
						|
else:
 | 
						|
    old_dir_name = "current"
 | 
						|
old_version = parse_version_from(DEPLOYMENTS_DIR + "/" + old_dir_name)
 | 
						|
old_merge_base = parse_version_from(DEPLOYMENTS_DIR + "/" + old_dir_name, 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 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,
 | 
						|
    )
 |