Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

신뢰할 수 있는 게시

crates.io 신뢰할 수 있는 게시를 사용하면 수명이 긴 crates.io API 토큰을 GitHub Actions 시크릿에 저장하지 않고도 GitHub Actions 워크플로에서 크레이트를 게시할 수 있습니다.

신뢰할 수 있는 게시는 Rust 프로젝트 크레이트를 게시할 때 권장되는 방법입니다.

이 페이지에서는 rust-lang/team 저장소를 사용하여 Rust 프로젝트 저장소에 신뢰할 수 있는 게시를 구성하는 방법을 설명하고, 가장 흔히 쓰이는 게시 패턴을 소개합니다.

저장소가 Rust GitHub 조직 아래에 호스팅되어 있지 않다면 rust-lang/team 저장소를 통해 신뢰할 수 있는 게시를 구성할 수 없습니다. 이 경우 crates.io 신뢰할 수 있는 게시 문서의 안내를 따르십시오.

1. 크레이트 소유권 설정

신뢰할 수 있는 게시로 관리하려는 크레이트를 rust-lang-owner 계정이 소유하고 있는지 확인하십시오. 소유하고 있지 않다면 해당 계정을 소유자로 초대한 뒤, #t-infra Zulip 채널에서 초대를 수락해 달라고 요청하십시오.

2. 팀 저장소 구성

crates.io 크레이트 관리 문서에 설명된 대로 저장소 TOML 파일에 [[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);
  • GitHub가 OIDC 토큰을 발급(이슈)할 수 있도록 해당 job에 설정한 permissions: id-token: write;
  • 이름이 rust-lang/team의 publish-workflow와 일치하는 워크플로 파일.

다음 방법 중 하나를 사용하여 GitHub Actions로 크레이트를 게시할 수 있습니다.

3a. cargo를 사용하여 게시

crates-io-auth-action을 사용하고 워크플로에서 cargo publish를 직접 실행하려면 이 방법을 사용하십시오.

워크플로를 설정하고 액션을 사용하는 방법에 대한 자세한 내용은 crates.io 신뢰할 수 있는 게시 문서의 “GitHub Actions Setup” 섹션을 참조하십시오.

Rust 프로젝트 크레이트에서는 작업의 environment 필드가 필수이며, 이 값은 rust-lang/team 저장소의 publish-environment 필드와 일치해야 합니다.

예를 들면 다음과 같습니다.

jobs:
  publish:
    environment: publish
    ...

이 GitHub 검색을 사용하면 Rust 프로젝트 저장소에서 이 방식의 예시를 찾을 수 있습니다.

on:
  push:
    tags: ["v*"]

jobs:
  publish:
    runs-on: ubuntu-latest

이 워크플로는 다음과 같은 다른 GitHub 이벤트로도 트리거할 수 있다는 점에 유의하십시오.

  • 릴리스 시:
    on:
      release:
        types: [created]
    
  • workflow dispatch를 사용한 수동 실행:
    on:
      workflow_dispatch:
    

3b. 기본 브랜치에서 release-plz로 릴리스하기

더 많은 자동화를 원한다면 워크플로에서 cargo publish를 직접 실행하는 대신 릴리스 자동화 도구인 release-plz를 살펴보십시오.

이 GitHub 검색을 사용하면 Rust 프로젝트 저장소에서 release-plz의 사용 예시를 찾을 수 있습니다.