Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

제품 버전 규칙

Apollo는 비교 가능한 버전(orderable version)의 선후 관계를 사용하여 업그레이드와 다운그레이드를 구분하고 제품 간 버전 범위를 평가합니다. 제품 명세의 매니페스트에는 비교 가능한 버전만 사용할 수 있습니다. 일반적인 Semantic Versioning 문자열 전체를 그대로 허용하는 규칙은 아닙니다.

비교 가능한 네 가지 형식

유형예시정규식
Release1.0.0^[0-9]+\.[0-9]+\.[0-9]+$
Release Snapshot1.0.0-1-gaaaaaaa^[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-g[a-f0-9]+$
Release Candidate1.0.0-rc1^[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]+$
Release Candidate Snapshot1.0.0-rc1-1-gaaaaaaa^[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]+-[0-9]+-g[a-f0-9]+$

기본 버전(base version)은 major.minor.patch 부분입니다. 버전의 각 숫자는 32비트 정수 최댓값 2,147,483,647을 넘을 수 없습니다. 스냅샷은 끝에 g와 소문자 16진수 커밋 해시를 붙입니다.

비교 순서

숫자는 문자열 사전순이 아니라 정수로 비교합니다. 먼저 major, 같으면 minor, 다시 같으면 patch를 비교합니다. 예를 들어 높은 major를 가진 버전은 낮은 major의 minor가 더 크더라도 나중 버전입니다.

기본 버전이 같을 때는 다음 규칙을 적용합니다.

  1. 일반 Release는 모든 Release Candidate보다 큽니다.
  2. 일반 Release Snapshot은 해당 Release보다 크며 모든 Release Candidate보다 큽니다.
  3. 일반 스냅샷끼리는 스냅샷 숫자를 비교합니다.
  4. RC끼리는 RC 숫자를 먼저 비교합니다.
  5. RC 숫자가 같으면 RC Snapshot이 일반 RC보다 큽니다.
  6. 같은 RC의 스냅샷끼리는 스냅샷 숫자를 비교합니다.

다음은 작은 버전부터 나열한 예입니다.

1.0.0-rc1
< 1.0.0-rc2
< 1.0.0-rc2-4-gaaaaaaa
< 1.0.0-rc2-5-gccccccc
< 2.0.0
< 2.0.0-3-gaaaaaaa
< 2.0.0-4-gbbbbbbb
< 2.1.0-rc1
< 2.1.0

해시는 버전 순서를 결정하지 않습니다. 두 버전 중 어느 쪽도 더 크지 않으면 비교상 같습니다. 따라서 아래 스냅샷들은 문자열은 달라도 같은 순위입니다.

1.2.0 == 1.2.0
2.0.0-rc1 == 2.0.0-rc1
2.0.0-rc1-3-gaaaaaaa == 2.0.0-rc1-3-gbbbbbbb
2.0.0-5-gbbbbbbb == 2.0.0-5-gaaaaaaa1

버전 매처

버전 매처(Version matcher)는 Release 버전 집합을 나타냅니다. 직렬화 값은 다음 정규식에 맞는 문자열입니다.

^((x\.x\.x)|([0-9]+\.x\.x)|([0-9]+\.[0-9]+\.x)|([0-9]+\.[0-9]+\.[0-9]+))$

유효한 예는 x.x.x, 1.x.x, 2.0.x, 1.2.3입니다. x는 뒤쪽 숫자 구성 요소를 대신하며 각 위치에 독립적으로 숫자를 넣을 수 있습니다. 1.x.x는 1.0.0, 1.2.3과 일치하지만 2.0.0, 0.1.1과는 일치하지 않습니다.

x.y.z, x.0.0, 0.x.3, x.x.2, 1.x와 정규식 문자열 ^x\.[0-9]+\.[0-9]+$는 유효한 매처가 아닙니다. 버전 매처 자체는 RC나 스냅샷 문자열을 매칭하는 정규식이 아니며, 의존 관계의 상한을 정할 때는 해당 Release 집합과 후보 버전의 순서를 비교합니다.

비교 불가능한 형식

다음은 비교 불가능한 버전(non-orderable version)을 설명하는 일반 형식입니다. 비교 가능 형식에 해당하지 않으면서 이 패턴에 맞는 문자열은 순서 보장을 갖지 않습니다.

^[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9-]+)?(\.dirty)?$

1.0.0.dirty, 0.0.1-custom-description-42, 2.0.0-1-gaaaaaa.dirty가 예입니다. 이 값은 비교 가능한 버전이 필요한 제품 매니페스트에 사용할 수 없습니다. 비교 불가능한 버전끼리 또는 비교 가능한 버전과 섞어서는 선후 관계를 보장하지 않습니다.

5.0, 1.1.2.3-foo, 1.1.2.3, 1.0.0-FOO는 이 명세의 유효한 버전 문자열이 아니며 지원하지 않습니다.