scripts/install_deps.py (64 lines of code) (raw):

#!/usr/bin/env python3 import os import shutil import subprocess import sys def clean_dir(dir_path, filter): if not os.path.exists(dir_path): return for item in os.listdir(dir_path): item_path = os.path.join(dir_path, item) if os.path.isdir(item_path) and item not in filter: shutil.rmtree(item_path) def main(targets): # Constants ALLOWED_NPM_TARGETS = set(['prod', 'dev']) DOCKER_TAG = os.environ.get('DOCKER_TAG', 'local') OLYMPIA_DEPS = os.environ.get('OLYMPIA_DEPS', '') DEPS_DIR = os.environ.get('DEPS_DIR') NPM_DEPS_DIR = os.environ.get('NPM_DEPS_DIR') if not targets: raise ValueError('No targets specified') print( 'Updating deps... \n', f'targets: {", ".join(targets)} \n', f'DOCKER_TAG: {DOCKER_TAG} \n', f'OLYMPIA_DEPS: {OLYMPIA_DEPS} \n', f'DEPS_DIR: {DEPS_DIR} \n', f'NPM_DEPS_DIR: {NPM_DEPS_DIR} \n', ) # If we are installing production dependencies or on a non local image # we always remove existing deps as we don't know what was previously # installed or in the host ./deps or ./node_modules directory # before running this script if 'local' not in DOCKER_TAG or OLYMPIA_DEPS == 'production': print('Removing existing deps') clean_dir(DEPS_DIR, ['cache']) clean_dir(NPM_DEPS_DIR, []) else: print('Updating existing deps') # Prepare the includes lists pip_includes = [] npm_includes = [] # PIP_COMMAND is set by the Dockerfile pip_command = os.environ['PIP_COMMAND'] pip_args = pip_command.split() + [ 'install', '--progress-bar=off', '--no-deps', '--exists-action=w', ] # NPM_ARGS is set by the Dockerfile npm_args_env = os.environ['NPM_ARGS'] npm_args = [ 'npm', 'install', '--no-save', '--no-audit', '--no-fund', ] + npm_args_env.split() # Add the relevant targets to the includes lists for target in targets: pip_includes.append(target) pip_args.extend(['-r', f'requirements/{target}.txt']) if target in ALLOWED_NPM_TARGETS: npm_includes.append(target) npm_args.extend(['--include', target]) if pip_includes: # Install pip dependencies print(f'Installing pip dependencies: {", ".join(pip_includes)} \n') subprocess.run(pip_args, check=True) if npm_includes: # Install npm dependencies print(f'Installing npm dependencies: {", ".join(npm_includes)} \n') subprocess.run(npm_args, check=True) if __name__ == '__main__': main(sys.argv[1:])