diff options
Diffstat (limited to 'testing/condprofile/condprof/check_install.py')
-rw-r--r-- | testing/condprofile/condprof/check_install.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/testing/condprofile/condprof/check_install.py b/testing/condprofile/condprof/check_install.py new file mode 100644 index 0000000000..0209db3a55 --- /dev/null +++ b/testing/condprofile/condprof/check_install.py @@ -0,0 +1,71 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +""" Installs dependencies at runtime to simplify deployment. + +This module tries to make sure we have all dependencies installed on +all our environments. +""" +import os +import subprocess +import sys + +PY3 = sys.version_info.major == 3 +TOPDIR = os.path.join(os.path.dirname(__file__), "..") + + +def install_reqs(): + """We install requirements one by one, with no cache, and in isolated mode.""" + try: + import yaml # NOQA + + return False + except Exception: + # we're detecting here that this is running in Taskcluster + # by checking for the presence of the mozfile directory + # that was decompressed from target.condprof.tests.tar.gz + run_in_ci = os.path.exists(os.path.join(TOPDIR, "mozfile")) + + # On Python 2 we only install what's required for condprof.client + # On Python 3 it's the full thing + if not run_in_ci: + req_files = PY3 and ["base.txt", "local.txt"] or ["local-client.txt"] + else: + req_files = PY3 and ["base.txt", "ci.txt"] or ["ci-client.txt"] + + for req_file in req_files: + req_file = os.path.join(TOPDIR, "requirements", req_file) + + with open(req_file) as f: + reqs = [ + req + for req in f.read().split("\n") + if req.strip() != "" and not req.startswith("#") + ] + for req in reqs: + subprocess.check_call( + [ + sys.executable, + "-m", + "pip", + "install", + "--no-cache-dir", + "--isolated", + "--find-links", + "https://pypi.pub.build.mozilla.org/pub/", + req, + ] + ) + + return True + + +def check(): + """Called by the runner. + + The check function will restart the app after + all deps have been installed. + """ + if install_reqs(): + os.execl(sys.executable, sys.executable, *sys.argv) + os._exit(0) |