릴리스
SubLane 가이드: 릴리스.
그만큼 Release 관리자가 다음을 푸시하면 작업 흐름이 시작됩니다. v* 꼬리표. 일반적인 분기 푸시 또는 풀 요청에는 자동 해제가 없습니다.
버전 계약
다음과 같은 표준 태그를 사용하세요. v0.1.0 또는 v0.1.0-rc.1. 애플리케이션 버전과 Docker 버전 태그는 선행 부분을 생략합니다. v. 선행 0 숫자 구성 요소, 공백, 셸 문자 및 SemVer 빌드 메타데이터(+...)은 게시되기 전에 거부됩니다. 시험판 숫자 식별자도 표준이어야 합니다.
모든 릴리스에는 다음이 포함됩니다.
sublane_VERSION_linux_amd64.tar.gz그리고sublane_VERSION_linux_arm64.tar.gz.docker.compose.yaml그리고SHA256SUMS공개 릴리스 파일의 경우.- 멀티 플랫폼
ghcr.io/murongg/sublane:VERSION이미지와 두 개의 아키텍처 태그를 추가합니다. - 고정된 git-cliff 2.14.2를 사용하여 Git 기록에서 생성된 변경 로그 릴리스 노트를 유지합니다.
현재 저장소에 있는 가장 안정적인 버전 태그만 Docker을 업데이트할 수 있습니다. latest 채널과 GitHub의 최신 릴리스 지정입니다. 시험판 또는 이전 유지 관리 버전은 해당 채널을 뒤로 이동하지 않습니다. 가장 안정적인 태그의 빌드가 실패하면 해당 릴리스를 다시 실행하십시오. 하위 태그는 의도적으로 자리를 차지하지 않습니다. 배포는 버전이나 다이제스트에 의존하기보다는 고정해야 합니다. latest.
최초 저장소 설정
워크플로에서는 다음을 사용합니다. GITHUB_TOKEN, 범위: contents: write 그리고 packages: write 출판 작업에서만요. Docker 허브 계정이나 개인 액세스 토큰이 필요하지 않습니다. GitHub 작업 및 GHCR 패키지 게시는 저장소/조직 정책에 의해 허용되어야 합니다. 모든 작업 종속성은 전체 커밋 SHA에 고정됩니다.
저장소 소스 레이블은 이미지를 저장소에 연결합니다. GHCR 패키지는 공개 소스 저장소에 대해서도 처음에는 비공개일 수 있습니다. 첫 번째 게시가 성공한 후 패키지의 액세스 설정을 확인하고 익명 가져오기를 의도한 경우 공개로 설정하세요. GitHub을 참조하세요 컨테이너 레지스트리 문서. 후속 워크플로에서 쓰기 액세스 권한을 유지할 수 있도록 이 리포지토리와 연결된 게시된 패키지를 유지합니다.
버전 게시
생성 및 검토 CHANGELOG.md 개발 지점에서 make changelog, 릴리스 예정 문서를 사용하여 커밋합니다. 해당 변경 사항과 릴리스 워크플로를 먼저 병합하고 실행합니다. make check. 사용하지 않은 새로운 버전을 선택하세요. 기존 릴리스 태그를 이동하지 마십시오.
예를 들어, 선택한 후 v0.1.0:
git switch main
git pull --ff-only
make publish-check TAG=v0.1.0
make publish TAG=v0.1.0make publish-check 태그를 생성하거나 푸시하지 않고 동일한 프리플라이트를 실행합니다. make publish 검사된 커밋에 주석이 달린 태그를 생성하고 해당 태그만 푸시합니다. 둘 다 깨끗한 작업 트리(추적되지 않은 파일 포함)가 필요합니다. main 브랜치, 해당 커밋의 기존 릴리스 워크플로, 그리고 정확히 하나 origin 목적지를 푸시하세요. main 로컬 HEAD와 일치합니다. 로컬 또는 원격 중복 태그는 거부됩니다. 어떤 분기도 자동으로 전환, 병합 또는 푸시되지 않습니다.
태그는 릴리스 유형을 결정합니다. 별도의 시험판 플래그가 필요하지 않습니다.
make publish TAG=v0.1.0-rc.1당신은 또한 실행할 수 있습니다 node scripts/publish.mjs v0.1.0 --dry-run 또는 node scripts/publish.mjs v0.1.0 저장소에서 직접. Git 푸시 자격 증명(예: SSH 에이전트)이 작동하는 Node.js 24 및 Git이 필요합니다. Docker 허브 자격 증명은 필요하지 않습니다. 스크립트는 구성된 원격 장치가 인식된 GitHub URL을 사용할 때 GitHub 작업 워크플로 링크를 푸시하고 인쇄한 후 원격 태그를 확인합니다.
푸시가 실패하거나 결과를 확인할 수 없는 경우 리모컨이 이미 이를 수락했을 수 있으므로 로컬 태그가 유지됩니다. 먼저 리모컨과 작업을 검사하세요. 원격 태그가 없으면 스크립트에 의해 인쇄된 단일 태그 재시도 명령을 사용하십시오. 태그를 삭제하거나 강제로 푸시하지 않습니다. 스크립트는 기존 CI 파이프라인을 트리거합니다. 단순히 태그 푸시가 성공했다는 이유만으로 빌드 또는 게시가 완료된 것으로 보고되지 않습니다.
예시 버전은 예시입니다. 한 번에 하나의 선택한 버전을 게시하고 가용성을 발표하기 전에 작업 결과를 검사하세요. 버전 태그를 푸시하는 것이 게시 트리거입니다. 워크플로는 GitHub 릴리스 자체를 생성합니다.
작업 흐름 순서
- 태그를 검증하고 저장소 이름에서 소문자 GHCR 이미지 경로를 계산합니다.
- sqlc 드리프트 확인, Go 경주 테스트/vet, 프런트엔드 확인/빌드, 릴리스 메타데이터 테스트 및 Compose 유효성 검사 등 일반 CI 워크플로를 호출합니다.
- 기본 Linux amd64 및 arm64 실행기에서 Docker 이미지를 빌드하고 스모크 테스트합니다. PR 및 릴리스의 경우 테스트된 각 이미지에서 실제 바이너리를 추출하고 배포 파일 및 라이선스 공지와 함께 패키지한 다음 압축을 풀고 실행하여 버전을 확인합니다. 또한 릴리스 실행은 테스트된 두 이미지를 모두 단기 작업 아티팩트로 저장합니다.
- 모든 검사를 통과한 후 전체 태그 기록을 가져오고 다음을 사용하여 릴리스 노트를 생성합니다.
cliff.toml, 초안 GitHub 릴리스를 생성하거나 재개합니다. 재시도 시 초안 메모가 다시 생성됩니다. 이전에 게시된 릴리스는 절대 덮어쓰지 않습니다. - 테스트된 이미지를 로드하고 푸시한 다음 다중 플랫폼 버전 태그를 생성합니다. 게시 중에는 두 번째 애플리케이션 빌드가 발생하지 않습니다.
- 바이너리 아카이브, Compose 및 SHA-256 체크섬을 업로드합니다. 적합한 경우 최신 안정 채널을 홍보한 다음 완성된 릴리스를 게시하세요.
버전/소스/개정 라벨은 이미지에 포함되어 있으며 sublane --version 패키지 버전을 보고합니다. 이미지 루트 파일 시스템에는 Alpine 런타임 유틸리티, 공용 CA 인증서, 바이너리 및 라이센스 공지만 포함되어 있습니다. 소스 체크아웃, 컴파일러, Node.js 종속성 또는 로컬 데이터는 포함되지 않습니다. 빌드 컨텍스트 허용 목록에서는 로컬 데이터베이스, 암호화 키, 백업 및 작업 트리를 제외합니다.
실패 및 재시도
사용 실패한 작업 다시 실행 네트워크, 빌드 또는 레지스트리 작업이 실패할 때 동일한 태그 워크플로우 실행에. 완료하기 전에, 릴리스 artifacts는 초안에서 남아 있고 재스트리로 대체 할 수 있습니다. Per-architecture/version 이미지는 나중에 단계가 실패하면 이미 존재 할 수 있습니다. 재스트리는 동일한 릴리스를 완료합니다. 레지스트리를 출판하고 GitHub 릴리스는 하나의 원자 거래가 될 수 있으므로 실패 후 목적지를 모두 체크하십시오.
Artifacts는 7 일 동안 유지됩니다. 만료 후 모든 작업을 다시 실행하고 다시 테스트합니다. Reruns는 실행중인 내에서 동일한 이름의 동작을 대체합니다. 이미 출판 GitHub 릴리스는 보호됩니다. 릴리스가 게시되면 코드 또는 포장 보정을 위한 새로운 버전을 사용하므로 overwriting 그것보다. 태그를 삭제하거나 이동하지 않는 것은 백 다운로드 된 바이너리, 게시 된 이미지 또는 배포 된 데이터베이스를 롤하지 않습니다.
GITHUB_TOKEN- 생성된 태그는 일반적으로 다른 워크플로를 트리거하지 않습니다. 다른 자동화가 태그를 생성하면 적절하게 범위를 사용합니다. GitHub App/token 또는 명시적으로 설계 된 파견 흐름을 통해 릴리스를 트리거합니다. 수동 유지 보수자는 추가 설정없이 작업을 밀어. 참조 GitHub₢ 킹 워크 트리거 규칙.
현지 포장
make release VERSION=0.0.0-test이것은 한 번 프론트 엔드를 구축, 두 개의 리눅스 binaries를 교차하고 아카이브를 작성 SHA256SUMS 의붓기 dist/release/. 기존 아카이브는 과잉되지 않습니다; 신선한 테스트 버전을 사용하거나 이전 생성 된 artifacts 재구성 전에 이동. 이 명령은 이미지를 밀어하지 않거나 릴리스를 만들 수 없습니다. 기본 컨테이너 실행 시간 증거와 별도로 로컬 빌드 유효성을 유지하십시오.
Changelog 세대
설치하다 git-cliff의 특징 2.14.2 (CI에서 핀 버전). 그것은 개발 도구, 서버 의존성 아닙니다. 예를 들어, Rust 설치, 사용 cargo install git-cliff --locked --version 2.14.2. 다운로드 된 실행 가능을 통해 선택 될 수 있습니다 GIT_CLIFF=/path/to/git-cliff.
make changelog
make changelog-checkcliff.toml 이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
세대는 네트워크 메타 데이터와 외부 템플릿 명령을 사용하여 로컬 Git 역사를 읽습니다. 그것은 대체합니다 CHANGELOG.md 렌더링 성공 후만, 태그를 만들지 않고, 변경 버전 또는 커밋 파일. 실행하기 전에 정상적인 PR 흐름을 통해 생성 된 파일을 전송 make publish, 여전히 깨끗한 동기화 된 메인을 필요로한다. 저장소 변경 로그는 사전 릴리스 섹션을 포함; 안정된 릴리스 노트는 사전 릴리스에 도입 된 변경을 포함하여 안정된 태그 이후 전체 사이클을 요약합니다.
HEAD에서 체크 아웃 된 기존 태그의 경우:
make release-notes TAG=v0.1.0이 글 dist/release-notes.md 같은 템플릿을 사용하여; 릴리스 워크플로는 핀 발전기를 설치, fetches 전체 역사를 완료하고이 파일을 전달 GitHub. 누락되거나 미합성 태그가 거부됩니다. CI는 합성-history 통합 테스트를 실행합니다. 실행 make changelog-check git-cliff가 설치될 때 해당 테스트를 가능하게 합니다. make check 선택하지 않고 SUBLANE_TEST_CHANGELOG=1 설정입니다. 네이터 명령은 README를 변경합니다.