in builder/actions/install.py [0:0]
def run(self, env):
config = env.config
sh = env.shell
parser = argparse.ArgumentParser()
parser.add_argument('--skip-install', action='store_true')
args = parser.parse_known_args(env.args.args)[0]
sudo = config.get('sudo', current_os() == 'linux')
sudo = ['sudo'] if sudo else []
packages = self.packages if self.packages else config.get(
'packages', [])
if packages:
packages = UniqueList(packages)
pkg_tool = package_tool()
print('Installing packages via {}: {}'.format(
pkg_tool.value, ', '.join(packages)))
was_dryrun = sh.dryrun
if args.skip_install:
sh.dryrun = True
if not InstallPackages.pkg_init_done:
pkg_setup = UniqueList(config.get('pkg_setup', []))
if pkg_setup:
for cmd in pkg_setup:
if isinstance(cmd, str):
cmd = cmd.split(' ')
assert isinstance(cmd, list)
sh.exec(*sudo, cmd, check=True, retries=3)
pkg_update = config.get('pkg_update', None)
if pkg_update:
if not isinstance(pkg_update, list):
pkg_update = pkg_update.split(' ')
sh.exec(*sudo, pkg_update, check=True, retries=3)
InstallPackages.pkg_init_done = True
pkg_install = config['pkg_install']
if not isinstance(pkg_install, list):
pkg_install = pkg_install.split(' ')
pkg_install += packages
sh.exec(*sudo, pkg_install, check=True, retries=3)
if args.skip_install:
sh.dryrun = was_dryrun
setup_steps = env.config.get('setup_steps', [])
if setup_steps:
steps = []
for step in setup_steps:
if not isinstance(step, list):
step = step.split(' ')
if step:
steps.append([*sudo, *step])
if args.skip_install:
return Script([partial(set_dryrun, True), *steps,
partial(set_dryrun, sh.dryrun)], name='setup')
return Script(steps, name='setup')