feat(cli): 0.20.0 — dev=로컬 kind 기본(project deploy 자동 생성), promote=관리형(build+push)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-30 15:29:41 +09:00
parent f699eda791
commit 0e83adc82a
3 changed files with 124 additions and 98 deletions

View File

@ -269,9 +269,19 @@ def bind_env(alias: str, conn: dict) -> dict:
# ── 워크로드: 빌드 + kind load + Deployment/Service/Ingress ─────────────────────
def _effective_image(image: str) -> str:
"""podman 은 레지스트리(도메인) 미지정 이미지 'localhost/' 를 붙여 저장한다 → kind load·Deployment 이름 불일치.
podman 이고 첫 컴포넌트가 레지스트리(도메인 '.'·포트 ':' 포함 또는 'localhost')가 아니면 localhost/ 를 붙여 일치시킨다.
docker 는 그대로(무영향). 레지스트리 지정 이미지(gitea.yakenator.io/…)는 두 런타임 모두 그대로."""
"""로컬 dev 는 레지스트리에 push 하지 않고 kind-load 하므로 이미지명은 '유효한 로컬 태그'면 된다.
- repo(레지스트리/경로)는 소문자여야 빌드된다(docker/podman 공통) → 미설정 CHANGE_ME_GITEA_USER 같은
대문자 placeholder 도 로컬 빌드되게 repo 만 소문자화(태그는 대소문자 보존).
- podman 은 레지스트리 미지정 이미지에 'localhost/' 를 붙여 저장 → kind load·Deployment 이름 일치를 위해 맞춘다
(docker 무영향). 레지스트리 지정 이미지(gitea.yakenator.io/…)는 그대로."""
# 1) repo 소문자화(마지막 '/' 뒤에 ':' 가 있으면 그게 태그 구분자 → 태그 보존).
slash = image.rfind("/")
if ":" in image[slash + 1:]:
repo, tag = image.rsplit(":", 1)
image = repo.lower() + ":" + tag
else:
image = image.lower()
# 2) podman localhost/ 보정.
if RUNTIME != "podman":
return image
first = image.split("/", 1)[0]