1 버전 관리
Rails는 semver의 변형된 버전을 따릅니다:
Patch Z
버그 수정만 포함하며, API 변경이나 새로운 기능은 없습니다. 보안 수정을 위해 필요한 경우는 예외입니다.
Minor Y
새로운 기능을 포함하며, API 변경이 있을 수 있습니다(Semver의 major 버전 역할을 합니다). 호환성이 깨지는 변경사항은 이전 minor나 major 릴리스에서 deprecation 공지와 함께 제공됩니다.
Major X
새로운 기능을 포함하며, API 변경이 있을 가능성이 높습니다. Rails의 minor와 major 릴리스의 차이점은 호환성이 깨지는 변경사항의 규모이며, 보통 특별한 경우에 사용됩니다.
2 새로운 기능
새로운 기능은 main 브랜치에만 추가되며 Patch 릴리스에서는 제공되지 않습니다.
3 버그 수정
Minor 릴리스는 해당 시리즈의 첫 릴리스 이후 1년 동안 버그 수정을 받습니다. 예를 들어, 가상의 1.1.0이 2023년 1월 1일에 릴리스된다면, 2024년 1월 1일까지 버그 수정을 받게 됩니다. 그 이후에는 지원되지 않는 것으로 간주됩니다.
버그 수정은 일반적으로 main 브랜치에 추가되며, 충분한 필요성이 있는 경우 최신 릴리스 시리즈의 x-y-stable 브랜치로 백포트됩니다. x-y-stable 브랜치에 충분한 버그 수정이 추가되면, 이를 기반으로 새로운 Patch 릴리스가 만들어집니다.
예를 들어, 가상의 1.2.2 Patch 릴리스는 1-2-stable 브랜치에서 빌드됩니다.
지원이 끝난 시리즈의 경우, 버그 수정이 우연히 stable 브랜치에 포함될 수 있지만 공식 버전으로는 릴리스되지 않습니다. 지원이 끝난 버전의 경우 Git을 사용하여 stable 브랜치를 가리키는 것을 권장합니다.
4 보안 이슈
Minor 릴리스는 해당 시리즈의 첫 릴리스 이후 2년 동안 보안 수정을 받습니다. 예를 들어, 가상의 1.1.0이 2023년 1월 1일에 릴리스된다면, 2025년 1월 1일까지 보안 수정을 받게 됩니다. 그 이후에는 end-of-life에 도달합니다.
이러한 릴리스들은 마지막으로 릴리스된 버전을 가져와서, 보안 패치를 적용하고 릴리스하여 생성됩니다. 그런 다음 해당 패치들은 x-y-stable 브랜치의 끝에 적용됩니다. 예를 들어, 가상의 1.2.2.1 보안 릴리스는 1.2.2에서 빌드되어 1-2-stable의 끝에 추가될 것입니다. 이는 최신 버전의 Rails를 실행 중인 경우 보안 릴리스로 쉽게 업그레이드할 수 있다는 것을 의미합니다.
보안 릴리스에는 직접적인 보안 패치만 포함됩니다. 보안 패치로 인한 비보안 관련 버그 수정은 릴리스의 x-y-stable 브랜치에 게시될 수 있으며, Bug Fixes 정책에 따라서만 새로운 gem으로 릴리스될 것입니다.
보안 릴리스는 마지막 보안 릴리스 브랜치/태그에서 잘라냅니다. 그렇지 않으면 보안 릴리스에서 호환성이 깨지는 변경사항이 있을 수 있습니다. 보안 릴리스는 애플리케이션이 쉽게 업그레이드된 상태를 유지할 수 있도록 앱의 보안을 보장하는 데 필요한 변경사항만 포함해야 합니다.
5 End-of-life 릴리스 시리즈
릴리스 시리즈가 end-of-life에 도달하면, 버그와 보안 이슈를 처리하는 것은 사용자의 책임입니다. 우리는 수정사항의 백포트를 제공하고 병합할 수 있지만, 새로운 버전은 릴리스되지 않을 것입니다. Git을 사용하여 애플리케이션이 stable 브랜치를 가리키도록 하는 것을 권장합니다. 자체적으로 버전을 유지 관리하는 것이 불편하다면, 지원되는 버전으로 업그레이드해야 합니다.
6 릴리스 일정
우리는 6개월마다 새로운 기능이 포함된 버전을 릴리스하는 것을 목표로 합니다. 1년 동안 릴리스가 없었던 드문 경우에는, 다음 릴리스가 이루어질 때까지 이전 릴리스의 지원 기간을 연장할 것입니다.
7 npm 패키지
npm의 제약으로 인해 Rails에서 제공하는 npm packages의 보안 릴리스에 4번째 숫자를 사용할 수 없습니다. 이는 gem 버전 7.0.1.4
에 해당하는 npm 패키지가 7.0.104
로 버전이 매겨진다는 것을 의미합니다.
버전은 X.Y.Z0A
로 계산되며, 여기서 A
는 보안 릴리스입니다.