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 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/teampublish-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 프로젝트 저장소에서 찾을 수 있습니다.