English
testover · release

ปล่อยของขึ้นเว็บให้ครบทุกขั้น

จากแก้โค้ดจนเว็บอัปเดตที่ testover.pages.dev: เปลี่ยน version และ change log, รันเทส, commit, push และดู deploy พร้อมชุดคำสั่งที่คัดลอกไปรันได้ทันที

จำสั้นๆ: push เข้า main = deploy ถ้าไฟล์ที่แก้อยู่ใน docs/, app/, .github/pages/, scripts/build-pages.mjs หรือ README.md ระบบจะ publish ให้เอง

ภาพรวมขั้นตอน

ขั้นตอนเรียงตามลำดับ ถ้าเทสไม่ผ่านให้วนกลับไปแก้ ห้ามข้ามไป push

ขั้นตอน releaseแก้โค้ด เปลี่ยน version และ change log รันเทสในเครื่อง ถ้าผ่านก็ commit และ push เข้า main จากนั้น Smoke CI และ Publish site ทำงานคู่กัน แล้วเว็บอัปเดตแก้โค้ด / เอกสารเปลี่ยน version + เขียน change logapp/index.htmlรันเทสในเครื่องunit · smoke · characterization · visualผ่านทั้งหมด?ไม่อ่าน errorแก้แล้วรันใหม่ใช่git commitgit push origin mainSmoke (CI)unit + smoke + characterizationPublish siteเมื่อแก้ docs/ app/ ฯลฯเว็บอัปเดตที่ testover.pages.devตรวจ version badge และหน้า /status/

1 · เปลี่ยน version และ change log

เลข version ที่ป้ายมุมขวาล่างของเว็บมาจากรายการบนสุดของ CHANGELOG ใน app/index.html ที่เดียว ไม่มีไฟล์อื่นต้องแก้

  1. ตั้งเลข version เป็นวันที่ (YYYY.MM.DD)

    รูปแบบเดียวกับที่มีอยู่ เช่น 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
  2. เพิ่มรายการใหม่ไว้บนสุดของ CHANGELOG

    รายการใหม่อยู่ บนสุด ป้ายจะอ่านจากรายการแรก แต่ละข้อเป็นประโยคสั้นภาษาอังกฤษ (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: [ /* ... */ ] },
    ];
  3. ถ้า release ซ้ำวันเดิม

    เวอร์ชันเป็นวันที่ จึงซ้ำกันไม่ได้ ให้ เพิ่มข้อ ในรายการของวันนั้นแทนการสร้างรายการใหม่

  4. เปิดดูผลในเว็บ

    npm start แล้วเปิด http://localhost:3000 ป้ายมุมขวาล่างต้องขึ้นเลขใหม่ กดค้างราว 0.6 วินาที (หรือโฟกัสแล้วกด Enter/Space) เพื่อเปิด change log ดูว่ารายการใหม่อยู่บนสุด

ไม่ต้องกังวลเรื่องเทสภาพ: เทส visual ปิดบังป้าย version ไว้ (MASK_VERSION_BADGE) และไม่มีเทสไหนเช็กข้อความ version ส่วน package.json ยังเป็น 1.0.0 ตามเดิม เลข version ของเว็บไม่เกี่ยวกับมัน

2 · รันเทสก่อน push

CI จะรันซ้ำให้อยู่แล้ว แต่รันในเครื่องก่อนจะรู้เร็วกว่าและไม่ทำให้ main แดง

# ดูสถานะและดึงของใหม่ก่อน
git status -sb
git pull --rebase origin main
npm 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

ถ้าเทสภาพ (visual) ไม่ผ่านเพราะ UI เปลี่ยนจริง

ภาพอ้างอิงต้องสร้างใน 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

3 · commit และ push

ข้อความ 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

4 · Deploy ขึ้น Cloudflare Pages

หลัง push มี 2 workflow เริ่มเอง

Workflowเริ่มเมื่อทำอะไร
Smokeทุก push เข้า main และทุก PRunit + contract, smoke, characterization แล้วอัปโหลดรายงาน
Publish sitepush เข้า 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

แก้เฉพาะ tests/ หรือ unit/ แล้วเว็บไม่ขึ้นใหม่?

เป็นเรื่องปกติ เพราะ 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/

ต้องมี secret CLOUDFLARE_API_TOKEN และ CLOUDFLARE_ACCOUNT_ID ใน repo (ชื่อโปรเจกต์มาจากตัวแปร CLOUDFLARE_PROJECT_NAME ค่าเริ่มต้น testover)

ย้อนกลับเมื่อ deploy แล้วพัง

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

กติกาตอนเพิ่ม/แก้เอกสาร

แก้ปัญหาที่พบบ่อย

อาการสาเหตุที่น่าจะเป็นทางแก้
push ถูกปฏิเสธ (rejected)มี commit ใหม่บน maingit pull --rebase origin main แล้ว push ใหม่
เทสภาพ (visual) แดงใน CI แต่เขียวในเครื่องภาพอ้างอิงสร้างบน Windows/Macnpm run test:visual:update (Docker)
Publish site ไม่ถูกเรียกไฟล์ที่แก้ไม่อยู่ใน path filtergh workflow run cloudflare-pages.yml --ref main
ขั้น Deploy ล้มด้วย error เรื่อง token/accountsecret หายหรือหมดอายุตั้ง CLOUDFLARE_API_TOKEN / CLOUDFLARE_ACCOUNT_ID ใหม่ใน Settings → Secrets
ป้าย version ยังเป็นเลขเก่าแคชเบราว์เซอร์ หรือรายการใหม่ไม่ได้อยู่บนสุดhard refresh แล้วเช็กลำดับใน CHANGELOG
รายงานบน /status/ เป็นของเก่ารายงานมาจากรอบ Weekend E2E ล่าสุด ไม่ใช่ commit นี้ปกติ ดู commit ต้นทางรายงานบนหน้า hub
หน้าเอกสารใหม่ 404ชื่อไฟล์มีตัวพิมพ์ใหญ่ หรือยังไม่ได้ deployเปลี่ยนชื่อเป็นตัวพิมพ์เล็ก และดู run ของ Publish site

อ่านต่อ