Giới thiệu
Semantic Versioning là một tập hợp các quy tắc để đánh số cho phiên bản phần mềm, nhằm tránh xảy ra hiện tượng xung đột phiên bản phần mềm.
Khi hệ thống ngày càng lớn dần lên, các package, module, dependency được sử dụng ngày càng nhiều. Việc đánh số phiên bản không theo một chuẩn nhất định sẽ dễ dẫn đến việc xung đột phần mềm.
Chẳng hạn như việc chỉ định phiên bản của các module không chuẩn khi nâng cấp lên, các module đã bị thay đổi, ví dụ như các hàm, chức năng của module đã bị thay đổi, hoặc bị xóa đi, không còn phù hợp với mã nguồn hiện tại của hệ thống.
Vì vậy phiên bản của phần mềm sẽ được chỉ định đúng với phiên bản mà người sử dụng cần, tránh được xung đột phần mềm xảy ra.
Semver đã đưa ra 11 qui tắc để đánh số phiên bản phần mềm.
Định dạng
Phiên bản phần mềm gồm 3 thành phần chính:
MAJOR.MINOR.PATCH
Trong đó:
MAJOR
: Phiên bản chính – Đánh số khi có những thay đổi không tương thích với phiên bản cũ
MINOR
: Phiên bản phụ – Đánh số khi thêm tính năng mới nhưng vẫn đảm bảo tương thích với các phiên bản cũ
PATCH
: Phiên bản vá – Đánh số cho nhưng bản vá lỗi, sửa lỗi nhỏ
Qui tắc:
- Phần mềm sử dụng Semantic Versioning phải được một tả public API. API này có thể được khai báo trong chính source code hoặc ghi trong tài liệu.
- Các giá trị
MAJOR
,MINOR
,PATCH
phải là những số không âm. Và không được có các số 0 phụ ở đằng trước. Phiên bản mới có giá trị lớn hơn phiên bản cũ. - Khi một phiên bản đã được phát hành, nội dung của phiên bản đó ko được sửa đổi. Nếu có sửa đổi thì phải phát hành phiên bản mới.
- Phiên bản 0.y.z được đặt cho phiên bản phát triển.
- Phiên bản công khai ban đầu có thể đánh 1.0.0. Cách thức tăng phiên bản tuỳ thuộc vào cách thay đổi của phần mềm.
- Phiên bản vá
PATCH
phải được tăng nếu chỉ sửa lỗi và vẫn đảm bảo tương thích với phiên bản cũ. - Phiên bản phụ
MINOR
phải được tăng nếu có thêm tính năng mới và vẫn đảm bảo tương thích với phiên bản cũ. Hoặc có thể được tăng lên nếu có cải tiến mới, đáng kể. Có thể bao gồm sự thay đổi cấp độ phiên bản váPATCH
. Phiên bản váPATCH
phải được đặt lại về 0 khi có sự tăng phiên bản phụMINOR
. - Phiên bản chính
MAJOR
phải được tăng nếu có bất kì thay đổi nào không tương thích với phiên bản cũ. Nó có thể bao gồm sự thay đổi cấp độ phiên bản phụMINOR
và phiên bản váPATCH
. Cả hai phiên bản phụMINOR
và phiên bản váPATCH
phải được đặt lại về 0 khi có sự tăng phiên bản chínhMAJOR
- Phiên bản phát hành trước pre-release có thể được biểu thị bằng cách nối thêm dấu gạch nối và một loạt số nhận dạng được phân tách bằng dấu chấm ngay sau phiên bản vá. Định danh của phiên bản này chỉ được bao gồm chữ cái và số và dấu gạch ngang ([0-9A-Za-z-]). Phần chữ số không được bao gồm số 0 phụ ở đầu. Phiên bản phát hành trước có độ ưu tiên thấp hơn phiên bản bình thường đi kèm. Phiên bản tiền phát hành cho biết phiên bản có thể không ổn định hoặc không đáp ứng được các yêu cầu tương thích. Ví dụ: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.
- Một phiên bản đi kèm với dữ liệu (metadata) có thể được biểu diễn bằng cách nối thêm dấu cộng + và các số nhận dạng theo sau, ngăn cách nhau bởi dấu chấm. Định danh chỉ được bao gồm chữ cái và số và dấu gạch ngang ([0-9A-Za-z-]) và không được để trống. Hai phiên bản chỉ khác nhau ở phần dữ liệu thì có cùng mức độ ưu tiên. Ví dụ: 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85.
- Độ ưu tiên của các phiên bản sẽ được so sánh thông qua các giá trị
MAJOR
,MINOR
,PATCH
và pre-release nếu có (Không bao gồm metadata). Độ ưu tiên được xác định bởi sự khác biệt khi so sánh từng thành phần từ trái sang phải. Các phiên bảnMAJOR
,MINOR
,PATCH
luôn được so sánh bằng số. Ví dụ: 1.0.0 <2.0.0 <2.1.0 <2.1.1. Khi 3 giá trịMAJOR
,MINOR
,PATCH
bằng nhau, phiên bản pre-release có độ ưu tiên thấp hơn phiên bản thường. Ví dụ: 1.0.0-alpha <1.0.0, độ ưu tiên được xác định bằng cách so sánh từng số nhận dạng được phân tách bằng dấu chấm từ trái sang phải cho đến khi tìm thấy sự khác biệt như sau: số nhận dạng chỉ có chữ số được so sánh bằng số và số nhận dạng hoặc dấu gạch nối được so sánh từ vựng theo thứ tự sắp xếp ASCII. Số nhận dạng số luôn có độ ưu tiên thấp hơn số nhận dạng không phải là số. Ví dụ: 1.0.0-alpha <1.0.0-alpha.1 <1.0.0-alpha.beta <1.0.0-beta <1.0.0-beta.2 <1.0.0-beta.11 <1.0.0- RC.1 <1.0.0.
Kí hiệu
Một số kí hiệu trong việc chỉ định phiên bản phần mềm phổ biến
>
Bất kể một phiên bản nào lớn hơn phiên bản chỉ định
>=
Bất kể một phiên bản nào lớn hơn hoặc bằng phiên bản chỉ định
<
Bất kể một phiên bản nào nhỏ hơn phiên bản chỉ định
<=
Bất kể một phiên bản nào nhỏ hơn hoặc bằng phiên bản chỉ định
~>
Bất kể phiên bản nào lớn hơn hoặc bằng và có cùng phiên bản chính
Tham khảo: Semver https://semver.org
Source: https://itzone.com.vn/vi/article/quy-tac-danh-so-phien-ban-cho-phan-mem/