upgrade-zulip-from-git: We may need to fill in a zulip-git-version file.

Installs which are upgrading to current `main`, and are upgrading for
the very first time from an install which was originally from git,
have a `/home/zulip/deployments/current` which, unlike all later
upgrades, is not a `git worktree` of `/srv/zulip.git`, but rather a
direct `git clone` of some arbitrary URL.  As such, it does not have
an `upstream` remote, nor a cached `zulip-git-version` file.

This makes later attempts to determine the pre-upgrade revision of
git (for pre-deploy hooks) fail, as without a `zulip-git-version`
file, `ZULIP_VERSION` is insufficiently-specific (e.g. `6.1+git`), and
there is no guarantee the necessary tags exist either.

While we can make fresh git installs set up an `upstream` and run
`./tools/cache-zulip-git-version` going forward (see subsequent
commit), that does not address the issue for deploys which already
exist.  For those, we must configure and fetch a `remote` in the old
checkout, followed by re-generating a cached `zulip-git-version`.

Fixes: #25076.
This commit is contained in:
Alex Vandiver 2023-04-14 18:36:34 +00:00 committed by Tim Abbott
parent 96e42b8e81
commit 8ae167dc05
1 changed files with 17 additions and 0 deletions

View File

@ -108,6 +108,23 @@ def get_deploy_root() -> str:
def parse_version_from(deploy_path: str, merge_base: bool = False) -> str: def parse_version_from(deploy_path: str, merge_base: bool = False) -> str:
if not os.path.exists(os.path.join(deploy_path, "zulip-git-version")):
try:
# Pull this tool from _our_ deploy root, since it may not
# exist historically, but run it the cwd of the old
# deploy, so we set up its remote.
subprocess.check_call(
[os.path.join(get_deploy_root(), "scripts", "lib", "update-git-upstream")],
cwd=deploy_path,
preexec_fn=su_to_zulip,
)
subprocess.check_call(
[os.path.join(deploy_path, "tools", "cache-zulip-git-version")],
cwd=deploy_path,
preexec_fn=su_to_zulip,
)
except subprocess.CalledProcessError:
pass
try: try:
varname = "ZULIP_MERGE_BASE" if merge_base else "ZULIP_VERSION" varname = "ZULIP_MERGE_BASE" if merge_base else "ZULIP_VERSION"
return subprocess.check_output( return subprocess.check_output(