Files
yakcloud-starter/.gitea/workflows/deploy.yml
jungwoo choi fbdf8f68df refactor(cli): 엔진 전역화(.yakcloud 다운로드 소스) + 스캐폴드 최소화 + shared 기본 — 0.18.0
엔진(deploy/ctl/dev.py)은 install.sh 가 ~/.config/yakcloud/lib 로 설치, CLI 가 전역 실행.
project init 스캐폴드 = 앱+매니페스트+얇은 .gitea CI 만. 데이터소스 기본 shared.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-29 13:08:21 +09:00

61 lines
2.8 KiB
YAML

# Gitea Actions — 릴리스 태그(v*) push 시 이미지 빌드/푸시 후 YakCloud 에 리컨실 배포.
# 매니페스트 구동형: yakcloud.yaml 의 각 workload.build 를 빌드해 image 로 push → yakcloud_deploy.py.
# 프로젝트마다 수정 불필요(레포명은 GITHUB_REPOSITORY 로 자동).
# 필요 secrets: REGISTRY_TOKEN, YAKCLOUD_URL, YAKCLOUD_TOKEN (대상 클러스터=매니페스트 environments.dev)
# 러너: 전용 host act_runner, 라벨 ci-polyglot(잡 컨테이너에 host docker.sock 마운트).
name: deploy
on:
push:
tags: ["v*"]
jobs:
build-and-deploy:
runs-on: ci-polyglot
env:
REGISTRY: gitea.yakenator.io
steps:
- name: Build, push images & deploy
env:
REG_USER: ${{ github.actor }}
REG_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
YAKCLOUD_URL: ${{ secrets.YAKCLOUD_URL }}
YAKCLOUD_TOKEN: ${{ secrets.YAKCLOUD_TOKEN }}
YAKCLOUD_ENV: dev # 태그 push → 개발 클러스터(environments.dev). 운영은 'yakcloud project promote'
run: |
set -eo pipefail
TAG="${GITHUB_REF_NAME}"
echo "▸ tag=$TAG repo=$GITHUB_REPOSITORY registry=$REGISTRY"
# 1) 소스 체크아웃(git clone — JS 액션 미사용, 견고)
git clone --depth 1 -b "$TAG" \
"https://${REG_USER}:${REG_TOKEN}@${REGISTRY}/${GITHUB_REPOSITORY}.git" src
cd src
# 2) 레지스트리 로그인
echo "$REG_TOKEN" | docker login "$REGISTRY" -u "$REG_USER" --password-stdin
# 3) PyYAML 준비(yakcloud-runner 이미지엔 이미 있음)
python3 -c "import yaml" 2>/dev/null \
|| python3 -m pip install --quiet --break-system-packages pyyaml 2>/dev/null \
|| pip3 install --quiet pyyaml
# 4) 매니페스트의 각 workload.build → image 빌드/푸시(${TAG} 치환)
python3 - "$TAG" <<'PY'
import subprocess, sys, yaml
tag = sys.argv[1]
m = yaml.safe_load(open("yakcloud.yaml"))
for w in m.get("workloads", []):
ctx = w.get("build")
if not ctx:
continue # build 없으면 외부 이미지로 간주(빌드 스킵)
img = w["image"].replace("${TAG}", tag)
print(f"▸ build {w['name']}: {ctx} -> {img}", flush=True)
subprocess.check_call(["docker", "build", "-t", img, ctx])
subprocess.check_call(["docker", "push", img])
PY
# 5) YakCloud 리컨실 배포(콘솔 API, PAT 인증) — 엔진은 전역(프로젝트 미포함),
# 스타터에서 받아 실행(버전 파편화 없음).
curl -fsSL "https://gitea.yakenator.io/yakenator/yakcloud-starter/raw/branch/main/.yakcloud/deploy.py" -o /tmp/yc-deploy.py
TAG="$TAG" python3 /tmp/yc-deploy.py yakcloud.yaml