protected function execute()

in src/Utils/Flex/FlexExecCommand.php [107:179]


    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $fs = new Filesystem();
        $commands = $input->getArgument('commands');
        $preserveWorkdir = $input->getOption('preserve-workdir');
        $image = $input->getOption('image');
        $cloudSqlInstances = $input->getOption('cloud-sql-instances');
        if (empty($image)) {
            list($image, $cloudSqlInstancesFromDeploy) = $this->resolveImage(
                $input,
                $output
            );
            // If the `cloud-sql-instances` option is given, always use that
            // value. Otherwise, use the value from the deployment.
            $cloudSqlInstances = ($cloudSqlInstances === null)
                ? $cloudSqlInstancesFromDeploy
                : $cloudSqlInstances;
        }
        if (empty($image)) {
            $output->writeln('<error>Could not resolve the image</error>');
            exit(1);
        }
        $output->writeln("Using image: <info>$image</info>");
        if (!empty($cloudSqlInstances)) {
            $output->writeln(
                "Using cloudSqlInstances: <info>$cloudSqlInstances</info>"
            );
        }
        $workdir = $input->getOption('workdir');
        if (empty($workdir)) {
            // Use tempnam for unique dir name
            $tempnam = tempnam(sys_get_temp_dir(), 'flex-exec');
            // Delete on shutdown
            register_shutdown_function(function () use ($tempnam) {
                unlink($tempnam);
            });
            $workdir = $tempnam . '_workdir';
            try {
                $fs->mkdir($workdir);
            } catch (IOExceptionInterface $e) {
                $output->writeln("<error>Failed to create $workdir</error>");
                $output->writeln($e->getTraceAsString());
                exit(1);
            }
        }
        $output->writeln("Using workdir: <info>$workdir</info>");
        if ($preserveWorkdir) {
            $output->writeln('<info>Preserving the workdir</info>');
        } else {
            register_shutdown_function(function () use ($workdir, $fs) {
                $fs->remove($workdir);
            });
        }
        $output->writeln(
            'Running command: <info>'
            . implode(' ', $commands)
            . '</info>'
        );
        $containerExec = new ContainerExec(
            $image,
            $commands,
            $workdir,
            $cloudSqlInstances,
            $this->gcloud
        );
        $output->writeln($containerExec->run());
        $output->writeln(
            '<info>`'
            . implode(' ', $commands)
            . '` succeeded</info>'
        );
        return 0;
    }