출시 모델

원래 블로그 게시물에서 발표된 대로 Bazel 4.0 이상 버전은 롤링 출시 버전과 장기 지원 (LTS) 출시 버전의 두 가지 출시 트랙을 지원합니다. 이 페이지에서는 Bazel의 출시 모델에 관한 최신 정보를 다룹니다.

지원 매트릭스

LTS 출시 버전 지원 단계 최신 버전 지원 종료
Bazel 10 순차적 롤링 출시 버전 페이지 확인 해당 사항 없음
Bazel 9 활성 9.0.2 2028년 12월
Bazel 8 유지보수 8.6.0 2027년 12월
Bazel 7 유지보수 7.7.1 2026년 12월
Bazel 6 지원 중단됨 6.6.0 2025년 12월
Bazel 5 지원 중단됨 5.4.1 2025년 1월
Bazel 4 지원 중단됨 4.2.4 2024년 1월

모든 Bazel LTS 출시 버전은 GitHub의 출시 페이지에서 확인할 수 있습니다.

출시 버전 관리

Bazel은 major.minor.patch 시맨틱 버전 관리 스키마를 사용합니다.

  • 주 출시 버전 에는 이전 출시 버전과 하위 호환되지 않는 기능이 포함되어 있습니다. 각 주요 Bazel 버전은 LTS 출시 버전입니다.
  • 부 출시 버전 에는 하위 호환되는 버그 수정과 메인 브랜치에서 백포팅된 기능이 포함되어 있습니다.
  • 패치 출시 버전 에는 중요한 버그 수정이 포함되어 있습니다.

또한 출시 전 버전은 다음 주 버전 번호에 하이픈과 날짜 서픽스를 추가하여 표시됩니다.

예를 들어 각 유형의 새 출시 버전은 다음과 같은 버전 번호를 생성합니다.

  • 주: 6.0.0
  • 부: 6.1.0
  • 패치: 6.1.2
  • 출시 전: 7.0.0-pre.20230502.1

지원 단계

각 주요 Bazel 버전에는 네 가지 지원 단계가 있습니다.

  • 순차적: 이 주 버전은 아직 출시 전이며 Bazel팀은 HEAD에서 롤링 출시 버전을 게시합니다.
  • 활성: 이 주 버전은 현재 활성 LTS 출시 버전입니다. Bazel팀은 중요한 기능과 버그 수정을 부 출시 버전으로 백포팅합니다.
  • 유지보수: 이 주 버전은 유지보수 모드의 이전 LTS 출시 버전입니다. Bazel팀은 보안 문제 및 OS 호환성 문제에 관한 중요한 버그 수정만 이 LTS 출시 버전으로 백포팅할 것을 약속합니다.
  • 지원 중단됨: Bazel팀은 더 이상 이 주 버전을 지원하지 않으므로 모든 사용자는 최신 Bazel LTS 출시 버전으로 이전해야 합니다.

출시 주기

Bazel은 두 가지 출시 트랙에 관한 출시 버전을 정기적으로 게시합니다.

롤링 출시 버전

  • 롤링 출시 버전은 Google Blaze 출시 버전과 조정되며 약 2주마다 HEAD에서 출시됩니다. 다음 Bazel LTS 출시 버전의 미리보기입니다.
  • 롤링 출시 버전은 호환되지 않는 변경사항을 제공할 수 있습니다. 호환되지 않는 플래그는 주요 호환성이 손상되는 변경사항에 권장되며 호환되지 않는 변경사항을 롤아웃할 때는 하위 호환성 정책을 따라야 합니다.

LTS 출시 버전

  • 주요 릴리스: 새 LTS 릴리스는 약 12개월 마다 HEAD에서 잘릴 것으로 예상됩니다. 새 LTS 출시 버전이 출시되면 즉시 활성 단계로 전환되고 이전 LTS 출시 버전은 유지보수 단계로 전환됩니다.
  • 부 출시 버전: 활성 LTS 트랙의 새 부 버전은 2개월에 한 번 출시될 것으로 예상됩니다.
  • 패치 출시 버전: 활성 및 유지보수 단계의 LTS 출시 버전에 관한 새 패치 버전은 중요한 버그 수정에 관해 요청 시 출시될 것으로 예상됩니다.
  • Bazel LTS 출시 버전은 유지보수 단계에 2년 동안 있다가 지원 중단됨 단계로 전환됩니다.

계획된 출시 버전은 GitHub의 출시 문제 를 확인하세요.

출시 절차 및 정책

롤링 출시 버전의 경우 프로세스가 간단합니다. 약 2주마다 Google 내부 Blaze 출시 버전과 동일한 기준선에 맞춰 새 출시 버전이 생성됩니다. 출시 일정이 빠르기 때문에 롤링 출시 버전으로 변경사항을 백포팅하지 않습니다.

