packaging: drop Disco (19.04) and add Focal (20.04)
Disco support ended in January 2020, and Focal does not have an announced EOL.
Something is now installing and configuring `tzdata`, which was throwing up an
interactive prompt to configure the timezone. Aside from being hostile to
automation, the prompt didn't actually accept input and hung the process. This
propagates the host's timezone into the image via environment variable in order
to skip the prompt, and avoid hardcoding a value.
Differential Revision: https://phab.mercurial-scm.org/D9396
#!/usr/bin/env python3
#
# packaging.py - Mercurial packaging functionality
#
# Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
import os
import pathlib
import subprocess
import sys
import venv
HERE = pathlib.Path(os.path.abspath(__file__)).parent
REQUIREMENTS_TXT = HERE / "requirements.txt"
SOURCE_DIR = HERE.parent.parent
VENV = SOURCE_DIR / "build" / "venv-packaging"
def bootstrap():
venv_created = not VENV.exists()
VENV.parent.mkdir(exist_ok=True)
venv.create(VENV, with_pip=True)
if os.name == "nt":
venv_bin = VENV / "Scripts"
pip = venv_bin / "pip.exe"
python = venv_bin / "python.exe"
else:
venv_bin = VENV / "bin"
pip = venv_bin / "pip"
python = venv_bin / "python"
args = [
str(pip),
"install",
"-r",
str(REQUIREMENTS_TXT),
"--disable-pip-version-check",
]
if not venv_created:
args.append("-q")
subprocess.run(args, check=True)
os.environ["HGPACKAGING_BOOTSTRAPPED"] = "1"
os.environ["PATH"] = "%s%s%s" % (venv_bin, os.pathsep, os.environ["PATH"])
subprocess.run([str(python), __file__] + sys.argv[1:], check=True)
def run():
import hgpackaging.cli as cli
# Need to strip off main Python executable.
cli.main()
if __name__ == "__main__":
try:
if "HGPACKAGING_BOOTSTRAPPED" not in os.environ:
bootstrap()
else:
run()
except subprocess.CalledProcessError as e:
sys.exit(e.returncode)
except KeyboardInterrupt:
sys.exit(1)