Rust 릴리스 절차
현재 Rust는 다음과 같이 릴리스됩니다:
start-release.py 스크립트에 관한 참고 사항
릴리스 절차 중 프로덕션 환경과 상호 작용해야 하는 단계는 start-release.py 스크립트를 통해 실행합니다. 이 스크립트를 사용하려면 프로그램을 설치하고 로컬 환경을 구성해야 하며, 스크립트가 설정 과정을 안내합니다.
스크립트를 처음 실행할 때(또는 사전 요구 사항이 변경되었을 때)에는 모든 설정이 올바르게 완료될 때까지 스크립트를 여러 번 실행해야 합니다.
start-release.py는 항상 백그라운드에서 CI 작업을 시작합니다. 작업이 언제 끝나는지 알려면 로그를 지켜보아야 합니다. 빌드가 끝나면 로그에 다음과 같은 줄이 나타납니다:
Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED
stable 버전 번호 올리기(전주 금요일)
src/version의 버전 번호를 올리는 PR을 여십시오. 이 PR에 r+ rollup=never를 지정하십시오(직접 승인하십시오).
이 PR은 rollup=never로 지정하십시오. 롤업에서 첫 번째 PR이 아닌 상태로 병합되면 해당 롤업의 다른 풀 리퀘스트가 이전 릴리스와 잘못 연결되기 때문입니다.
사실상 이 시점에 beta 브랜치가 분기됩니다. beta가 승격될 때 이 버전 번호 상향 PR 바로 직전에 병합된 PR을 기반으로 하게 됩니다.
브랜치 승격(월요일)
두 승격 모두 월요일에 진행해야 합니다. 두 PR을 동시에 열어도 되지만, stable 승격을 먼저 병합하는 것을 우선하십시오(사전 릴리스 테스트 기간을 최대한 확보하기 위함입니다).
beta 및 stable 브랜치의 기준 업데이트
rust-lang/release-team(릴리스 팀) 저장소1에서 다음 명령을 실행하십시오:
./scripts/start-release.py update-rust-branches
start-release.py는 백그라운드에서 작업을 시작하며, 스크립트는 브랜치가 업데이트되기 전에 종료된다는 점을 기억하십시오. 다음 단계로 진행하기 전에 로그를 지켜보며 백그라운드 작업이 끝나는 시점을 확인하십시오.
stable PR
새 stable 브랜치를 대상으로 다음 변경 사항을 담은 PR을 rust-lang/rust에 보내십시오:
-
릴리스 노트를 사용 가능한 최신본으로 업데이트하십시오:
-
릴리스 노트 PR이 병합된 경우:
git checkout origin/HEAD -- RELEASES.md -
그렇지 않은 경우, 대기 중인 릴리스 노트 PR에서
RELEASES.md를 직접 복사하십시오
-
-
src/ci/channel을stable로 업데이트하십시오
또한 브랜치 업데이트 전에 병합되지 않은 beta 백포트가 있는지 확인하고, 있다면 stable PR에 체리픽하십시오:
- beta 브랜치를 대상으로 하는 PR 목록.
- beta 백포트가 승인된 PR 목록.
- beta 백포트에 상정된 PR 목록. 이 목록의 PR은 승인되지 않은 상태라는 점에 유의하십시오. 관련 팀과 후속 논의를 거쳐 처리 방법을 결정해야 합니다.
r+ rollup=never p=1000으로 PR을 직접 승인하십시오.
사전 릴리스 테스트 시간을 최대한 확보하려면 이 PR을 가능한 한 빨리 병합해야 한다는 점에 유의하십시오. bors가 다른 PR을 테스트하고 있고 CI가 곧 끝날 것 같지 않다면(이 부분은 직접 판단하십시오), 해당 PR에 들어가 다음 댓글을 작성하여 stable 릴리스 PR에 우선순위를 “양보“할 수 있습니다.
@bors yield stable 릴리스에 우선순위를 양보합니다.
beta PR
다음 변경 사항을 담아 새 beta 브랜치를 대상으로 하는 PR을 rust-lang/rust에 보내십시오.
-
다음 명령을 실행하고 그 출력만 담은 별도의 커밋을 만드십시오.
./x.py run replace-version-placeholder -
src/ci/channel을beta로 업데이트하십시오.
r+ rollup=never p=10으로 PR을 직접 승인하십시오.
dev-static 환경에 사전 릴리스 게시
stable PR이 병합되면 사전 릴리스를 시작해야 합니다. rust-lang/release-team(릴리스 팀) 저장소1에서 다음 명령을 실행하십시오:
./scripts/start-release.py publish-rust-dev-stable YYYY-MM-DD
YYYY-MM-DD를 릴리스 날짜(목요일)로 바꿔야 합니다.
기본 브랜치 부트스트랩 업데이트 및 Crater(화요일)
이 단계는 새 beta가 릴리스된 후에만 수행할 수 있습니다. beta의 릴리스 절차는 매일 00:00 UTC에 자동으로 진행되므로, beta PR이 그 이후에 반영되었다면 하루를 더 기다려야 합니다. rustup으로 beta를 설치해 보면 beta가 릴리스되었는지 확인할 수 있습니다.
다음 작업을 위해 기본 브랜치에 PR을 보내십시오.
-
이제 병합된 beta 브랜치 PR에서
replace-version-placeholder를 실행한 커밋을 체리픽하십시오. 기본 브랜치에는 분기된 beta에 포함되지 않은 다른 안정화가 있을 수 있고 이는 현재 릴리스에 속하지 않을 수 있으므로, 이 도구를 다시 실행하지 마십시오. -
다음을 실행하여 부트스트랩 컴파일러를 어제 만든 beta로 업데이트하십시오.
./x.py run src/tools/bump-stage0 -
bootstrap및not(bootstrap)조건부 컴파일 속성에 대한 참조를 제거하십시오. ripgrep을 설치하고 다음 명령을 실행하면 이들을 모두 찾을 수 있습니다.rg '#!?\[.*\(bootstrap' -t rust -t toml일반적인 지침(
#[]와#![]모두 해당)은 다음과 같습니다.#[cfg(bootstrap)]이 붙은 항목은 모두 제거하십시오.#[cfg(not(bootstrap))]속성은 항목을 유지한 채 모두 제거하십시오.#[cfg_attr(bootstrap, $attr)]속성은 항목을 유지한 채 모두 제거하십시오.#[cfg_attr(not(bootstrap), doc="$doc")]는 모두 관련 문서 블록(또는 새 문서 블록)의$doc으로 바꾸십시오.#[cfg_attr(not(bootstrap), $attr)]는 모두#[$attr]로 바꾸십시오.
beta PR과 기본 브랜치 부트스트랩 업데이트 사이에
cfg(bootstrap)을 추가하는 PR이 병합되면, 제거할 필요가 없는데도rg실행 결과에 해당 항목이 나타난다는 점에 유의하십시오. 이를 처리하는 가장 쉬운 방법은 일단 모두 변경한 뒤 CI가 실패를 알려 주도록 하는 것입니다. -
코드베이스에 영향을 주는 새로운 경고나 Clippy 린트가 없는지 확인하십시오.
./x clippy ci
새 beta가 나온 지금이 다음 릴리스 주기를 위한 Crater 실행을 시작하기에도 좋은 시점입니다. 이렇게 하면 다음 주기에 맞춰 실행을 시작했을 때 걸렸을 시간에 따라, 결과를 트리아지받기까지의 지연을 며칠에서 최대 2주 정도까지 줄일 수 있습니다.
이 단계는 Crater 실행을 시작하는 것일 뿐이며, Crater 실행을 실제로 트리아지하고 처리하는 일은 릴리스를 진행하는 사람의 책임이 아니라는 점에 유의하십시오. 시간이 부족하다면 이 단계는 건너뛰어도 되며, 다음 주기의 Crater 실행을 담당하는 사람이 실행을 시작할 것입니다.
- Crater 실행을 시작하는 방법은 릴리스 Crater 실행에 관한 장을 참고하십시오
릴리스 당일(목요일)
릴리스를 진행할 시각을 정하십시오. 릴리스 시각은 전적으로 여러분이 결정하므로, 가장 편한 시각을 고르십시오. 유일한 제약은 릴리스 절차가 릴리스 당일(UTC 기준) 안에 시작되고 끝나야 한다는 것입니다.
소셜 미디어 코디네이터(현재 Mara)에게 시각을 알려, 프로젝트의 소셜 미디어 채널에 릴리스 소식을 게시할 준비를 할 수 있도록 하십시오.
2024년 9월 기준으로 릴리스를 완료하는 데 75분에서 90분이 걸리므로, 계획한 시각에 맞출 수 있도록 릴리스 절차를 충분히 일찍 시작하십시오.
릴리스를 시작하려면 rust-lang/release-team(릴리스 팀) 저장소1에서 다음 명령을 실행하십시오:
./scripts/start-release.py publish-rust-prod-stable
이 명령은 프로덕션 환경을 대상으로 promote-release를 호출하는 백그라운드 작업을 시작하며, 그 로그를 확인하는 방법을 안내합니다.
릴리스 절차가 완료되면 블로그 게시물 PR을 병합하고, Mara에게 소셜 미디어에 릴리스를 알리도록 전달하십시오. 마지막으로, 성공의 기쁨을 만끽하십시오 🎉
beta stage0 업데이트(금요일)
게시한 stable 릴리스로 stage0을 업데이트하는 PR을 beta 브랜치에 보내십시오:
./x run src/tools/bump-stage0
부록: stable 사전 릴리스 다시 빌드하기
문제가 생겨 stable 아티팩트를 다시 빌드해야 한다면, rust-lang/rust 저장소의 stable 브랜치에 PR을 병합하십시오. 커밋이 병합되면 AWS로 인증한 후 rust-lang/release-team(릴리스 팀) 저장소에서 다음 명령을 실행하십시오:
./scripts/start-release.py publish-rust-dev-stable-rebuild
또한 이전에 블로그와 internals에 게시한 사전 릴리스 공지도 새 정보로 업데이트하는 것이 좋습니다.