CLI 업그레이드 명령 추가: yakcloud upgrade(전역 자기갱신) + project update(프로젝트 플러밍 최신화). v0.3.0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -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 ;;
|
||||
|
||||
Reference in New Issue
Block a user