Skip to content

ci: add self-test workflow for pushes and pull requests#64

Open
hapo-nghialuu wants to merge 2 commits into
devfrom
ci/test-workflow
Open

ci: add self-test workflow for pushes and pull requests#64
hapo-nghialuu wants to merge 2 commits into
devfrom
ci/test-workflow

Conversation

@hapo-nghialuu

Copy link
Copy Markdown
Member

Mục đích

CafeKit hiện release ~18 bản/30 ngày lên npm nhưng không có CI — việc chạy test trước khi publish phụ thuộc hoàn toàn vào thao tác tay. Đã từng tồn tại thời điểm bộ self-test đỏ trên local trong khi npm vẫn tiếp tục nhận bản mới (test hapo:specs feature-description flow continues past init fail trên 0.12.0, chỉ được sửa gián tiếp bởi Specs-v2).

PR này thêm lưới an toàn đầu tiên: mọi push vào dev/main và mọi pull request đều tự động chạy toàn bộ self-test suite trên môi trường sạch. Phạm vi cố ý tối thiểu (test-only): quy trình publish npm giữ nguyên thủ công.

Thay đổi

File Nội dung
.github/workflows/test.yml Workflow mới, 1 job self-test
docs/project-changelog.md Ghi nhận vào mục [Unreleased]

Chi tiết workflow

  • Trigger: push vào dev/main + mọi pull_request. Trigger cả push trực tiếp vì repo có pattern commit thẳng lên dev — chỉ canh PR sẽ lọt phần lớn commit.
  • Môi trường: ubuntu-latest, Node 20 (engines khai >=18), pnpm 10 (khớp lockfile v9), Python 3.12.
  • Vì sao cần Python: suite không thuần Node — có 10 unittest Python cho PDF bounding-box scripts (stdlib-only, không cần pip install).
  • pnpm install --frozen-lockfile --filter @haposoft/cafekit: chỉ cài deps của package lõi, bỏ qua cây Next.js của cafekit-web; lockfile lệch là fail ngay.
  • timeout-minutes: 10: suite chạy ~18s local; treo lâu hơn nghĩa là có vấn đề thật.

Đã kiểm chứng

  • ✅ YAML parse hợp lệ (thư viện yaml)
  • ✅ Chạy nguyên văn 2 lệnh run trên local (macOS, pnpm 10.28): install OK, PASS 137 tests / ~18s
  • ✅ Bẫy môi trường đã soi trước: smoke check opencode --version trong suite tự skip khi binary vắng mặt (runner GitHub không có opencode); PDF test không cần dependency ngoài stdlib
  • ⏳ Lần chạy đầu tiên trên runner GitHub chính là CI check của PR này

Bước tiếp theo (ngoài phạm vi PR)

  1. Bật branch protection cho dev require check self-test pass trước khi merge
  2. Gói fix 3 hook bugs đã kiểm chứng trên 0.13.2 (session.cjs writeEnv escaping, spec-state.cjs cooldown, privacy-block.cjs realpath) — sẽ đi kèm unit tests được workflow này canh giữ
  3. (Tuỳ chọn, sau) Nâng lên tag-triggered publish gate khi đã tin tưởng — release vẫn do con người khởi phát

🤖 Generated with Claude Code

@hapo-nghialuu

Copy link
Copy Markdown
Member Author

Update sau lần chạy CI đầu tiên:

Run đầu fail sau 13s vì một thực tế của repo mà local dry-run không phát hiện được: pnpm-lock.yaml nằm trong .gitignore (dòng 51) — runner checkout không có lockfile, nên cache: pnpm của setup-node và --frozen-lockfile đều fail.

Commit eed32b1 điều chỉnh theo policy hiện tại của repo: bỏ cache: pnpm và bỏ --frozen-lockfile — install resolve fresh mỗi lần chạy.

✅ CI hiện xanh: 137 tests pass, job chạy 30s.

Lưu ý policy (ngoài phạm vi PR): vì lockfile không được commit, CI mất lá chắn reproducible-install — dependency mới phát hành có thể làm CI đỏ dù code không đổi (đây cũng chính là loại drift mà scheduled run sẽ bắt được). Nếu muốn lá chắn đó, cân nhắc bỏ pnpm-lock.yaml khỏi .gitignore và commit lockfile — quyết định riêng, không gộp vào đây.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant