백포트
백포트란 무엇입니까?
백포트란 더 새로운 Rust 릴리스(또는 다른 소프트웨어)에 반영된 수정 사항이나 기능을 가져와 아직 지원 중인 이전 브랜치에 다시 적용하는 작업입니다. 이 작업은 모든 업스트림 변경 사항을 더 이상 받지 않는 채널(Stable이나 Beta 등)에 중요한 버그 수정이나 보안 패치를 배포할 때 가장 흔히 사용됩니다.
메인 브랜치에 병합된 후 beta 브랜치와 stable 브랜치로 포팅해야 하는 패치(대부분 충분히 심각한 버그의 수정)가 꾸준히 조금씩 발생합니다. 이 절차를 알고 있는 사람조차 소수에 불과하지만, 사실 이는 누구나 할 수 있는 일입니다.
rust-lang/rust에서의 beta 백포트
beta 브랜치로의 PR 백포트는 보통 회귀를 수정하기 위해서만 이루어집니다. PR을 beta 브랜치로 백포트하려면 다음 절차를 거칩니다.
-
백포트할 PR에
beta-nominated레이블을 추가하십시오. 이 레이블은 해당 PR이 백포트 여부를 결정하기 위해 담당 팀의 검토가 필요한 상태임을 표시합니다. 트리아지 권한이 있는 사람이라면 누구나 자유롭게 이 레이블을 추가할 수 있습니다. -
팀이 백포트해야 한다고 판단하면
beta-accepted레이블을 추가해야 합니다. 그렇지 않으면 nominated 레이블을 제거해야 합니다. -
때때로 누군가가 beta 롤업 PR을 만듭니다. 이 작업은 주로 릴리스 팀이 수행하지만, 누구나 할 수 있습니다. 절차는 다음과 같습니다.
-
beta브랜치에서 로컬 브랜치를 생성하십시오. -
beta-nominated와beta-accepted레이블이 모두 붙은 PR을 전부 체리픽하십시오. 막판에 변경 사항이 생기거나 전체 CI 테스트 실행 중 실패할 수 있으므로, 아직 병합되지 않은 PR은 포함하지 않는 것이 일반적으로 바람직합니다. -
./x.py run replace-version-placeholder를 실행하고, 변경 사항이 있으면 새 커밋에 넣으십시오. -
(권장) 로컬에서 몇 가지 테스트를 실행하십시오. 백포트가 깔끔하게 적용되지 않거나, 출력에 차이가 있어 UI 테스트를 다시 bless해야 하는 경우가 드물지 않습니다.
-
제목이
[beta]로 시작하는 PR을 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 백포트가 포인트(.패치) 릴리스(예: 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로 향하는 PR로 표시되었는지 확인하십시오. -
다음으로 Cargo 리뷰어가 PR에
@bors: r+를 달아 큐에 넣습니다. 이후 (테스트가 통과하면) bors가 해당 PR을 적절한 Cargo 브랜치에 자동으로 병합합니다. -
마지막으로 Cargo 서브모듈을 업데이트하는 PR을
rust-lang/rust저장소의beta브랜치로 보냅니다. Cargo 서브모듈은rust-1.21.0브랜치(Cargo PR이 병합된 브랜치)의 최신 커밋으로 업데이트해야 합니다. 앞에서와 마찬가지로 PR 제목에[beta]가 포함되어 있는지 확인하십시오.
이 모든 과정을 마치면 Cargo 변경 사항을 beta 릴리스 일정에 포함할 준비가 끝납니다!