From 13cd6efea70be3fb0fc1bb68a9b4bc677a62036c Mon Sep 17 00:00:00 2001 From: jungwoo choi Date: Thu, 27 Aug 2026 17:28:32 +0900 Subject: [PATCH] =?UTF-8?q?CLI=20=EC=97=85=EA=B7=B8=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=20=EB=AA=85=EB=A0=B9=20=EC=B6=94=EA=B0=80:=20yakcloud?= =?UTF-8?q?=20upgrade(=EC=A0=84=EC=97=AD=20=EC=9E=90=EA=B8=B0=EA=B0=B1?= =?UTF-8?q?=EC=8B=A0)=20+=20project=20update(=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=ED=94=8C=EB=9F=AC=EB=B0=8D=20=EC=B5=9C=EC=8B=A0?= =?UTF-8?q?=ED=99=94).=20v0.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- .../yakcloud-deploy/assets/bin/yakcloud | 40 +++++++++++++++++-- bin/yakcloud | 40 +++++++++++++++++-- 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/.claude/skills/yakcloud-deploy/assets/bin/yakcloud b/.claude/skills/yakcloud-deploy/assets/bin/yakcloud index 94bbfaa..8abdfce 100755 --- a/.claude/skills/yakcloud-deploy/assets/bin/yakcloud +++ b/.claude/skills/yakcloud-deploy/assets/bin/yakcloud @@ -18,7 +18,7 @@ set -euo pipefail REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}" BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}" -VERSION="0.2.0" +VERSION="0.3.0" die() { echo "✗ $*" >&2; exit 1; } info() { echo "▸ $*"; } @@ -89,13 +89,45 @@ cmd_project_check() { python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run } +# 전역 CLI 자기 갱신(설치된 yakcloud 를 최신 bin 으로 덮어씀). +cmd_upgrade() { + local self; self="$(command -v yakcloud 2>/dev/null || true)"; [ -n "$self" ] || self="$0" + info "yakcloud CLI 업그레이드… ($self)" + local tmp; tmp="$(mktemp)" + curl -fsSL "$REPO/raw/branch/$BRANCH/bin/yakcloud" -o "$tmp" || { rm -f "$tmp"; die "다운로드 실패"; } + head -1 "$tmp" | grep -q 'bash' || { rm -f "$tmp"; die "받은 파일이 올바르지 않습니다"; } + chmod +x "$tmp" + mv "$tmp" "$self" 2>/dev/null || { rm -f "$tmp"; die "설치 실패(권한) — 'DEST= 재설치' 또는 sudo"; } + echo "✓ 업그레이드 완료: $("$self" version 2>/dev/null || echo yakcloud)" +} + +# 기존 프로젝트의 플러밍(엔진·CI·스킬)만 최신화. 앱/매니페스트/Dockerfile 등 사용자 파일은 보존. +cmd_project_update() { + [ -f yakcloud.yaml ] || die "프로젝트 폴더가 아닙니다 — 'yakcloud project init' 먼저" + command -v git >/dev/null 2>&1 || die "git 이 필요합니다." + info "프로젝트 플러밍 최신화(앱·매니페스트 보존)… ($REPO @ $BRANCH)" + local tmp; tmp="$(mktemp -d)" + git clone -q --depth 1 -b "$BRANCH" "$REPO.git" "$tmp/s" || { rm -rf "$tmp"; die "클론 실패"; } + mkdir -p scripts .gitea/workflows .claude/skills + cp "$tmp/s/scripts/yakcloud_deploy.py" scripts/ 2>/dev/null || true + cp "$tmp/s/scripts/yakcloud_ctl.py" scripts/ 2>/dev/null || true + cp "$tmp/s/.gitea/workflows/deploy.yml" .gitea/workflows/ 2>/dev/null || true + cp "$tmp/s/DATA-SOURCES.md" DATA-SOURCES.md 2>/dev/null || true + rm -rf .claude/skills/yakcloud-deploy + cp -R "$tmp/s/.claude/skills/yakcloud-deploy" .claude/skills/ 2>/dev/null || true + rm -rf "$tmp" + echo "✓ 최신화 완료 — scripts/·.gitea/·.claude 스킬 갱신(app.py·yakcloud.yaml·Dockerfile 그대로)" +} + usage() { cat < [wl] 도메인 등록 + 워크로드 할당(관리형=즉시/배포중이면 라이브) scale replicas 변경 @@ -115,9 +147,11 @@ case "${1:-help}" in deploy) shift; cmd_project_deploy "$@" ;; info) shift; ctl info "$@" ;; check|dry-run) shift; cmd_project_check "$@" ;; - *) echo "yakcloud project "; exit 1 ;; + update) shift; cmd_project_update "$@" ;; + *) echo "yakcloud project "; exit 1 ;; esac ;; domain|scale|set|env|source|bind|unbind) ctl "$@" ;; + upgrade|self-update) cmd_upgrade ;; version|-v|--version) echo "yakcloud $VERSION" ;; help|-h|--help|"") usage ;; *) echo "알 수 없는 명령: $1"; echo; usage; exit 1 ;; diff --git a/bin/yakcloud b/bin/yakcloud index 94bbfaa..8abdfce 100755 --- a/bin/yakcloud +++ b/bin/yakcloud @@ -18,7 +18,7 @@ set -euo pipefail REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}" BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}" -VERSION="0.2.0" +VERSION="0.3.0" die() { echo "✗ $*" >&2; exit 1; } info() { echo "▸ $*"; } @@ -89,13 +89,45 @@ cmd_project_check() { python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run } +# 전역 CLI 자기 갱신(설치된 yakcloud 를 최신 bin 으로 덮어씀). +cmd_upgrade() { + local self; self="$(command -v yakcloud 2>/dev/null || true)"; [ -n "$self" ] || self="$0" + info "yakcloud CLI 업그레이드… ($self)" + local tmp; tmp="$(mktemp)" + curl -fsSL "$REPO/raw/branch/$BRANCH/bin/yakcloud" -o "$tmp" || { rm -f "$tmp"; die "다운로드 실패"; } + head -1 "$tmp" | grep -q 'bash' || { rm -f "$tmp"; die "받은 파일이 올바르지 않습니다"; } + chmod +x "$tmp" + mv "$tmp" "$self" 2>/dev/null || { rm -f "$tmp"; die "설치 실패(권한) — 'DEST= 재설치' 또는 sudo"; } + echo "✓ 업그레이드 완료: $("$self" version 2>/dev/null || echo yakcloud)" +} + +# 기존 프로젝트의 플러밍(엔진·CI·스킬)만 최신화. 앱/매니페스트/Dockerfile 등 사용자 파일은 보존. +cmd_project_update() { + [ -f yakcloud.yaml ] || die "프로젝트 폴더가 아닙니다 — 'yakcloud project init' 먼저" + command -v git >/dev/null 2>&1 || die "git 이 필요합니다." + info "프로젝트 플러밍 최신화(앱·매니페스트 보존)… ($REPO @ $BRANCH)" + local tmp; tmp="$(mktemp -d)" + git clone -q --depth 1 -b "$BRANCH" "$REPO.git" "$tmp/s" || { rm -rf "$tmp"; die "클론 실패"; } + mkdir -p scripts .gitea/workflows .claude/skills + cp "$tmp/s/scripts/yakcloud_deploy.py" scripts/ 2>/dev/null || true + cp "$tmp/s/scripts/yakcloud_ctl.py" scripts/ 2>/dev/null || true + cp "$tmp/s/.gitea/workflows/deploy.yml" .gitea/workflows/ 2>/dev/null || true + cp "$tmp/s/DATA-SOURCES.md" DATA-SOURCES.md 2>/dev/null || true + rm -rf .claude/skills/yakcloud-deploy + cp -R "$tmp/s/.claude/skills/yakcloud-deploy" .claude/skills/ 2>/dev/null || true + rm -rf "$tmp" + echo "✓ 최신화 완료 — scripts/·.gitea/·.claude 스킬 갱신(app.py·yakcloud.yaml·Dockerfile 그대로)" +} + usage() { cat < [wl] 도메인 등록 + 워크로드 할당(관리형=즉시/배포중이면 라이브) scale replicas 변경 @@ -115,9 +147,11 @@ case "${1:-help}" in deploy) shift; cmd_project_deploy "$@" ;; info) shift; ctl info "$@" ;; check|dry-run) shift; cmd_project_check "$@" ;; - *) echo "yakcloud project "; exit 1 ;; + update) shift; cmd_project_update "$@" ;; + *) echo "yakcloud project "; exit 1 ;; esac ;; domain|scale|set|env|source|bind|unbind) ctl "$@" ;; + upgrade|self-update) cmd_upgrade ;; version|-v|--version) echo "yakcloud $VERSION" ;; help|-h|--help|"") usage ;; *) echo "알 수 없는 명령: $1"; echo; usage; exit 1 ;;