yakcloud CLI 추가(init/deploy/check) + install.sh + 공개용 README
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
76
.claude/skills/yakcloud-deploy/assets/bin/yakcloud
Normal file
76
.claude/skills/yakcloud-deploy/assets/bin/yakcloud
Normal file
@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
# yakcloud — YakCloud 프로젝트 CLI. 빈 폴더 초기화(스타터+스킬) + 태그 push 자동배포.
|
||||
# yakcloud init [name] 현재(빈) 폴더 또는 name/ 에 스타터 스캐폴딩(.claude 스킬 포함)
|
||||
# yakcloud deploy [vX.Y.Z] 커밋 + 태그 push → Gitea Actions 자동 배포
|
||||
# yakcloud check dry-run(직접 API, 계획만; YAKCLOUD_URL/TOKEN 필요)
|
||||
set -euo pipefail
|
||||
|
||||
REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}"
|
||||
BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}"
|
||||
VERSION="0.1.0"
|
||||
|
||||
die() { echo "✗ $*" >&2; exit 1; }
|
||||
info() { echo "▸ $*"; }
|
||||
|
||||
cmd_init() {
|
||||
local name="${1:-}"
|
||||
if [ -n "$name" ]; then
|
||||
mkdir -p "$name" && cd "$name"
|
||||
fi
|
||||
# 빈 폴더인지 확인(.git 은 허용)
|
||||
if [ -n "$(ls -A . 2>/dev/null | grep -v '^\.git$' || true)" ]; then
|
||||
die "폴더가 비어있지 않습니다. 빈 폴더에서 실행하거나 'yakcloud init <name>' 로 새 폴더에 생성하세요."
|
||||
fi
|
||||
info "yakcloud-starter 내려받는 중… ($REPO @ $BRANCH)"
|
||||
curl -fsSL "$REPO/archive/$BRANCH.tar.gz" | tar xz --strip-components=1 \
|
||||
|| die "스타터 다운로드 실패 — 네트워크/레포 공개 여부 확인"
|
||||
# 프로젝트 이름 치환(선택)
|
||||
if [ -n "$name" ] && [ -f yakcloud.yaml ]; then
|
||||
sed -i.bak "s/^project: .*/project: $name/" yakcloud.yaml && rm -f yakcloud.yaml.bak
|
||||
fi
|
||||
git rev-parse --git-dir >/dev/null 2>&1 || git init -q
|
||||
echo "✓ 초기화 완료 ($(pwd))"
|
||||
echo " 다음:"
|
||||
echo " 1) yakcloud.yaml 의 cluster / image(<GITEA_USER>) 수정, 필요하면 requires·binds 추가"
|
||||
echo " 2) 앱 개발 (Claude Code 스킬: .claude/skills/yakcloud-deploy)"
|
||||
echo " 3) Gitea 레포 연결 + Secrets(YAKCLOUD_URL/TOKEN/CLUSTER, REGISTRY_TOKEN) 설정"
|
||||
echo " 4) yakcloud deploy v0.1.0"
|
||||
}
|
||||
|
||||
cmd_deploy() {
|
||||
[ -f yakcloud.yaml ] || die "yakcloud.yaml 없음 — 먼저 'yakcloud init'"
|
||||
local ver="${1:-v0.1.0}"
|
||||
case "$ver" in v*) : ;; *) ver="v$ver" ;; esac
|
||||
git rev-parse --git-dir >/dev/null 2>&1 || git init -q
|
||||
git remote get-url origin >/dev/null 2>&1 \
|
||||
|| die "git 원격(origin) 없음 — Gitea 레포를 만들어 'git remote add origin <url>' 후, 레포 Secrets 설정 뒤 다시 실행"
|
||||
info "커밋 + 태그 $ver push…"
|
||||
git add -A
|
||||
git commit -q -m "deploy $ver" 2>/dev/null || true
|
||||
git push -q origin HEAD 2>/dev/null || true
|
||||
git tag "$ver" 2>/dev/null || die "태그 $ver 이미 존재 — 다른 버전으로"
|
||||
git push -q origin "$ver"
|
||||
echo "✓ $ver push — Gitea Actions 에서 빌드·배포 진행. 콘솔 앱 탭/도메인에서 확인."
|
||||
}
|
||||
|
||||
cmd_check() {
|
||||
[ -f scripts/yakcloud_deploy.py ] || die "scripts/yakcloud_deploy.py 없음 — 'yakcloud init' 먼저"
|
||||
: "${YAKCLOUD_URL:?YAKCLOUD_URL 필요}"
|
||||
: "${YAKCLOUD_TOKEN:?YAKCLOUD_TOKEN(배포 토큰) 필요}"
|
||||
python3 -c "import yaml" 2>/dev/null || pip3 install --quiet pyyaml
|
||||
python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run
|
||||
}
|
||||
|
||||
case "${1:-help}" in
|
||||
init) shift; cmd_init "$@" ;;
|
||||
deploy) shift; cmd_deploy "$@" ;;
|
||||
check|dry-run) shift; cmd_check "$@" ;;
|
||||
version|-v|--version) echo "yakcloud $VERSION" ;;
|
||||
*) cat <<EOF
|
||||
yakcloud $VERSION — YakCloud 프로젝트 CLI
|
||||
yakcloud init [name] 빈 폴더에 스타터 스캐폴딩(앱+CI+매니페스트+Claude 스킬)
|
||||
yakcloud deploy [vX.Y.Z] 커밋 + 태그 push → Gitea Actions 자동 배포
|
||||
yakcloud check dry-run(직접 API 계획만; YAKCLOUD_URL/TOKEN 필요)
|
||||
EOF
|
||||
;;
|
||||
esac
|
||||
15
.claude/skills/yakcloud-deploy/assets/install.sh
Normal file
15
.claude/skills/yakcloud-deploy/assets/install.sh
Normal file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env sh
|
||||
# yakcloud CLI 설치 — PATH 의 bin 디렉터리에 내려받는다.
|
||||
# curl -fsSL https://gitea.yakenator.io/yakenator/yakcloud-starter/raw/branch/main/install.sh | sh
|
||||
# 설치 위치 변경: DEST=/usr/local/bin sh install.sh
|
||||
set -e
|
||||
REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}"
|
||||
BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}"
|
||||
DEST="${DEST:-$HOME/.local/bin}"
|
||||
mkdir -p "$DEST"
|
||||
echo "▸ yakcloud CLI 설치 → $DEST/yakcloud"
|
||||
curl -fsSL "$REPO/raw/branch/$BRANCH/bin/yakcloud" -o "$DEST/yakcloud"
|
||||
chmod +x "$DEST/yakcloud"
|
||||
echo "✓ 완료. PATH 에 $DEST 가 있는지 확인하세요:"
|
||||
echo ' export PATH="$HOME/.local/bin:$PATH"'
|
||||
echo " 사용: yakcloud init my-app → 개발 → yakcloud deploy v0.1.0"
|
||||
Reference in New Issue
Block a user