CLI 업그레이드 명령 추가: yakcloud upgrade(전역 자기갱신) + project update(프로젝트 플러밍 최신화). v0.3.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 17:28:32 +09:00
parent c161da3b65
commit 13cd6efea7
2 changed files with 74 additions and 6 deletions

View File

@ -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=<dir> 재설치' 또는 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 <<EOF
yakcloud $VERSION — YakCloud 프로젝트 CLI
project init [name] 빈 폴더에 스타터 스캐폴딩(앱+CI+매니페스트+Claude 스킬)
project deploy [vX.Y.Z] 커밋 + 태그 push → Gitea Actions 자동 배포
project deploy [vX.Y.Z] 커밋 + 태그 push → Gitea Actions 자동 배포(버전 생략=자동 버전업)
project info 프로젝트 개괄(매니페스트 + 라이브 상태)
project check dry-run(직접 API 계획만)
project update 이 프로젝트의 엔진·CI·스킬만 최신화(앱·매니페스트 보존)
upgrade 전역 yakcloud CLI 자기 갱신(최신 버전으로)
── 배포환경 설정(앱별) ──
domain <fqdn> [wl] 도메인 등록 + 워크로드 할당(관리형=즉시/배포중이면 라이브)
scale <wl> <n> 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 <init|deploy|info|check>"; exit 1 ;;
update) shift; cmd_project_update "$@" ;;
*) echo "yakcloud project <init|deploy|info|check|update>"; 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 ;;

View File

@ -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=<dir> 재설치' 또는 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 <<EOF
yakcloud $VERSION — YakCloud 프로젝트 CLI
project init [name] 빈 폴더에 스타터 스캐폴딩(앱+CI+매니페스트+Claude 스킬)
project deploy [vX.Y.Z] 커밋 + 태그 push → Gitea Actions 자동 배포
project deploy [vX.Y.Z] 커밋 + 태그 push → Gitea Actions 자동 배포(버전 생략=자동 버전업)
project info 프로젝트 개괄(매니페스트 + 라이브 상태)
project check dry-run(직접 API 계획만)
project update 이 프로젝트의 엔진·CI·스킬만 최신화(앱·매니페스트 보존)
upgrade 전역 yakcloud CLI 자기 갱신(최신 버전으로)
── 배포환경 설정(앱별) ──
domain <fqdn> [wl] 도메인 등록 + 워크로드 할당(관리형=즉시/배포중이면 라이브)
scale <wl> <n> 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 <init|deploy|info|check>"; exit 1 ;;
update) shift; cmd_project_update "$@" ;;
*) echo "yakcloud project <init|deploy|info|check|update>"; 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 ;;