# CI / Pipeline Gate

ระบบมี wrapper สำหรับ pipeline แล้วที่:

- [scripts/ci_pre_release_gate.ps1](/C:/xampp82/htdocs/CCW/scripts/ci_pre_release_gate.ps1:1)
- [scripts/pre_release_gate.ps1](/C:/xampp82/htdocs/CCW/scripts/pre_release_gate.ps1:1)
- [scripts/ci_post_deploy_spot_check.ps1](/C:/xampp82/htdocs/CCW/scripts/ci_post_deploy_spot_check.ps1:1)
- [scripts/post_deploy_spot_check.ps1](/C:/xampp82/htdocs/CCW/scripts/post_deploy_spot_check.ps1:1)

และมี GitHub Actions workflow ตัวอย่างที่:

- [.github/workflows/pre-release-gate.yml](/C:/xampp82/htdocs/CCW/.github/workflows/pre-release-gate.yml:1)
- [.github/workflows/post-deploy-spot-check.yml](/C:/xampp82/htdocs/CCW/.github/workflows/post-deploy-spot-check.yml:1)

## Intended Runner

workflow ชุดนี้ออกแบบมาสำหรับ `self-hosted Windows runner` ที่มี:

- PHP พร้อมคำสั่ง `php`
- web app CCW เปิดใช้งานได้แล้ว
- database และข้อมูลตั้งต้นพร้อม
- URL ที่ runner เข้าได้ เช่น `http://127.0.0.1/CCW`

ค่า `runs-on` ตัวอย่างปัจจุบันคือ:

- `self-hosted`
- `windows`
- `ccw`

## Environment Inputs

wrapper รองรับ env vars ต่อไปนี้:

- `CCW_BASE_URL`
- `CCW_SMOKE_USERNAME`
- `CCW_SMOKE_PASSWORD`
- `CCW_SKIP_PHP_LINT`
- `CCW_KEEP_TEST_DATA`
- `CCW_CHECK_DUPLICATE_SUBMIT`
- `CCW_RESTRICTED_SMOKE_USERNAME`
- `CCW_RESTRICTED_SMOKE_PASSWORD`
- `CCW_RESTRICTED_ALLOWED_BRANCHES`

ถ้าไม่ส่งค่า จะ fallback เป็นค่า default ของสคริปต์

## Manual Runner Commands

ถ้าต้องการจำลองการรันแบบ pipeline ในเครื่อง:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\ci_pre_release_gate.ps1
powershell -ExecutionPolicy Bypass -File scripts\ci_post_deploy_spot_check.ps1
```

## Recommended GitHub Secrets / Vars

Secrets:

- `CCW_SMOKE_USERNAME`
- `CCW_SMOKE_PASSWORD`
- `CCW_RESTRICTED_SMOKE_USERNAME`
- `CCW_RESTRICTED_SMOKE_PASSWORD`

Variables:

- `CCW_BASE_URL`
- `CCW_SKIP_PHP_LINT`
- `CCW_KEEP_TEST_DATA`
- `CCW_CHECK_DUPLICATE_SUBMIT`
- `CCW_RESTRICTED_ALLOWED_BRANCHES`

## Recommended Setup Order

1. ตั้ง `CCW_BASE_URL` ให้ runner ยิงถึงระบบจริงได้
2. ตั้ง `CCW_SMOKE_USERNAME` และ `CCW_SMOKE_PASSWORD` สำหรับ admin smoke account
3. เตรียมบัญชี restricted probe ตาม [Branch Scope Probe Account](./branch-scope-probe-account.md)
4. ตั้ง `CCW_RESTRICTED_SMOKE_USERNAME`, `CCW_RESTRICTED_SMOKE_PASSWORD`, และ `CCW_RESTRICTED_ALLOWED_BRANCHES`
5. รัน [scripts/ci_post_deploy_spot_check.ps1](/C:/xampp82/htdocs/CCW/scripts/ci_post_deploy_spot_check.ps1:1) ใน runner เพื่อยืนยันว่าค่า env ถูกอ่านครบ

## Branch Scope Probe

ถ้าต้องการตรวจ `branch scope isolation` หลัง deploy:

- เตรียมบัญชีตาม [Branch Scope Probe Account](./branch-scope-probe-account.md)
- ตั้งค่า `CCW_RESTRICTED_SMOKE_USERNAME`
- ตั้งค่า `CCW_RESTRICTED_SMOKE_PASSWORD`
- ตั้งค่า `CCW_RESTRICTED_ALLOWED_BRANCHES`

เมื่อส่งค่าครบ `ci_post_deploy_spot_check.ps1` จะตรวจเพิ่มแบบ read-only:

- restricted branch options บนหน้า booking
- จำนวน order ที่ admin เห็น เทียบกับ restricted user
- allowed job probe
- blocked job probe

ตัวอย่างผลที่ควรเห็น:

- `branch_scope_allowed_probe: passed:<order_id>`
- `branch_scope_blocked_probe: passed:<order_id>`
- `branch_scope_post_deploy: passed`

## Notes

- ถ้ายังไม่มี self-hosted runner ให้ใช้ `scripts\pre_release_gate.ps1` หรือ `scripts\ci_pre_release_gate.ps1` ใน pipeline ของทีมโดยตรงก่อน
- ถ้า deploy target ไม่ใช่ Windows/XAMPP ให้คง wrapper ไว้ แต่ควรปรับ workflow ให้ตรงกับ runner จริงของทีม
- ถ้ายังไม่มี restricted credentials ระบบจะข้ามเฉพาะ branch-scope post-deploy probe แต่ส่วน spot check หลักยังทำงานตามปกติ
