Skip to content

Commit bb6e938

Browse files
authored
Merge pull request #45 from VibePod/proxy-latest
Add proxy and datasette autopull for latest tag
2 parents 291abfb + 92243c3 commit bb6e938

4 files changed

Lines changed: 24 additions & 10 deletions

File tree

src/vibepod/commands/logs.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from vibepod.constants import EXIT_DOCKER_NOT_RUNNING
1515
from vibepod.core.config import get_config
16-
from vibepod.core.docker import DockerClientError, DockerManager
16+
from vibepod.core.docker import DockerClientError, DockerManager, _is_latest_tag
1717
from vibepod.utils.console import error, info, success, warning
1818

1919
app = typer.Typer(help="View logs and traffic UI")
@@ -60,13 +60,14 @@ def logs_start(
6060
error(str(exc))
6161
raise typer.Exit(EXIT_DOCKER_NOT_RUNNING) from exc
6262

63-
info("Checking for datasette image updates…")
64-
updated = manager.pull_if_newer(datasette_image)
65-
if updated:
66-
info("New image available — restarting datasette")
67-
existing = manager.find_datasette()
68-
if existing:
69-
existing.remove(force=True)
63+
if _is_latest_tag(datasette_image):
64+
info("Checking for datasette image updates…")
65+
updated = manager.pull_if_newer(datasette_image)
66+
if updated:
67+
info("New image available — restarting datasette")
68+
existing = manager.find_datasette()
69+
if existing:
70+
existing.remove(force=True)
7071

7172
info(f"Starting Datasette on http://localhost:{datasette_port}")
7273
manager.ensure_datasette(

src/vibepod/commands/proxy.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from vibepod.constants import EXIT_DOCKER_NOT_RUNNING
1111
from vibepod.core.config import get_config
12-
from vibepod.core.docker import DockerClientError, DockerManager
12+
from vibepod.core.docker import DockerClientError, DockerManager, _is_latest_tag
1313
from vibepod.utils.console import error, info, success, warning
1414

1515
app = typer.Typer(help="Manage the HTTP(S) proxy")
@@ -42,6 +42,10 @@ def proxy_start() -> None:
4242

4343
manager.ensure_network(network_name)
4444

45+
if _is_latest_tag(proxy_image):
46+
info("Checking for proxy image updates…")
47+
manager.pull_if_newer(proxy_image)
48+
4549
info("Starting proxy")
4650
manager.ensure_proxy(
4751
image=proxy_image,

src/vibepod/commands/run.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
resolve_agent_name,
2424
)
2525
from vibepod.core.config import get_config
26-
from vibepod.core.docker import DockerClientError, DockerManager
26+
from vibepod.core.docker import DockerClientError, DockerManager, _is_latest_tag
2727
from vibepod.core.session_logger import SessionLogger
2828
from vibepod.utils.console import error, info, success, warning
2929

@@ -323,6 +323,9 @@ def run(
323323
.resolve()
324324
)
325325

326+
if _is_latest_tag(proxy_image):
327+
manager.pull_if_newer(proxy_image)
328+
326329
manager.ensure_proxy(
327330
image=proxy_image,
328331
db_path=proxy_db_path,

src/vibepod/core/docker.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ class DockerClientError(RuntimeError):
4141
"""Raised for Docker availability or lifecycle errors."""
4242

4343

44+
def _is_latest_tag(image: str) -> bool:
45+
"""Return True when *image* uses the ``latest`` tag (explicitly or by omission)."""
46+
name = image.split("/")[-1]
47+
return ":" not in name or name.endswith(":latest")
48+
49+
4450
def _normalize_command(value: Any) -> list[str]:
4551
"""Normalize Docker command/entrypoint values to a list of strings."""
4652
if value is None:

0 commit comments

Comments
 (0)