Core Kit 릴리스 준비
Twoliter.toml에서 버전을 올리고 CHANGELOG.md를 업데이트하여 bottlerocket-core-kit 저장소의 새 릴리스를 준비합니다.
목적
bottlerocket-core-kit의 릴리스 준비 워크플로우를 자동화합니다:
- Twoliter.toml에서 릴리스 버전 업데이트
- Git 기록에서 체인지로그 항목 생성
- 릴리스를 위한 올바른 형식의 커밋 생성
사용 시기
- bottlerocket-core-kit의 새 릴리스 준비
- 최근 변경 사항으로 체인지로그 업데이트 필요
- 적절한 형식의 릴리스 커밋 생성
전제 조건
- bottlerocket-core-kit이 체크아웃된 grove에서 작업 중
- 병합 커밋 및 PR 참조가 있는 Git 기록 사용 가능
- 대상 릴리스 버전에 대한 지식
절차
릴리스 워크플로우
중요: 릴리스 프로세스는 엄격한 순서로 두 개의 커밋이 필요합니다:
커밋 1: 버전 범프 (반드시 먼저)
Twoliter.toml을 업데이트하여 새 릴리스 버전을 설정합니다:
# Twoliter.toml에서 업데이트:
release-version = "X.Y.Z"
커밋 명령어:
git add Twoliter.toml && git commit -s -S -m "twoliter: bump kit version to vX.Y.Z"
커밋 2: 체인지로그 업데이트 (반드시 두 번째)
새 버전의 변경 사항으로 CHANGELOG.md를 업데이트합니다.
커밋 명령어:
git add CHANGELOG.md && git commit -s -S -m "changelog: update for vX.Y.Z"
1. 새 커밋 식별
- 마지막 체인지로그 항목 이후의 커밋을 찾으려면:
git log --oneline <last_version_tag>..HEAD - 태그가 없으면 다음을 사용:
git log --oneline --since="<last_release_date>"
2. PR 참조 찾기
- 병합 커밋을 분석하여 PR 번호를 찾습니다:
git log --merges --oneline <last_version_tag>..HEAD - 커밋 메시지에서 "Merge pull request #XXX" 패턴을 찾습니다.
- 커밋 해시를 PR 병합 커밋과 교차 참조합니다.
3. 중요: PR 내용 확인
항상 각 PR에 포함된 패키지/변경 사항을 실제 수정된 파일을 확인하여 검증하세요:
git show <merge_commit_hash> --stat
다음에 의존하지 마세요:
- 커밋 메시지 요약만
- PR 브랜치 이름
- PR 내용에 대한 가정
혼합 PR 주의: 단일 PR에 자사 변경 사항과 서드파티 패키지 업데이트가 모두 포함될 수 있습니다. 동일한 PR에서 변경 유형별로 별도의 체인지로그 항목을 생성해야 합니다.
혼합 PR 예시 (PR #760):
git show 70609d6a --stat
# 다음에 대한 변경 사항 표시:
# sources/host-ctr/... <- 자사 변경 (host-ctr 리졸버)
# packages/amazon-vpc-cni-plugins/... <- 서드파티 업데이트
# packages/ecs-agent/... <- 서드파티 업데이트
이 PR에는 두 개의 체인지로그 항목이 필요합니다:
- OS 변경: "Replace
amazon-ecr-containerd-resolverwith Docker resolver inhost-ctr([#760])" - 서드파티 패키지 업데이트: "Update
amazon-vpc-cni-plugins,ecs-agent([#760])"
올바른 확인 예시:
# 병합 커밋 9656d841 (PR #795)의 경우:
git show 9656d841 --stat
# 표시: libcap, liburcu, libxcrypt, readline 변경
# 브랜치 이름이나 요약이 제안하는 내용이 아님
4. 체인지로그 스타일 가이드라인
버전 헤더 형식
# v<버전> (<YYYY-MM-DD>)
섹션 계층 구조
- OS 변경 - 핵심 시스템 및 자사 패키지 업데이트
- 자사 패키지 업데이트 (상세 하위 항목 포함)
- 외부 패키지를 위한 서드파티 패키지 업데이트 하위 섹션
- 빌드 변경 - 빌드 시스템, 도구 및 인프라 변경
- 오케스트레이터 변경 - 컨테이너 오케스트레이션 관련 변경
- 해당 시 Kubernetes 하위 섹션
항목 형식
- PR 참조와 함께 글머리 기호 사용:
- 설명 ([#XXX]) - 자사 패키지의 경우 적절할 때 상세한 하위 항목 포함
- 서드파티 패키지 업데이트: 버전 번호를 포함하지 마세요
- 올바름:
- Update \docker-cli-29`, `docker-engine-29` ([#785])` - 틀림:
- Update \docker-cli-29` to v29.0.4, `docker-engine-29` to v29.0.4 ([#785])`
- 올바름:
- 패치/수정의 경우 "Update" 대신 "Patch" 사용:
- 올바름:
- Patch \containerd-2.1` to update GRPC ([#801])`
- 올바름:
분류 규칙
- 자사 패키지: Bottlerocket 전용 코드 및 내부 종속성
- 서드파티 패키지: 외부 라이브러리 및 도구 (glibc, docker-engine 등)
- 빌드 변경: 빌드 시스템, CI/CD 또는 개발 도구에 영향을 미치는 모든 것
- 오케스트레이터 변경: Kubernetes, ECS 또는 기타 컨테이너 오케스트레이션 기능
5. 품질 검사
- 모든 항목에
([#XXX])형식의 PR 참조가 있는지 확인 - 일관된 형식과 들여쓰기 확인
- 관련 변경 사항을 그룹화하여 반복 항목 방지
- 섹션 내에서 시간 순서 유지
- 하위 섹션 헤더가 기존 패턴과 일치하는지 확인
- 항목을 작성하기 전에 각 PR의 실제 내용을 확인
검증
검증 명령어
- Git 로그 범위 확인:
git log --oneline <range> - 병합 커밋 확인:
git log --merges --grep="pull request" <range> - PR 내용 확인:
git show <merge_hash> --stat - PR 번호가 저장소에 존재하는지 확인
성공적인 릴리스 준비에는 다음이 포함됩니다:
- 올바른 순서의 두 커밋 (버전 범프 먼저, 체인지로그 다음)
- Twoliter.toml에 업데이트된 release-version
- CHANGELOG.md에 올바른 날짜의 새 버전 섹션
- 모든 항목에
([#XXX])형식의 PR 참조 - 서드파티 패키지 업데이트에 버전 번호가 포함되지 않음
- 커밋이 서명됨 (
-s -S플래그)
일반적인 문제
PR 참조 누락
병합 커밋에 PR 번호가 표시되지 않으면 다음을 확인:
git log --merges --oneline | head -20
"Merge pull request #XXX" 패턴을 찾습니다.
잘못된 패키지 분류
자사 패키지와 서드파티 패키지를 분류하기 전에 항상 git show <hash> --stat로 실제 변경된 파일을 확인합니다.
서드파티 업데이트의 버전 번호
기억하세요: 서드파티 패키지 업데이트 항목에는 버전 번호가 아닌 패키지 이름만 포함되어야 합니다.
예시 출력 구조
# v12.3.0 (2026-01-20)
## OS 변경
- Replace `amazon-ecr-containerd-resolver` with Docker resolver in `host-ctr` ([#760])
- Add MPS control daemon support to `nvidia-k8s-device-plugin` ([#789])
### 서드파티 패키지 업데이트
- Update `docker-cli-29`, `docker-engine-29` ([#785])
- Patch `containerd-2.1` to update GRPC ([#801])
- Update `libnvme`, `xfsprogs`, `nvme-cli`, `makedumpfile`, `keyutils`, `e2fsprogs` ([#794])
- Update `readline`, `libxcrypt`, `liburcu`, `libcap` ([#795])
[#760]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/760
[#785]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/785
[#789]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/789
[#794]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/794
[#795]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/795
[#801]: https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/801