From 1a185df3df42bfce68f8fbc65747e62c046bcc29 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Thu, 20 Aug 2026 17:15:05 +0900 Subject: [PATCH] =?UTF-8?q?npx=20=EA=B2=80=EC=A6=9D=EC=9D=84=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EC=84=A4=EC=B9=98=20=EA=B2=BD=EB=A1=9C=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BE=BC=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI 가 tarball 을 풀어 node dist/index.js 를 바로 불렀다. 의존성이 없으니 ERR_MODULE_NOT_FOUND 로 죽는다 — 배포물의 결함이 아니라 검증 방법의 결함이다. npx 는 의존성을 설치한 뒤에 실행한다. 임시 프로젝트에 tarball 을 npm i 로 설치하고, 실제 사용자가 밟는 설치 -> doctor -> 제거 왕복을 그대로 돈다. SKILL.md 프론트매터가 --- 로 시작하는지도 확인한다(CRLF 로 깨지면 걸린다). --- .forgejo/workflows/ci.yml | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 6f58136..55906e2 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -45,15 +45,33 @@ jobs: - name: 배포물 점검 (npx 경로 검증) run: | node packages/cli/scripts/verify-package.mjs - # 실제 사용자가 겪는 경로 그대로 확인한다 — tarball 을 만들어 설치까지 해본다 + + # 실제 사용자가 겪는 경로 그대로 확인한다. + # tarball 을 풀어 `node dist/index.js` 를 바로 부르면 안 된다 — + # 의존성이 없어서 ERR_MODULE_NOT_FOUND 로 죽고, 그건 배포물의 결함이 + # 아니라 검증 방법의 결함이다. npx 는 의존성을 설치한 뒤에 실행한다. cd packages/cli - tarball="$(npm pack --silent)" - tmp="$(mktemp -d)" - tar -xzf "$tarball" -C "$tmp" - test -f "$tmp/package/dist/skill/SKILL.md" || { echo "tarball 에 스킬이 없다" >&2; exit 1; } - node "$tmp/package/dist/index.js" --version - node "$tmp/package/dist/index.js" list - rm -rf "$tmp" "$tarball" + 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