# designpaca CI — 자체 러너(linux-builder, host 모드)에서 돈다.
# host 러너에는 Node 가 없을 수 있으므로 uses: 액션을 쓰지 않고 전부 run: 으로 처리한다.
name: ci

on:
  push:
    branches: [main]
  pull_request:
  workflow_dispatch:

jobs:
  build:
    runs-on: linux-builder
    steps:
      - name: checkout
        env: { CI_TOKEN: "${{ github.token }}" }
        run: |
          proto="${GITHUB_SERVER_URL%%://*}"; host="${GITHUB_SERVER_URL#*://}"
          url="$proto://actions:${CI_TOKEN}@${host%/}/${GITHUB_REPOSITORY}.git"
          [ -d .git ] || git init -q .
          git remote remove origin 2>/dev/null || true
          git remote add origin "$url"
          git fetch -q --depth 1 origin "$GITHUB_REF"
          git checkout -q -f FETCH_HEAD
          git clean -qfdx

      - name: 환경 확인
        run: bash build/ci/verify-node.sh

      - name: 의존성 설치
        run: pnpm install --frozen-lockfile

      - name: 스킬 문서 검사
        run: node build/ci/lint-skill.mjs packages/skill

      - name: 타입 검사
        run: pnpm typecheck

      - name: 테스트
        run: pnpm test

      - name: 빌드
        run: pnpm build

      - name: 배포물 점검 (npx 경로 검증)
        run: |
          node packages/cli/scripts/verify-package.mjs

          # 실제 사용자가 겪는 경로 그대로 확인한다.
          # tarball 을 풀어 `node dist/index.js` 를 바로 부르면 안 된다 —
          # 의존성이 없어서 ERR_MODULE_NOT_FOUND 로 죽고, 그건 배포물의 결함이
          # 아니라 검증 방법의 결함이다. npx 는 의존성을 설치한 뒤에 실행한다.
          cd packages/cli
          tarball="$(pwd)/$(npm pack --silent)"

          # tarball 안에 스킬이 실렸는지 먼저 본다
          probe="$(mktemp -d)"
          tar -xzf "$tarball" -C "$probe"
          test -f "$probe/package/dist/skill/SKILL.md" || { echo "tarball 에 스킬이 없다" >&2; exit 1; }
          head -1 "$probe/package/dist/skill/SKILL.md" | grep -q '^---$'             || { echo "SKILL.md 프론트매터가 깨졌다(줄바꿈 확인)" >&2; exit 1; }
          rm -rf "$probe"

          # 설치 -> 실행 -> 제거 왕복
          sandbox="$(mktemp -d)"
          cd "$sandbox"
          npm init -y >/dev/null 2>&1
          npm i --no-audit --no-fund --silent "$tarball"
          npx --no-install designpaca --version
          npx --no-install designpaca install --target claude-code --scope project --yes
          test -f .claude/skills/designpaca/SKILL.md || { echo "설치 후 스킬이 없다" >&2; exit 1; }
          npx --no-install designpaca doctor
          npx --no-install designpaca uninstall --yes
          test ! -f .claude/skills/designpaca/SKILL.md || { echo "제거 후에도 파일이 남았다" >&2; exit 1; }
          cd / && rm -rf "$sandbox" "$tarball"

      - name: 사이트 빌드
        run: pnpm build:site
