พื้นฐานของ CI: ทำให้การตรวจสอบเป็นแบบอัตโนมัติ
(Continuous Integration — การผสานรวมต่อเนื่อง) คือหุ่นยนต์ที่รันการตรวจสอบของคุณทุกครั้งที่คุณ push โค้ด เพื่อไม่ให้คุณ ลืม รันมัน แพลตฟอร์มส่วนใหญ่ทำให้เรื่องนี้เหลือแค่ไฟล์เดียว นี่คือตัวอย่าง GitHub Actions แบบขั้นต่ำ:
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm test
ตอนนี้ทุก push จะถูก lint ตรวจสอบชนิดข้อมูล และทดสอบโดยอัตโนมัติ ถ้ามีอะไรล้มเหลว คุณจะเห็นเครื่องหมายสีแดงก่อนที่โค้ดจะถูก merge ได้ คุณสามารถขอให้ AI เขียนไฟล์นี้ให้เข้ากับสแต็กของคุณได้ด้วย — "เพิ่ม GitHub Actions workflow ที่รัน lint, การตรวจสอบชนิดข้อมูล และเทสต์ของเราทุกครั้งที่มี "
เมื่อเปิดใช้งานการป้องกัน (branch protection) แล้ว การตรวจสอบที่ขึ้นสีแดงจะไม่ใช่แค่การเตือนคุณเฉย ๆ — มันจะล็อกปุ่ม merge ไว้จริง ๆ จนกว่า build จะเขียวอีกครั้ง:
pull request
│
▼
┌──────────────┐ all pass ┌───────────────┐
│ CI runs │ ───── ✓ green ─────▶ │ MERGE allowed │ ──▶ main
│ lint · types │ └───────────────┘
│ · tests │ any fail
└──────────────┘ ───── ✗ red ──────▶ ┌───────────────┐
│ MERGE blocked │ 🔒
└───────────────┘
fix, push, re-run
จุดสำคัญของ CI ไม่ใช่การทำให้เป็นอัตโนมัติเพื่อตัวมันเอง แต่คือการย้ายการตรวจสอบออกจากความทรงจำของคุณ ไปอยู่ในท่อลำเลียงที่ไม่สามารถถูกข้ามได้แม้ในคืนที่คุณเหนื่อยล้า มีการอัปเกรดสองอย่างที่คุ้มค่าเมื่อพื้นฐานรันเขียวแล้ว อย่างแรก เปลี่ยนการตรวจสอบให้เป็นสถานะ บังคับ (required) บน branch หลักของคุณ (กฎ "branch protection rule" บน GitHub) เพื่อให้ build สีแดงล็อกปุ่ม merge จริง ๆ แทนที่จะแค่แสดงคำเตือนที่คุณเพิกเฉยได้ อย่างที่สอง เมื่อ CI ล้มเหลว ให้วาง log ที่ล้มเหลวไปให้ AI โดยตรง: "CI ล้มเหลวในรอบนี้ นี่คือ output — วินิจฉัยและแก้ไขให้หน่อย" log คือรายงานบั๊กที่สร้างโดยเครื่องอย่างแม่นยำ ซึ่งเป็นอินพุตแบบที่ AI ทำได้ดีที่สุดพอดี