จากแก้โค้ดจนเว็บอัปเดตที่ testover.pages.dev: เปลี่ยน version และ change log, รันเทส, commit, push และดู deploy พร้อมชุดคำสั่งที่คัดลอกไปรันได้ทันที
main = deploy ถ้าไฟล์ที่แก้อยู่ใน docs/, app/, .github/pages/, scripts/build-pages.mjs หรือ README.md ระบบจะ publish ให้เองขั้นตอนเรียงตามลำดับ ถ้าเทสไม่ผ่านให้วนกลับไปแก้ ห้ามข้ามไป push
เลข version ที่ป้ายมุมขวาล่างของเว็บมาจากรายการบนสุดของ CHANGELOG ใน app/index.html ที่เดียว ไม่มีไฟล์อื่นต้องแก้
รูปแบบเดียวกับที่มีอยู่ เช่น 2026.10.17 ใช้วันที่ที่ release จริง
# วันที่วันนี้ = เลข version
date +%Y.%m.%d # bash / Git Bash
Get-Date -Format yyyy.MM.dd # PowerShell
# ดูรายการบนสุดของ CHANGELOG
grep -n "version: '" app/index.html | head -3 # bash
Select-String "version: '" app/index.html | Select-Object -First 3 # PowerShellรายการใหม่อยู่ บนสุด ป้ายจะอ่านจากรายการแรก แต่ละข้อเป็นประโยคสั้นภาษาอังกฤษ (UI เป็นภาษาอังกฤษ) ขึ้นต้นด้วยหมวด เช่น Docs:, Tests:, Sign-in page:
const CHANGELOG = [
{ version: '2026.10.18', changes: [
'Docs: added the user journey page (Thai and English)',
'Docs: added the release guide (Thai and English)',
] },
{ version: '2026.10.17', changes: [ /* ... */ ] },
];เวอร์ชันเป็นวันที่ จึงซ้ำกันไม่ได้ ให้ เพิ่มข้อ ในรายการของวันนั้นแทนการสร้างรายการใหม่
npm start แล้วเปิด http://localhost:3000 ป้ายมุมขวาล่างต้องขึ้นเลขใหม่ กดค้างราว 0.6 วินาที (หรือโฟกัสแล้วกด Enter/Space) เพื่อเปิด change log ดูว่ารายการใหม่อยู่บนสุด
MASK_VERSION_BADGE) และไม่มีเทสไหนเช็กข้อความ version ส่วน package.json ยังเป็น 1.0.0 ตามเดิม เลข version ของเว็บไม่เกี่ยวกับมันCI จะรันซ้ำให้อยู่แล้ว แต่รันในเครื่องก่อนจะรู้เร็วกว่าและไม่ทำให้ main แดง
# ดูสถานะและดึงของใหม่ก่อน
git status -sb
git pull --rebase origin mainnpm ci # ครั้งแรก / เมื่อ package-lock เปลี่ยน
npm run test:unit # unit + contract
npm run test:smoke # เส้นทางหลัก
npm run test:characterization # พฤติกรรมที่จดไว้ + golden master
npm run test:visual # เทียบภาพ (ต้องมี Docker รันอยู่)
npm test # ทั้งชุด (ทางเลือก ก่อน release ใหญ่)
npm run build:pages # ลองสร้าง dist/ เหมือนที่ขึ้น Pages
ภาพอ้างอิงต้องสร้างใน Docker เพื่อให้เป็น Linux เหมือน CI เท่านั้น (ภาพจาก Windows จะไม่ตรง) สร้างใหม่แล้วเปิดดูภาพก่อน commit
npm run test:visual:update # สร้างภาพอ้างอิงใหม่ใน Docker (Linux เหมือน CI)
git status -sb tests/__screenshots__ # เปิดดูภาพที่เปลี่ยนก่อน commit
ตัวเลขจำนวนเทสเปลี่ยนบ่อย นับใหม่ก่อนอ้างตัวเลขในเอกสาร: npx playwright test --list · npm run test:unit
ข้อความ commit ใช้รูปแบบ <type>: <description> โดย type คือ feat, fix, refactor, docs, test, chore, perf, ci
git status -sb # ดูว่ามีไฟล์อะไรบ้าง
git add app/index.html docs/ .github/pages/ # ระบุชื่อไฟล์ ไม่ใช้ git add -A
git diff --cached --stat # ตรวจอีกรอบ
git commit -m "feat: add the user journey and release guide pages (th/en)"
git push origin main
git add เสมอ เพื่อไม่ลากไฟล์ของงานอื่นหรือไฟล์ลับเข้าไป อย่า commit Webhook URL, CLOUDFLARE_API_TOKEN หรือ .env ค่าเหล่านี้อยู่ใน GitHub Secrets เท่านั้น และห้าม git push --force เข้า mainหลัง push มี 2 workflow เริ่มเอง
| Workflow | เริ่มเมื่อ | ทำอะไร |
|---|---|---|
Smoke | ทุก push เข้า main และทุก PR | unit + contract, smoke, characterization แล้วอัปโหลดรายงาน |
Publish site | push เข้า main ที่แตะ docs/**, app/**, .github/pages/**, scripts/build-pages.mjs, README.md หรือไฟล์ workflow นี้ · หลัง Weekend E2E จบ · กดเอง | สร้างเว็บ (npm run build:pages), ใส่รายงานล่าสุดที่ /status/, ประทับ commit บนหน้า hub แล้ว wrangler pages deploy |
gh run list --limit 5 # ดูรอบที่เพิ่งเริ่ม
gh run watch # เลือกรอบแล้วดูสดจนจบ
gh run list --workflow "Publish site" --limit 3
เป็นเรื่องปกติ เพราะ path ไม่เข้าเงื่อนไขของ Publish site ถ้าต้องการ deploy ก็สั่งเอง:
gh workflow run cloudflare-pages.yml --ref main # สั่ง deploy เอง (ไม่ต้องมี commit ใหม่)
gh run watch
curl -sI https://testover.pages.dev/docs/release-guide.html | head -1 # ต้องได้ 200
git rev-parse --short HEAD # เทียบกับ commit บนหน้า /status/
/status/ แสดง commit ที่ deploy และ commit ที่เป็นต้นทางของรายงาน/docs/<ชื่อไฟล์>.html ต้องตอบ 200 ทั้งไทยและอังกฤษต้องมี secret CLOUDFLARE_API_TOKEN และ CLOUDFLARE_ACCOUNT_ID ใน repo (ชื่อโปรเจกต์มาจากตัวแปร CLOUDFLARE_PROJECT_NAME ค่าเริ่มต้น testover)
git revert <sha> # ย้อนทีละ commit โดยไม่เขียนประวัติทับ
git push origin main # Publish site รันให้เองอีกรอบ
รวมขั้น 2–4 (ทำขั้น 1 ด้วยมือก่อน) หยุดทันทีถ้าคำสั่งใดล้มเหลว
# ชุดเต็มสำหรับ release (Git Bash) แก้ข้อความ commit ให้ตรงงานก่อนรัน
set -e
git pull --rebase origin main
npm run test:unit && npm run test:smoke && npm run test:characterization
npm run build:pages
git add app/index.html docs/ .github/pages/
git commit -m "feat: <สรุปสิ่งที่เปลี่ยน>"
git push origin main
gh run watch
name.html (ไทย) และ name.en.html (อังกฤษ) มีปุ่มสลับภาษาทั้งหัวและท้ายหน้า ตัวเลขต้องตรงกัน- และ . เท่านั้น ไม่เช่นนั้นเซิร์ฟเวอร์จะตอบ 404overview.html / overview.en.html และใน .github/pages/index.htmlDocs: (ดูหัวข้อ 1)docs/** จึงเข้าเงื่อนไข deploy อัตโนมัติ| อาการ | สาเหตุที่น่าจะเป็น | ทางแก้ |
|---|---|---|
| push ถูกปฏิเสธ (rejected) | มี commit ใหม่บน main | git pull --rebase origin main แล้ว push ใหม่ |
| เทสภาพ (visual) แดงใน CI แต่เขียวในเครื่อง | ภาพอ้างอิงสร้างบน Windows/Mac | npm run test:visual:update (Docker) |
| Publish site ไม่ถูกเรียก | ไฟล์ที่แก้ไม่อยู่ใน path filter | gh workflow run cloudflare-pages.yml --ref main |
| ขั้น Deploy ล้มด้วย error เรื่อง token/account | secret หายหรือหมดอายุ | ตั้ง CLOUDFLARE_API_TOKEN / CLOUDFLARE_ACCOUNT_ID ใหม่ใน Settings → Secrets |
| ป้าย version ยังเป็นเลขเก่า | แคชเบราว์เซอร์ หรือรายการใหม่ไม่ได้อยู่บนสุด | hard refresh แล้วเช็กลำดับใน CHANGELOG |
| รายงานบน /status/ เป็นของเก่า | รายงานมาจากรอบ Weekend E2E ล่าสุด ไม่ใช่ commit นี้ | ปกติ ดู commit ต้นทางรายงานบนหน้า hub |
| หน้าเอกสารใหม่ 404 | ชื่อไฟล์มีตัวพิมพ์ใหญ่ หรือยังไม่ได้ deploy | เปลี่ยนชื่อเป็นตัวพิมพ์เล็ก และดู run ของ Publish site |