신뢰된 게시
Crates.io trusted publishing는 GitHub Actions 시크릿에 장기 유효한 crates.io API 토큰을 저장하지 않고도 GitHub Actions 워크플로가 크레이트를 게시할 수 있게 해줍니다.
신뢰 게시(trusted publishing)는 Rust 프로젝트 크레이트를 게시하는 데 권장되는 방법입니다.
이 페이지에서는 rust-lang/team 저장소를 사용하여 Rust 프로젝트 저장소에서 신뢰 게시를 구성하는 방법을 설명하며, 가장 일반적인 게시 패턴을 다룹니다.
저장소가 Rust GitHub 조직 아래에 호스팅되어 있지 않은 경우, rust-lang/team 저장소를 통해 신뢰 게시를 구성할 수 없습니다. 대신 crates.io trusted publishing 문서의 안내를 따르십시오.
1. 크레이트 소유권 설정
신뢰 게시로 관리하려는 크레이트가 rust-lang-owner 계정 소유인지 확인하십시오. 그렇지 않은 경우, 해당 계정을 소유자로 초대하고 #t-infra Zulip 채널에서 초대를 수락해 달라고 요청하십시오.
2. 팀 저장소 구성
저장소 TOML 파일에 crates.io 크레이트 관리 문서에 설명된 대로 [[crates-io]] 섹션을 추가하십시오.
publish-environment가 참조하는 환경도 함께 정의되어 있는지 확인하십시오. 예를 들면:
[environments.publish]
branches = ["main"]
[[crates-io]]
publish-environment = "publish"
...
환경 규칙
환경 규칙은 게시 GitHub Actions 워크플로를 트리거하는 이벤트와 일치해야 합니다.
예를 들어 게시가 다음에 의해 트리거된다면:
on:
push:
tags: ["v*"]
환경은 동일한 태그 푸시에서 워크플로가 실행되도록 허용해야 합니다:
[environments.publish]
tags = ["v*"]
3. GitHub Actions 워크플로 작성
신뢰 게시를 통해 crates.io에 게시하는 모든 워크플로에는 다음이 필요합니다:
environment: <publish-environment>를 지정한 작업(job);- 해당 작업(job)에
permissions: id-token: write를 설정하여 GitHub가 OIDC 토큰을 발급할 수 있도록 합니다; - 이름이
rust-lang/team의publish-workflow와 일치하는 워크플로 파일.
GitHub Actions로 크레이트를 게시할 때 다음 접근 방식 중 하나를 사용할 수 있습니다.
3a. cargo를 사용하여 게시하기
crates-io-auth-action을 사용하고 워크플로에서 직접 cargo publish를 실행하려면 이 접근 방식을 사용하십시오.
워크플로를 설정하고 액션을 사용하는 방법에 대한 자세한 내용은 crates.io trusted publishing 문서의 “GitHub Actions Setup” 섹션을 참조하십시오.
작업(job)의 environment 필드는 Rust 프로젝트 크레이트에 필수이며, rust-lang/team 저장소의 publish-environment 필드와 일치해야 합니다.
예를 들면:
jobs:
publish:
environment: publish
...
이 접근 방식의 예시는 이 GitHub 검색을 사용하여 Rust 프로젝트 저장소에서 찾을 수 있습니다.
on:
push:
tags: ["v*"]
jobs:
publish:
runs-on: ubuntu-latest
이 워크플로는 다음과 같은 다른 GitHub 이벤트에서도 트리거할 수 있다는 점에 유의하십시오.
- release 시:
on: release: types: [created] - workflow dispatch로 수동 실행:
on: workflow_dispatch:
3b. 기본 브랜치에서의 release-plz
더 많은 자동화를 원하신다면, 워크플로에서 cargo publish를 직접 실행하는 대신 release-plz를 확인해 보십시오.
release-plz의 예시는 이 GitHub 검색을 사용하여 Rust 프로젝트 저장소에서 찾을 수 있습니다.