def install_environment(repo_cmd_runner, version, additional_dependencies): helpers.assert_version_default('golang', version) directory = repo_cmd_runner.path( helpers.environment_dir(ENVIRONMENT_DIR, 'default'), ) with clean_path_on_failure(directory): remote = git.get_remote_url(repo_cmd_runner.path()) repo_src_dir = os.path.join(directory, 'src', guess_go_dir(remote)) # Clone into the goenv we'll create helpers.run_setup_cmd( repo_cmd_runner, ('git', 'clone', '.', repo_src_dir), ) if sys.platform == 'cygwin': # pragma: no cover _, gopath, _ = cmd_output('cygpath', '-w', directory) gopath = gopath.strip() else: gopath = directory env = dict(os.environ, GOPATH=gopath) cmd_output('go', 'get', './...', cwd=repo_src_dir, env=env) for dependency in additional_dependencies: cmd_output('go', 'get', dependency, cwd=repo_src_dir, env=env) # Same some disk space, we don't need these after installation rmtree(repo_cmd_runner.path(directory, 'src')) rmtree(repo_cmd_runner.path(directory, 'pkg'))
def install_environment( prefix, version, additional_dependencies, ): # pragma: windows no cover helpers.assert_version_default('docker', version) helpers.assert_no_additional_deps('docker', additional_dependencies) assert_docker_available() directory = prefix.path( helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT), ) # Docker doesn't really have relevant disk environment, but pre-commit # still needs to cleanup it's state files on failure with clean_path_on_failure(directory): build_docker_image(prefix, pull=True) os.mkdir(directory)
def install_environment( prefix, version, additional_dependencies, ): # pragma: windows no cover helpers.assert_version_default('swift', version) helpers.assert_no_additional_deps('swift', additional_dependencies) directory = prefix.path( helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT), ) # Build the swift package with clean_path_on_failure(directory): os.mkdir(directory) cmd_output( 'swift', 'build', '-C', prefix.prefix_dir, '-c', BUILD_CONFIG, '--build-path', os.path.join(directory, BUILD_DIR), )
def install_environment( repo_cmd_runner, version, additional_dependencies, ): # pragma: windows no cover helpers.assert_version_default('swift', version) helpers.assert_no_additional_deps('swift', additional_dependencies) directory = repo_cmd_runner.path( helpers.environment_dir(ENVIRONMENT_DIR, 'default'), ) # Build the swift package with clean_path_on_failure(directory): os.mkdir(directory) repo_cmd_runner.run(( 'swift', 'build', '-C', '{prefix}', '-c', BUILD_CONFIG, '--build-path', os.path.join(directory, BUILD_DIR), ))
def install_environment( repo_cmd_runner, version, additional_dependencies, ): # pragma: windows no cover assert repo_cmd_runner.exists('Dockerfile'), ( 'No Dockerfile was found in the hook repository' ) helpers.assert_version_default('docker', version) helpers.assert_no_additional_deps('docker', additional_dependencies) assert_docker_available() directory = repo_cmd_runner.path( helpers.environment_dir(ENVIRONMENT_DIR, 'default'), ) # Docker doesn't really have relevant disk environment, but pre-commit # still needs to cleanup it's state files on failure with clean_path_on_failure(directory): build_docker_image(repo_cmd_runner, pull=True) os.mkdir(directory)
def install_environment(prefix, version, additional_dependencies): helpers.assert_version_default('rust', version) directory = prefix.path( helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT), ) # There are two cases where we might want to specify more dependencies: # as dependencies for the library being built, and as binary packages # to be `cargo install`'d. # # Unlike e.g. Python, if we just `cargo install` a library, it won't be # used for compilation. And if we add a crate providing a binary to the # `Cargo.toml`, the binary won't be built. # # Because of this, we allow specifying "cli" dependencies by prefixing # with 'cli:'. cli_deps = { dep for dep in additional_dependencies if dep.startswith('cli:') } lib_deps = set(additional_dependencies) - cli_deps if len(lib_deps) > 0: _add_dependencies(prefix.path('Cargo.toml'), lib_deps) with clean_path_on_failure(directory): packages_to_install = {()} for cli_dep in cli_deps: cli_dep = cli_dep[len('cli:'):] package, _, version = cli_dep.partition(':') if version != '': packages_to_install.add((package, '--version', version)) else: packages_to_install.add((package,)) for package in packages_to_install: cmd_output( 'cargo', 'install', '--bins', '--root', directory, *package, cwd=prefix.prefix_dir )
def install_environment(prefix, version, additional_dependencies): helpers.assert_version_default('golang', version) directory = prefix.path( helpers.environment_dir(ENVIRONMENT_DIR, 'default'), ) with clean_path_on_failure(directory): remote = git.get_remote_url(prefix.prefix_dir) repo_src_dir = os.path.join(directory, 'src', guess_go_dir(remote)) # Clone into the goenv we'll create helpers.run_setup_cmd(prefix, ('git', 'clone', '.', repo_src_dir)) if sys.platform == 'cygwin': # pragma: no cover _, gopath, _ = cmd_output('cygpath', '-w', directory) gopath = gopath.strip() else: gopath = directory env = dict(os.environ, GOPATH=gopath) cmd_output('go', 'get', './...', cwd=repo_src_dir, env=env) for dependency in additional_dependencies: cmd_output('go', 'get', dependency, cwd=repo_src_dir, env=env) # Same some disk space, we don't need these after installation rmtree(prefix.path(directory, 'src')) rmtree(prefix.path(directory, 'pkg'))
def install_environment( prefix: Prefix, version: str, additional_dependencies: Sequence[str], ) -> None: # pragma: win32 no cover helpers.assert_version_default('lua', version) envdir = _envdir(prefix) with clean_path_on_failure(envdir): with in_env(prefix): # luarocks doesn't bootstrap a tree prior to installing # so ensure the directory exists. os.makedirs(envdir, exist_ok=True) # Older luarocks (e.g., 2.4.2) expect the rockspec as an arg for rockspec in prefix.star('.rockspec'): make_cmd = ('luarocks', '--tree', envdir, 'make', rockspec) helpers.run_setup_cmd(prefix, make_cmd) # luarocks can't install multiple packages at once # so install them individually. for dependency in additional_dependencies: cmd = ('luarocks', '--tree', envdir, 'install', dependency) helpers.run_setup_cmd(prefix, cmd)
def install_environment( prefix: Prefix, version: str, additional_dependencies: Sequence[str], ) -> None: helpers.assert_version_default('conda', version) directory = helpers.environment_dir(ENVIRONMENT_DIR, version) env_dir = prefix.path(directory) env_yaml_path = prefix.path('environment.yml') with clean_path_on_failure(env_dir): with open(env_yaml_path) as env_file: env_yaml = yaml_load(env_file) env_yaml['dependencies'] += additional_dependencies tmp_env_file = None try: with NamedTemporaryFile( suffix='.yml', mode='w', delete=False, ) as tmp_env_file: yaml_dump(env_yaml, stream=tmp_env_file) cmd_output_b( 'conda', 'env', 'create', '-p', env_dir, '--file', tmp_env_file.name, cwd=prefix.prefix_dir, ) finally: if tmp_env_file and os.path.exists(tmp_env_file.name): os.remove(tmp_env_file.name)
def install_environment( prefix: Prefix, version: str, additional_dependencies: Sequence[str], ) -> None: helpers.assert_version_default('dart', version) envdir = prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) bin_dir = os.path.join(envdir, 'bin') def _install_dir(prefix_p: Prefix, pub_cache: str) -> None: dart_env = {**os.environ, 'PUB_CACHE': pub_cache} with open(prefix_p.path('pubspec.yaml')) as f: pubspec_contents = yaml_load(f) helpers.run_setup_cmd(prefix_p, ('dart', 'pub', 'get'), env=dart_env) for executable in pubspec_contents['executables']: helpers.run_setup_cmd( prefix_p, ( 'dart', 'compile', 'exe', '--output', os.path.join(bin_dir, win_exe(executable)), prefix_p.path('bin', f'{executable}.dart'), ), env=dart_env, ) with clean_path_on_failure(envdir): os.makedirs(bin_dir) with tempfile.TemporaryDirectory() as tmp: _install_dir(prefix, tmp) for dep_s in additional_dependencies: with tempfile.TemporaryDirectory() as dep_tmp: dep, _, version = dep_s.partition(':') if version: dep_cmd: tuple[str, ...] = (dep, '--version', version) else: dep_cmd = (dep, ) helpers.run_setup_cmd( prefix, ('dart', 'pub', 'cache', 'add', *dep_cmd), env={ **os.environ, 'PUB_CACHE': dep_tmp }, ) # try and find the 'pubspec.yaml' that just got added for root, _, filenames in os.walk(dep_tmp): if 'pubspec.yaml' in filenames: with tempfile.TemporaryDirectory() as copied: pkg = os.path.join(copied, 'pkg') shutil.copytree(root, pkg) _install_dir(Prefix(pkg), dep_tmp) break else: raise AssertionError( f'could not find pubspec.yaml for {dep_s}', )