Files
yakcloud-starter/.claude/commands/yakcloud.md
jungwoo choi 89fca872c0 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>
2026-08-28 12:08:11 +09:00

4.5 KiB

description, argument-hint, allowed-tools
description argument-hint allowed-tools
YakCloud 배포 CLI를 Claude Code에서 구동 — 스캐폴딩·배포·데이터소스·도메인 (/yakcloud <args>) project init <name> | project deploy | datasource ls | domain <fqdn> | info | check Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion

사용자가 /yakcloud $ARGUMENTS 로 호출했다. 너는 yakcloud CLI(단일 진실원천)를 현재 작업 디렉터리에서 구동하는 드라이버다. 터미널이 아니라 Claude Code 안이므로, TTY가 필요한 대화형 흐름은 네가 값을 모아 비대화형으로 대신 실행한다.

0) 준비 (매 호출 첫 단계)

  • command -v yakcloud 확인. 없으면 설치: curl -fsSL https://gitea.yakenator.io/yakenator/yakcloud-starter/raw/branch/main/install.sh | sh 이후에도 PATH에 없으면 $HOME/.local/bin/yakcloud 절대경로로 실행.
  • 알 수 없는 명령/구버전 신호가 보이면 yakcloud upgrade 로 최신화 후 재시도.

1) 디스패치 — $ARGUMENTS

  • 비어 있거나 helpyakcloud help 실행 결과 + 한 줄 사용 요약.
  • project init [name] → §2 스캐폴딩(마법사 대체).
  • login → 비밀 입력이라 여기서 실행하지 말고, 터미널에서 yakcloud login 하라고 한 줄 안내. (사용자가 값을 직접 주면 YAKCLOUD_URL=… YAKCLOUD_TOKEN=… GITEA_USER=… GITEA_TOKEN=… yakcloud config 로 저장하되 값은 화면에 출력 금지.)
  • cluster create <name> … → 배포토큰으로 클러스터 프로비저닝(5~8분 대기). 실행 전 무엇을(템플릿·노드 수) 만드는지 한 줄 알리고 진행. cluster ls = 목록.
  • project promote [vX.Y.Z] [--to val|prod] → 그 이미지를 재빌드 없이 상위 환경으로 승격(개발→검증→운영, 기본 --to prod). 파괴적/외부노출이므로 실행 전 무엇을(어느 태그를 어느 환경 클러스터로) 하는지 한 줄 알리고 진행.
  • 그 외 전부(project deploy|info|check|update, datasource ls, domain, scale, set, env, source, bind, unbind, config, upgrade) → yakcloud $ARGUMENTS 를 실행하고 출력을 그대로 보여준 뒤, 필요할 때만 한 줄로 해석. 배포/승격/삭제성(deploy·promote·source rm·unbind·domain)은 실행 전 무엇을 하는지 한 줄 알리고 진행.
  • 개발·검증·운영 모두 yakcloud 클러스터에서 배포·테스트한다(로컬 docker 데이터소스 없음). 매니페스트 environments.{dev,val,prod}(val=검증계, 선택).

2) project init — 마법사 대체 (핵심)

터미널 마법사는 TTY가 없으면 안 뜬다. 네가 대신한다:

  1. yakcloud project init <name> -y비대화형 스캐폴딩(기본 매니페스트 생성; bin/·install.sh 잔재 없음).
  2. $ARGUMENTS/대화 맥락에 이미 있는 값은 재질문 금지. 부족한 핵심값만 AskUserQuestion 으로 모은다: 개발 클러스터, (검증 클러스터·선택), 운영 클러스터(같으면 하나로), 앱 포트, 노출 경로(기본 /), CPU/메모리, 필요한 데이터소스(있으면), 운영 도메인(있으면). → 매니페스트 environments.dev.cluster / (environments.val.cluster) / environments.prod.cluster / environments.prod.domains 에 반영.
  3. 모은 값을 CLI로 반영:
    • yakcloud set <wl> --port … --cpu … --mem … --path …
    • 소스: 인클러스터(local)=yakcloud source add <name> <type> [plan], 공유 외부(shared)=yakcloud source add <name> mongodb --shared(백엔드가 클러스터별 격리 DB 민팅; 콘솔/API 등록도 가능) + yakcloud bind <wl> <name> <alias>.
    • 도메인: yakcloud domain <fqdn> <wl>
    • 이용 가능한 클러스터 소스를 먼저 보고 싶으면 yakcloud datasource ls.
  4. 자격 미설정이면(yakcloud config 로 확인) 터미널 yakcloud login 안내.
  5. 다음 단계(개발 → yakcloud project deploy) 를 요약.

규약

  • 전역 명령이지만 대상은 현재 프로젝트(현지 yakcloud.yaml). ctl 계열(set/env/source/bind/domain/info)은 프로젝트 폴더에서만 동작 — 아니면 먼저 yakcloud project init 안내. datasource ls 는 클러스터만 있으면 조회 가능.
  • 자격/비밀 화면 출력 금지. 배포토큰(yakd_…)·Gitea 토큰은 CLI의 OS 키체인 저장에 위임.
  • 실패 시 종료코드·stderr 를 그대로 + 원인이 자명하면 한 줄 + 다음 행동 제시.