cli v0.13.0: 공유 외부 소스 CLI 선언(source add --shared, mode:shared) + 문서 3계층·cluster create 정리

source add --shared / requires[].mode:shared 로 공유 외부 소스를 매니페스트에 선언 → 배포 시 백엔드가 클러스터별 격리 DB/계정 민팅(인클러스터 StatefulSet 없음, 소용량 클러스터용). reconcile_source 가 mode 를 POST /services 로 전달(local 하드코딩 제거). 문서(슬래시명령·매니페스트 템플릿·DATA-SOURCES·SKILL·bin help): 로컬 dev/migrate 제거·dev/val/prod 3계층 승격(promote --to)·cluster create/ls·project check --env 반영.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jungwoo choi
2026-08-28 12:08:11 +09:00
parent 2281039c1b
commit 89fca872c0
7 changed files with 56 additions and 32 deletions

View File

@ -1,20 +1,22 @@
#!/usr/bin/env bash
# yakcloud — YakCloud 프로젝트 CLI. 개발·운영 모두 yakcloud 클러스터에서(로컬 dev 없음).
# yakcloud — YakCloud 프로젝트 CLI. 개발·검증·운영 모두 yakcloud 클러스터(로컬 dev 없음, val 선택).
#
# yakcloud cluster create <name> [--template S|M] [--nodes N] [--golden] 클러스터 생성(완료까지 대기)
# yakcloud cluster ls 내 클러스터 목록
# yakcloud project init [name] 빈 폴더에 스타터 스캐폴딩(앱+CI+매니페스트+Claude 스킬)
# yakcloud project deploy [vX.Y.Z] 커밋 + 태그 push → CI 빌드 → 개발 클러스터 배포
# yakcloud project promote [vX.Y.Z] [--to val|prod] 그 이미지를 재빌드 없이 상위 환경으로 승격(개발→검증→운영)
# yakcloud project info 프로젝트 개괄(매니페스트 + dev/prod 라이브 상태)
# yakcloud project check [--prod] dry-run(직접 API 계획만)
# yakcloud project info 프로젝트 개괄(매니페스트 + 라이브 상태)
# yakcloud project check [--env dev|val|prod] dry-run(직접 API 계획만)
#
# yakcloud domain <fqdn> [wl] · scale · set · env · datasource ls · source · bind/unbind
#
# 매니페스트: environments.{dev,prod}.cluster (+ prod.domains). env: YAKCLOUD_URL, YAKCLOUD_TOKEN(yakd_…)
# 매니페스트: environments.{dev,val,prod}.cluster (val 선택, + prod.domains). env: YAKCLOUD_URL, YAKCLOUD_TOKEN(yakd_…)
set -uo pipefail # -e 미사용: 'test && action' 관용구가 값 없을 때 CLI 를 중단시키는 함정 회피. 중요 경로는 명시적 || die.
REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}"
BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}"
VERSION="0.12.3"
VERSION="0.13.0"
CONFIG_DIR="${YAKCLOUD_CONFIG_DIR:-$HOME/.config/yakcloud}"
CONFIG_FILE="$CONFIG_DIR/config"
@ -437,15 +439,15 @@ cmd_project_update() {
usage() {
cat <<EOF
yakcloud $VERSION — YakCloud 프로젝트 CLI (개발·운영 모두 yakcloud 클러스터)
yakcloud $VERSION — YakCloud 프로젝트 CLI (개발·검증·운영 모두 yakcloud 클러스터, val 선택)
cluster create <name> [--template S|M] [--nodes N] [--golden] 클러스터 생성(프로비저닝 완료까지 대기)
cluster ls 내 클러스터 목록(이름·상태·노드·기본 도메인)
project init [name] 빈 폴더에 스타터 스캐폴딩(대화형 마법사) + 자격 프롬프트
project deploy [vX.Y.Z] 커밋 + 태그 push → CI 빌드 → **개발 클러스터** 배포(버전 생략=자동 버전업)
project deploy --local 러너 없이 로컬 build/push/리컨실(CI 대안, 개발 클러스터)
project promote [vX.Y.Z] [--to val|prod] 그 이미지를 재빌드 없이 상위 환경으로 승격(개발→검증→운영). 기본 --to prod
project info 프로젝트 개괄(매니페스트 + dev/prod 라이브 상태)
project check [--prod] dry-run(직접 API 계획만)
project info 프로젝트 개괄(매니페스트 + 라이브 상태)
project check [--env dev|val|prod] dry-run(직접 API 계획만)
project update 이 프로젝트의 엔진·CI·스킬만 최신화(앱·매니페스트 보존)
upgrade 전역 yakcloud CLI 자기 갱신(최신 버전으로)
── 자격(한 곳에 안전 보관; 비밀=OS 키체인 암호화) ──
@ -458,9 +460,9 @@ yakcloud $VERSION — YakCloud 프로젝트 CLI (개발·운영 모두 yakcloud
set <wl> --image/--port/--health/--cpu/--mem/--path/--rewrite
env <wl> KEY=VAL … [--secret KEY] [--unset KEY]
datasource ls 클러스터에서 이용 가능한 소스 목록(이름·타입·내부/외부·상태)
source add <name> <type> [plan] | source rm <name>
source add <name> <type> [plan] [--shared] | source rm <name> (--shared=공유 외부, 백엔드가 격리 DB 민팅)
bind <wl> <source> <alias> | unbind <wl> <alias>
매니페스트: environments.{dev,prod}.cluster(+prod.domains). env: YAKCLOUD_URL, YAKCLOUD_TOKEN(배포토큰 yakd_…)
매니페스트: environments.{dev,val,prod}.cluster(val 선택, +prod.domains). env: YAKCLOUD_URL, YAKCLOUD_TOKEN(배포토큰 yakd_…)
EOF
}