# 🚀 Capstone: hoàn tất blog, merge PR và release v1.0

> This lesson is part of the paid section. Sign in and purchase the course to view the full content.

Bạn đã có đủ mảnh ghép: branch, merge, rebase, tag, và cách mở PR sao cho người review không phải rê chuột quá lâu. Giờ là lúc chạy trọn một vòng đời thật, từ lúc mở issue đến lúc có release v1.0.0 trên trang Releases của repo blog.

Đây là vòng lặp bạn sẽ chạy hàng trăm lần trong sự nghiệp. Làm đúng một lần cho chậm, sau đó nó thành phản xạ.

## Ôn nhanh

Bài trước chốt ba thói quen: issue rõ ràng là hợp đồng, PR nhỏ là cách tôn trọng thời gian người review, và comment review có nhãn (blocking, nit, question). Capstone này dùng cả ba, cộng thêm bước cuối cùng mà nhiều người bỏ qua: ==tag và release==.

## 1. Đề bài capstone

Repo blog của bạn đã có `main` được bảo vệ. Issue #12 đang mở: "Trang danh sách bài viết chưa có phân trang, cuộn mãi mới hết".

Nhiệm vụ của bạn: biến issue đó thành một release `v1.0.0` thật, đi qua đủ các trạm:

```mermaid
flowchart LR
    Issue["📋<br/>Issue #12"] --> Branch["🌿<br/>Nhánh feature"]
    Branch --> PR["🔀<br/>Pull request"]
    PR --> Review["👀<br/>Review"]
    Review --> Merge["✅<br/>Merge vào main"]
    Merge --> Tag["🏷️<br/>Tag v1.0.0"]
    Tag --> Release["🚀<br/>GitHub Release"]
```

Vì sao quan trọng: một PR merge xong chưa phải là xong việc. Người dùng cuối chỉ thấy thứ bạn **release**, không thấy commit của bạn. Release là lúc bạn nói với thế giới: phiên bản này đã sẵn sàng, và đây là những gì thay đổi.

## 2. Yêu cầu / spec

| Hạng mục | Yêu cầu |
| --- | --- |
| Nhánh | `feature/post-list-pagination`, tách từ `main` mới nhất |
| Phạm vi PR | Một mục đích duy nhất, khoảng 200 đến 300 dòng diff |
| Commit | 3 đến 5 commit nhỏ, message theo dạng `feat(blog): ...` |
| PR | Có `Closes #12` trong mô tả, tự review trước khi gắn reviewer |
| Review | Ít nhất 1 comment có nhãn, và xử lý xong trước khi merge |
| Merge | Squash merge để `main` giữ lịch sử gọn |
| Tag | `v1.0.0`, annotated tag, tạo trên `main` sau khi merge |
| Release | Tạo từ tag, có release notes ngắn gọn |

## 3. Các milestone
