KB-F1BC
S129A — Đóng gap cuối Điều 30: post-deploy smoke
6 min read Revision 1
missions129adieu30deploysmokereport
S129A — Đóng gap cuối Điều 30: post-deploy smoke
Ngày thực hiện: 2026-03-23
Repo: Huyen1974/web-test
PR: #573
Assembly Gate
- Q0 PG: Không cần sửa PG
- Q1 Directus: Không cần sửa Directus
- Q2 Nuxt: Không cần sửa Nuxt UI
- Q3 Code mới: Có — sửa
.github/workflows/deploy-vps.ymlđể thêm post-deploy smoke - Q4 Test: Mission này tự nó là test (
merge -> deploy -> smoke) - Q5 Rollback:
git revert
Step 0 — Đã đọc trước khi làm
Đã thực hiện đúng thứ tự yêu cầu:
- Đọc
.claude/skills/incomex-rules.md search_knowledge("operating rules SSOT")search_knowledge("regression test law")search_knowledge("dieu30-complete-report")search_knowledge("dieu30-selfprotect-report")
Ghi chú:
search_knowledge("dieu30-complete-report")không trả đúng report mong muốn theo query title.- Tôi đọc trực tiếp đúng tài liệu tại
knowledge/current-state/reports/dieu30-complete-report.mdđể lấy context gap đã đóng.
Quote bắt buộc:
- SSOT
§0-T:Playwright E2E trong CI. Test FAIL = PR block. Máy kiểm tra máy. - Điều 30 v1.2: Tầng 2 = Smoke production sau deploy,
No Blind PASS,Rule of Evidence.
Hiện trạng trước khi sửa
Xác nhận từ repo:
.github/workflows/e2e-test.ymlđã có:push.branches = [main]pull_request.branches = [main]
- Gap 2 đã đóng từ PR
#569.
Xác nhận từ deploy-vps.yml trước khi sửa:
- Chưa có step post-deploy smoke nào trong job deploy.
Blocker thực tế phát hiện trong lúc làm:
- SSH vào VPS kiểm tra
/opt/incomex/scripts/smoke-test.shtrảsmoke-script=missing - Nghĩa là nếu chỉ thêm step chạy script mà không sync file, workflow sẽ fail ngay.
Thay đổi đã thực hiện
Chỉ sửa đúng file cho phép:
.github/workflows/deploy-vps.yml
1. Thêm post-deploy smoke cho deploy-direct
Sau step Apply config and restart Nuxt, đã thêm:
Copy smoke script to VPSPost-deploy smoke test
Logic step smoke:
- SSH dùng cùng credentials sẵn có:
host: ${{ secrets.VPS_HOST }}username: rootkey: ${{ secrets.VPS_SSH_KEY }}
- Chạy:
sleep 15cd /opt/incomexchmod +x scripts/smoke-test.shscripts/smoke-test.sh
2. Thêm cùng logic cho deploy-artifact
Tôi thêm cùng 2 step vào job deploy-artifact để không tạo gap mới nếu DEPLOY_MODE đổi khỏi direct.
3. Tín hiệu fail của smoke
Smoke fail sẽ làm workflow fail vì:
- step chạy dưới
set -euo pipefail scripts/smoke-test.shexit non-zero sẽ làm SSH action fail- không có đoạn swallow lỗi hay
|| true
Validate trước PR
- YAML parse:
yaml ok - Baseline production smoke trước PR:
PASS: 17 | FAIL: 0 - Xác nhận gap 2:
e2e-test.ymlđã cópush main
PR thực hiện
PR: #573
- URL: https://github.com/Huyen1974/web-test/pull/573
- Title:
ci(dieu30): add post-deploy smoke to deploy workflow - State:
MERGED - Merged at:
2026-03-23T02:17:36Z - Merge commit:
964b3763db7a2fdf1e4004610c8546946f4e8f98
PR checks:
Critical File Guardrun23418538332→successE2E Testsrun23418538320→successNuxt 3 CIrun23418538329→successTerraform Deployrun23418538310→success
Verify sau merge
Main push green
Push-main runs sau merge #573:
E2E Testsrun23418618430→successNuxt 3 CIrun23418618435→successTerraform Deployrun23418618431→successrequired-docs-guardrun23418618433→success
Deploy to VPS chạy sau main
Workflow-run sau khi Nuxt 3 CI main hoàn tất:
Deploy to VPSrun23418664705→success
Job details:
- Job
Build & Deploy DirectID68119055988→success - Job
Deploy via Artifact→skipped
Evidence step post-deploy smoke đã chạy và pass
Từ GitHub API actions/runs/23418664705/jobs:
- Step
Copy smoke script to VPS→success - Step
Post-deploy smoke test→success Post-deploy smoke test:- started:
2026-03-23T02:22:40Z - completed:
2026-03-23T02:23:01Z
- started:
Kết luận:
- Gap cuối đã được đóng bằng evidence thật trên production deploy workflow
- Smoke không chỉ tồn tại trên local/manual; giờ đã là một phần của workflow deploy chính thức
Verify production hiện tại
Smoke output sau deploy
Đã chạy lại scripts/smoke-test.sh sau deploy:
PASS: 17 | FAIL: 0
ALL CHECKS PASSED
VERIFY NUXT
https://vps.incomexsaigoncorp.vn/→HTTP/1.1 200 OK→ KHỚPhttps://vps.incomexsaigoncorp.vn/knowledge/registries→ content cóCAT-SPE,Phân loại loài,Thành phần→ KHỚP
Ghi theo format yêu cầu:
- Nuxt URL:
https://vps.incomexsaigoncorp.vn/— hiệnHTTP/1.1 200 OK. KHỚP. - Nuxt URL:
https://vps.incomexsaigoncorp.vn/knowledge/registries— hiệnCAT-SPE,Phân loại loài,Thành phần. KHỚP.
Tự kiểm tra
| # | Câu hỏi | Kết quả |
|---|---|---|
| 1 | Đã đọc SSOT + Điều 30 v1.2? | Có |
| 2 | Assembly Gate 6 câu đã trả lời? | Có |
| 3 | deploy-vps.yml có step Post-deploy smoke? |
Có |
| 4 | Step dùng SSH chạy scripts/smoke-test.sh? |
Có |
| 5 | Smoke fail → workflow fail (exit code)? | Có |
| 6 | e2e-test.yml có trigger push main? |
Có |
| 7 | PR CI ALL GREEN? | Có |
| 8 | Main CI GREEN sau merge? | Có |
| 9 | Deploy + smoke step PASS trên production? | Có |
| 10 | VERIFY NUXT: content đúng? | Có |
| 11 | Report tại knowledge/current-state/reports/s129a-dieu30-final-report.md? |
Có |
Kết luận
Điều 30 hiện đã khép kín chu trình triển khai:
- Contract + E2E + required checks + self-protect đã có từ các PR trước
- Gap cuối
post-deploy smoke trong deploy workflowđã được đóng ở PR#573 Deploy to VPSrun23418664705đã chứng minh stepPost-deploy smoke testchạy thật và pass thật trên production
Ghi chú:
- Tôi không tự báo visual PASS. Evidence trong báo cáo là CI/deploy/smoke + production content verify.
ad_list.jsonlocal vẫn được giữ nguyên, không tác động.