LTS 출시 버전의 경우 아래 절차 및 정책이 적용됩니다.

  1. 출시 버전의 기준선 커밋을 결정합니다.
    • 새 주요 LTS 출시 버전의 경우 기준선 커밋은 메인 브랜치의 HEAD입니다.
    • 부 또는 패치 출시 버전의 경우 기준선 커밋은 동일한 LTS 출시 버전의 현재 최신 버전의 HEAD입니다.
  2. 기준선 커밋에서 release-<version> 이름으로 출시 브랜치를 만듭니다.
  3. PR을 통해 변경사항을 출시 브랜치로 백포팅합니다.
    • 커뮤니티는 관련 GitHub 문제 또는 PR에 "@bazel-io flag"로 답장하여 백포팅할 특정 커밋을 제안하여 잠재적 출시 차단기로 표시할 수 있습니다. Bazel팀은 이를 분류하고 커밋을 백포팅할지 결정합니다.
    • 메인 브랜치의 하위 호환되는 커밋만 백포팅할 수 있으며 병합 충돌을 해결하기 위한 추가적인 사소한 변경사항은 허용됩니다.
  4. Bazel 관리자를 위한 Cherry-Pick 요청 문제를 사용하여 변경사항을 백포팅합니다.

    • Bazel 관리자는 특정 커밋을 출시 브랜치로 체리픽하도록 요청할 수 있습니다. 이 프로세스는 GitHub에서 체리픽 요청을 만들어 시작됩니다. 방법은 여기를 참조하세요.

      1. 체리픽 요청 열기
      2. 요청 세부정보 입력
        • 제목: 요청에 관한 간결하고 설명이 포함된 제목을 입력합니다.
        • 커밋 ID: 체리픽하려는 커밋의 ID를 입력합니다. 커밋이 여러 개 있는 경우 쉼표로 구분합니다.
        • 카테고리: 요청의 카테고리를 지정합니다.
        • 검토자: 검토자가 여러 명인 경우 GitHub ID를 쉼표로 구분합니다.
      3. 마일스톤 설정
        • '마일스톤' 섹션을 찾아 설정을 클릭합니다.
        • 적절한 X.Y.Z 출시 차단기를 선택합니다. 이 작업은 체리픽 봇이 'release-X.Y.Z' 브랜치에 관한 요청을 처리하도록 트리거합니다.
      4. 문제 제출
        • 모든 세부정보를 입력하고 마일스톤을 설정한 후 문제를 제출합니다.
    • 체리픽 봇은 요청을 처리하고 커밋이 체리픽할 수 있는 경우 알림을 보냅니다. 커밋이 체리픽할 수 있는 경우(즉, 커밋을 체리픽하는 동안 병합 충돌이 없음) 봇은 새 pull 요청을 만듭니다. pull 요청이 Bazel팀의 구성원에게 승인되면 커밋이 체리픽되고 출시 브랜치로 병합됩니다. 완료된 체리픽 요청의 시각적 예는 이 예시 를 참고하세요.

  5. 출시 차단기를 식별하고 출시 브랜치에서 발견된 문제를 해결합니다.

    • 출시 브랜치는 Bazel CI의 postsubmit다운스트림 테스트 파이프라인에서 동일한 테스트 모음으로 테스트됩니다. Bazel팀은 출시 브랜치의 테스트 결과를 모니터링하고 발견된 회귀를 수정합니다.
  6. 알려진 출시 차단기가 모두 해결되면 출시 브랜치에서 새 출시 후보를 만듭니다.

    • 출시 후보는 bazel-discuss에 발표되며 Bazel팀은 후보에 관한 커뮤니티 버그 신고를 모니터링합니다.
    • 새 출시 차단기가 식별되면 마지막 단계로 돌아가 모든 문제를 해결한 후 새 출시 후보를 만듭니다.
    • 첫 번째 출시 후보가 생성된 후에는 출시 브랜치에 새 기능을 추가할 수 없습니다. 체리픽은 중요한 수정사항으로만 제한됩니다. 체리픽이 필요한 경우 요청자는 이 변경사항이 중요한 이유와 제공하는 이점을 설명해야 합니다. 이 변경사항으로 인해 회귀가 발생할 가능성은 얼마나 되나요?
  7. 추가 출시 차단기가 발견되지 않으면 출시 후보를 공식 출시 버전으로 푸시합니다.

    • 패치 출시 버전의 경우 마지막 출시 후보가 출시된 후 영업일 기준 최소 2일 후에 출시 버전을 푸시합니다.
    • 주 및 부 출시 버전의 경우 마지막 출시 후보가 출시된 후 영업일 기준 2일 후에 출시 버전을 푸시하지만 첫 번째 출시 후보가 출시된 후 1주일 이전에 푸시하지는 않습니다.
    • 출시 버전은 다음 날이 영업일인 날에만 푸시됩니다.
    • 출시 버전은 bazel-discuss에 발표되며 Bazel팀은 새 출시 버전에 관한 커뮤니티 버그 신고를 모니터링하고 해결합니다.

회귀 신고

사용자가 새 Bazel 출시 버전, 출시 후보 또는 HEAD의 Bazel에서 회귀를 발견하면 GitHub에 버그를 신고하세요. Bazelisk를 사용하여 문제의 커밋을 이분하고 이 정보를 버그 신고에 포함할 수 있습니다.

예를 들어 Bazel 6.1.0으로 빌드가 성공하지만 6.2.0의 두 번째 출시 후보로 빌드가 실패하는 경우 다음을 통해 이분할 수 있습니다.

bazelisk --bisect=6.1.0..release-6.2.0rc2 build //foo:bar

문제를 재현하는 데 필요한 경우 BAZELISK_SHUTDOWN 또는 BAZELISK_CLEAN 환경 변수를 설정하여 해당하는 bazel 명령어를 실행하여 빌드 상태를 재설정할 수 있습니다. 자세한 내용은 Bazelisk 이분 기능에 관한 문서를 참고하세요.

이분 기능을 사용하려면 Bazelisk를 최신 버전으로 업그레이드해야 합니다.

규칙 호환성

규칙 작성자이고 여러 Bazel 버전과의 호환성을 유지하려면 규칙 호환성 페이지를 확인하세요.