mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-11 04:26:38 +00:00
dev_container: Default to non-interactive if a command is provided
This fixes problems with freezing when running luci recipes locally. An interactive process can still be forced by flag -i or --interactive. BUG=b:233230344 TEST=cd infra && ./recipes.py run build_linux Change-Id: I261f0ffddcc3795e17bcbe023fa920f48769fdb4 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3657813 Reviewed-by: Anton Romanov <romanton@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
ebb6efe266
commit
2adeed7042
1 changed files with 18 additions and 9 deletions
|
@ -37,12 +37,7 @@ except ValueError:
|
||||||
|
|
||||||
is_podman = docker.executable.name == "podman"
|
is_podman = docker.executable.name == "podman"
|
||||||
|
|
||||||
# Enable interactive mode when running in an interactive terminal.
|
|
||||||
TTY_ARGS = "--interactive --tty" if sys.stdin.isatty() else None
|
|
||||||
|
|
||||||
|
|
||||||
DOCKER_ARGS = [
|
DOCKER_ARGS = [
|
||||||
TTY_ARGS,
|
|
||||||
# Podman will not share devices when `--privileged` is specified
|
# Podman will not share devices when `--privileged` is specified
|
||||||
"--privileged" if not is_podman else None,
|
"--privileged" if not is_podman else None,
|
||||||
# Share crosvm source
|
# Share crosvm source
|
||||||
|
@ -69,10 +64,22 @@ def container_revision(container_id: str):
|
||||||
|
|
||||||
|
|
||||||
@arg("command", nargs=argparse.REMAINDER)
|
@arg("command", nargs=argparse.REMAINDER)
|
||||||
def main(command: tuple[str, ...], stop: bool = False, hermetic: bool = False):
|
def main(
|
||||||
|
command: tuple[str, ...],
|
||||||
|
stop: bool = False,
|
||||||
|
hermetic: bool = False,
|
||||||
|
interactive: bool = False,
|
||||||
|
):
|
||||||
chdir(CROSVM_ROOT)
|
chdir(CROSVM_ROOT)
|
||||||
container_id = docker(f"ps -q -f name={CONTAINER_NAME}").stdout()
|
container_id = docker(f"ps -q -f name={CONTAINER_NAME}").stdout()
|
||||||
|
|
||||||
|
# If a command is provided run non-interactive unless explicitly asked for.
|
||||||
|
tty_args = []
|
||||||
|
if not command or interactive:
|
||||||
|
if not sys.stdin.isatty():
|
||||||
|
raise Exception("Trying to run an interactive session in a non-interactive terminal.")
|
||||||
|
tty_args = ["--interactive", "--tty"]
|
||||||
|
|
||||||
# Start an interactive shell by default
|
# Start an interactive shell by default
|
||||||
if not command:
|
if not command:
|
||||||
command = ("/bin/bash",)
|
command = ("/bin/bash",)
|
||||||
|
@ -88,7 +95,7 @@ def main(command: tuple[str, ...], stop: bool = False, hermetic: bool = False):
|
||||||
return
|
return
|
||||||
|
|
||||||
if hermetic:
|
if hermetic:
|
||||||
docker(f"run --rm", *DOCKER_ARGS, *quoted_cmd).fg()
|
docker(f"run --rm", *tty_args, *DOCKER_ARGS, *quoted_cmd).fg()
|
||||||
else:
|
else:
|
||||||
if container_id and container_revision(container_id) != IMAGE_VERSION:
|
if container_id and container_revision(container_id) != IMAGE_VERSION:
|
||||||
print(f"New image is available. Stopping old container ({container_id}).")
|
print(f"New image is available. Stopping old container ({container_id}).")
|
||||||
|
@ -96,12 +103,14 @@ def main(command: tuple[str, ...], stop: bool = False, hermetic: bool = False):
|
||||||
container_id = None
|
container_id = None
|
||||||
|
|
||||||
if not container_id:
|
if not container_id:
|
||||||
container_id = docker(f"run --detach --name {CONTAINER_NAME}", *DOCKER_ARGS).stdout()
|
container_id = docker(
|
||||||
|
f"run --detach --name {CONTAINER_NAME}", *tty_args, *DOCKER_ARGS
|
||||||
|
).stdout()
|
||||||
print(f"Started dev-container ({container_id}).")
|
print(f"Started dev-container ({container_id}).")
|
||||||
else:
|
else:
|
||||||
print(f"Using existing dev-container instance ({container_id}).")
|
print(f"Using existing dev-container instance ({container_id}).")
|
||||||
|
|
||||||
docker("exec", TTY_ARGS, container_id, *quoted_cmd).fg()
|
docker("exec", *tty_args, container_id, *quoted_cmd).fg()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in a new issue