백포트
백포트란 무엇인가?
백포트란 새로운 Rust 릴리스(또는 다른 소프트웨어)에 반영된 수정 사항이나 기능을 가져와 이전에 지원되던 브랜치에 다시 적용하는 행위입니다. 이는 더 이상 모든 업스트림 변경 사항을 받지 않는 채널(예: Stable 또는 Beta)에 심각한 버그 수정이나 보안 패치를 배포할 때 가장 흔히 사용됩니다.
메인 브랜치에 병합된 후 beta 및 stable 브랜치로 이식되어야 하는 패치(대부분 충분히 심각한 버그의 수정 사항)가 꾸준히 조금씩 발생합니다. 이 과정을 알고 있는 사람은 소수에 불과하지만, 사실 이는 누구나 할 수 있는 일입니다.
rust-lang/rust에서의 Beta 백포트
beta 브랜치로의 PR 백포트는 보통 회귀를 수정하기 위해서만 이루어집니다. PR을 beta 브랜치로 백포트하려면 다음 과정을 거칩니다:
-
백포트할 PR에
beta-nominated레이블을 추가합니다. 이는 해당 PR을 백포트해야 할지 결정하기 위해 적절한 팀의 검토가 필요한 상태임을 나타냅니다. 트리아지 권한이 있는 사람이라면 누구나 자유롭게 이 레이블을 추가할 수 있습니다. -
팀이 백포트되어야 한다고 판단하면
beta-accepted레이블을 추가해야 합니다. 그렇지 않으면 지명 레이블을 제거해야 합니다. -
가끔 누군가 beta 롤업 PR을 만듭니다. 이는 주로 릴리스 팀이 수행하지만, 누구나 할 수 있습니다. 여기서의 과정은 다음과 같습니다.
-
beta브랜치에서 로컬 브랜치를 생성하십시오. -
beta-nominated와beta-accepted레이블을 모두 가진 모든 PR을 체리픽하십시오. 막판 변경 사항이 있거나 전체 CI 테스트 실행 시 실패할 경우를 대비해, 아직 병합되지 않은 PR은 포함하지 않는 것이 보통 선호됩니다. -
./x.py run replace-version-placeholder를 실행하고, 변경 사항이 있다면 새 커밋에 담으십시오. -
(권장) 로컬에서 몇 가지 테스트를 실행하십시오. 백포트가 깔끔하게 적용되지 않거나, 출력 결과에 차이가 있어 UI 테스트를 다시 승인해야 하는 경우가 드물지 않습니다.
-
리뷰어가 특별함을 알아볼 수 있도록
[beta]로 시작하는 제목으로 beta 브랜치를 대상으로 PR을 엽니다. -
백포트되는 모든 PR을 PR 설명에 나열하십시오. 예시는 여기에 있습니다.
-
백포트되는 모든 PR을 살펴보며 다음을 수행하십시오.
- 마일스톤을 beta 릴리스에 맞는 올바른 값으로 변경합니다.
beta-nominated레이블을 제거합니다. 이는 백포트가 완료되었음을 나타냅니다.
PR이 많을 경우, nominated + accepted 쿼리를 열어 백포트 대상인 모든 PR을 확인한 다음 “Milestones“와 “Label” 드롭다운을 사용해 여러 PR을 한꺼번에 수정하면 빠르게 처리할 수 있습니다.
이 마지막 단계는 beta PR이 병합되기 전이나 후에 수행할 수 있지만, 병합될 때까지 기다리면 잊어버리기 쉽습니다.
-
-
리뷰어(보통 릴리스 팀 소속)는 백포트가 올바르게 보이는지, 그리고 beta 브랜치에 제출되었는지 확인해야 합니다. 그런 다음 리뷰어는
@bors r+ rollup=never로 승인합니다(실수로 롤업되는 것을 방지하기 위함입니다). PR 작성자가 r+ 권한을 가지고 있고 백포트 과정에서 큰 변경을 하지 않았다면, 본인이 직접 PR을 승인할 수도 있습니다.
요약하면, PR이 거칠 수 있는 상태는 세 가지입니다:
beta-nominated: 팀의 검토가 필요합니다.beta-nominated+beta-accepted: 백포트를 기다리는 중입니다.beta-accepted: 백포트가 완료되었습니다.
rust-lang/rust에서의 Stable 백포트
stable 브랜치로의 백포트는 beta와 정확히 동일하게 작동하며, 레이블 이름만 조금 다릅니다: stable-nominated는 백포트에 대해 논의할 PR을 나타내고, stable-accepted는 백포트가 승인된 PR을 나타냅니다. stable 상정이 거부되면 stable-nominated 레이블이 제거됩니다.
T-release는 stable 백포트가 포인트(.patch) 릴리스를 정당화하는지(예: 1.50과 1.51 사이에 1.50.1을 릴리스하는지) 사안별로 결정합니다.
rust-lang/cargo에서의 Beta 백포트
Cargo에 대한 수정 사항 백포트 절차는 rust-lang/rust 저장소의 절차와 비슷하지만 조금 더 확장되어 있습니다. 현재 Cargo 저장소에는 백포트 태그가 없지만, 관련 PR에 댓글을 달아 백포트를 요청함으로써 백포트 과정을 시작할 수 있습니다. Cargo 팀 구성원이 백포트를 승인하면 PR을 보내기 시작해도 됩니다!
-
먼저 Cargo의
rust-1.21.0브랜치로 PR을 보냅니다(1.21은 현재 rustc beta 버전 번호로 대체합니다).rust-lang/rust와 마찬가지로 PR 제목 앞에[beta]를 붙이고 beta로 갈 것임을 표시해야 합니다. -
다음으로 Cargo 리뷰어가 PR에
@bors: r+를 남기고 큐에 넣습니다. 결국 bors가 (테스트가 통과하면) PR을 해당 Cargo 브랜치에 자동으로 병합합니다. -
마지막으로
rust-lang/rust저장소의beta브랜치에 PR을 보내 Cargo 서브모듈을 업데이트합니다. Cargo 서브모듈은rust-1.21.0브랜치(Cargo PR이 병합된 브랜치)의 최신 지점으로 업데이트되어야 합니다. 이전과 마찬가지로 PR 제목에[beta]가 포함되어 있는지 확인하십시오.
이 모든 것이 끝나면 Cargo 변경 사항은 beta 릴리스에 예정될 준비가 됩니다!