urun-cli 0.6.2__tar.gz → 0.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {urun_cli-0.6.2 → urun_cli-0.6.3}/CHANGELOG.md +9 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/PKG-INFO +1 -1
- {urun_cli-0.6.2 → urun_cli-0.6.3}/pyproject.toml +1 -1
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/scratch.py +49 -11
- {urun_cli-0.6.2 → urun_cli-0.6.3}/.gitignore +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/LICENSE +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/README.md +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/SECURITY.md +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/hatch_build.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/__init__.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/_bin/README.md +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/api.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/buildlogs.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/catalog.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/cli.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/client_tokens.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/config.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/deps.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/dev.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/devconsole.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/devstream.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/discovery.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/errors.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/fleet.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/frontend_launch.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/launch_auth.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/manifest.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/nodes.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/openai_proxy_bin.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/repo_deps.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/retry.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/runtime_health.py +0 -0
- {urun_cli-0.6.2 → urun_cli-0.6.3}/src/urun/serve.py +0 -0
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
## 0.6.3
|
|
2
|
+
|
|
3
|
+
- Bump the vendored `urun-openai` binary pin to `@urun-sh/openai@0.5.0` — the
|
|
4
|
+
**`omp` agent launcher** (`urun compat omp -p "..."`, the direct
|
|
5
|
+
extension lane: no proxy subprocess, omp loads `@urun-sh/openai/pi-extension`
|
|
6
|
+
via its own `-e` mechanism and selects the app with `--model urun/<slug>`)
|
|
7
|
+
ships through the installed CLI's vendored bundle. Pin + integrity advanced
|
|
8
|
+
in the same commit (supply-chain contract, see `scripts/openai_proxy.pin`).
|
|
9
|
+
|
|
1
10
|
# Changelog
|
|
2
11
|
|
|
3
12
|
## 0.5.4
|
|
@@ -20,7 +20,7 @@ name = "urun-cli"
|
|
|
20
20
|
# so every merge remains on the already-published version until this value is
|
|
21
21
|
# advanced. Wiring semantic-release into CI remains separate work; this patch
|
|
22
22
|
# bump is the minimal release unblock for the three post-v0.6.0 fixes.
|
|
23
|
-
version = "0.6.
|
|
23
|
+
version = "0.6.3"
|
|
24
24
|
description = "End-user CLI for deploying apps to urun"
|
|
25
25
|
readme = "README.md"
|
|
26
26
|
requires-python = ">=3.11"
|
|
@@ -341,6 +341,49 @@ def _scratch_venv_path(name: str) -> str:
|
|
|
341
341
|
return f"{SCRATCH_STORAGE_ROOT}/{name}/venv"
|
|
342
342
|
|
|
343
343
|
|
|
344
|
+
def _scratch_storage_mounts(
|
|
345
|
+
runtime_container: dict[str, Any], name: str
|
|
346
|
+
) -> tuple[list[dict[str, Any]], dict[str, Any] | None]:
|
|
347
|
+
"""The storage mounts the venv overlay needs, for either render shape.
|
|
348
|
+
|
|
349
|
+
Returns ``(init_mounts, runtime_extra)``:
|
|
350
|
+
|
|
351
|
+
* LEGACY full-root render (``/mnt/storage-backend`` mounted whole): the
|
|
352
|
+
init container reuses that mount and the runtime container already sees
|
|
353
|
+
the scratch venv through it — ``runtime_extra`` is ``None``.
|
|
354
|
+
* SCOPED render (tenant isolation: only subPath mounts such as ``.uv``):
|
|
355
|
+
the init container gets the ``.uv`` mount (the source venv, read-only,
|
|
356
|
+
as rendered) plus a READ-WRITE subPath mount of the platform scratch
|
|
357
|
+
prefix ``.scratch/<name>`` at the scratch venv's parent dir (kubelet
|
|
358
|
+
creates a missing RW subPath dir); the runtime container needs that
|
|
359
|
+
same RW mount to reach ``URUN_DEPS_VENV`` — returned as
|
|
360
|
+
``runtime_extra``. No full-root mount is ever added to a scoped pod.
|
|
361
|
+
"""
|
|
362
|
+
mounts = runtime_container.get("volumeMounts", [])
|
|
363
|
+
full_root = [m for m in mounts if m.get("mountPath") == "/mnt/storage-backend"]
|
|
364
|
+
if full_root:
|
|
365
|
+
return copy.deepcopy(full_root), None
|
|
366
|
+
uv = [m for m in mounts if m.get("subPath") == ".uv"]
|
|
367
|
+
if not uv:
|
|
368
|
+
raise UrunError(
|
|
369
|
+
"--wheel needs the runtime container to mount the deps venv store "
|
|
370
|
+
"(/mnt/storage-backend whole, or the scoped .uv subPath) — no such mount found"
|
|
371
|
+
)
|
|
372
|
+
if uv[0].get("readOnly") is not True:
|
|
373
|
+
raise UrunError(
|
|
374
|
+
"--wheel refuses a scoped render whose .uv subPath is writable: the shared "
|
|
375
|
+
"deps-venv store must be read-only on tenant pods (a writable .uv would let "
|
|
376
|
+
"the scratch pod modify every app's venv)"
|
|
377
|
+
)
|
|
378
|
+
scratch_mount = {
|
|
379
|
+
"name": uv[0]["name"],
|
|
380
|
+
"mountPath": f"{SCRATCH_STORAGE_ROOT}/{name}",
|
|
381
|
+
"subPath": f".scratch/{name}",
|
|
382
|
+
"readOnly": False,
|
|
383
|
+
}
|
|
384
|
+
return [copy.deepcopy(uv[0]), copy.deepcopy(scratch_mount)], scratch_mount
|
|
385
|
+
|
|
386
|
+
|
|
344
387
|
def venv_overlay_init_container(
|
|
345
388
|
runtime_container: dict[str, Any], wheel_spec: str, name: str
|
|
346
389
|
) -> dict[str, Any]:
|
|
@@ -375,21 +418,12 @@ def venv_overlay_init_container(
|
|
|
375
418
|
'touch "$dst/.scratch-ready"\n'
|
|
376
419
|
'echo "[scratch] venv overlay ready: $dst"\n'
|
|
377
420
|
)
|
|
378
|
-
|
|
379
|
-
mount
|
|
380
|
-
for mount in runtime_container.get("volumeMounts", [])
|
|
381
|
-
if mount.get("mountPath") == "/mnt/storage-backend"
|
|
382
|
-
]
|
|
383
|
-
if not storage_mounts:
|
|
384
|
-
raise UrunError(
|
|
385
|
-
"--wheel needs the runtime container to mount /mnt/storage-backend "
|
|
386
|
-
"(no storage mount found)"
|
|
387
|
-
)
|
|
421
|
+
init_mounts, _runtime_extra = _scratch_storage_mounts(runtime_container, name)
|
|
388
422
|
return {
|
|
389
423
|
"name": "scratch-venv-overlay",
|
|
390
424
|
"image": runtime_container["image"],
|
|
391
425
|
"command": ["sh", "-c", script],
|
|
392
|
-
"volumeMounts":
|
|
426
|
+
"volumeMounts": init_mounts,
|
|
393
427
|
}
|
|
394
428
|
|
|
395
429
|
|
|
@@ -470,6 +504,10 @@ def derive_scratch_sts(
|
|
|
470
504
|
overlay = venv_overlay_init_container(runtime, wheel_spec, name)
|
|
471
505
|
pod_spec.setdefault("initContainers", []).append(overlay)
|
|
472
506
|
forced_env["URUN_DEPS_VENV"] = _scratch_venv_path(name)
|
|
507
|
+
_init_mounts, runtime_extra = _scratch_storage_mounts(runtime, name)
|
|
508
|
+
if runtime_extra is not None:
|
|
509
|
+
# Scoped render: the runtime container must reach the overlaid venv.
|
|
510
|
+
runtime.setdefault("volumeMounts", []).append(copy.deepcopy(runtime_extra))
|
|
473
511
|
|
|
474
512
|
env_list = runtime.setdefault("env", [])
|
|
475
513
|
present = {e.get("name") for e in env_list}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|