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;
}