def run()

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')