tech.guitarrapc.cóm

Technical updates

Trusted Publishingでcrates.ioパッケージ公開をトークンレスにする

crates.io Trusted Publishingが2025年7月11日にアナウンスされ、OpenID Connect (OIDC)を使ってトークンレスでCIからRustパッケージを公開できるようになりました。

今回は、crates.io Trusted Publishingを使ってGitHub ActionsからトークンレスでRustパッケージを公開するメリットと手順を解説します。

はじめに

Trusted Publishingにする動機やメリットについては、NuGetのTrusted Publishingを紹介する記事で解説しています。 creates.ioも従来はPATを用いる必要があったのですが、Trusted Publishingを使うことでOIDCを利用したトークンレスでのパッケージ公開が可能です。 簡単な設定で十分な効果を得られるので、ぜひ利用していきましょう。

設定方法

公式ドキュメントに沿って設定していきましょう。 crates.ioとGitHub Actionsそれぞれで設定します。

crates.ioでTrusted Publishingを設定

crates.ioにログインし、設定したいCrateのページを開きます。 SettingsタブにTrusted PublishingセクションがあるのでAddをクリックします。

Trusted PublishingのAdd

Trusted Publishingの設定画面が表示されるので、以下を入力Saveをクリックします。ワークフローファイル名を入力すると、リポジトリにワークフローファイルが存在するかチェックしてくれて便利です

  • Publisher: GitHubを選択 (GitLandも選択可能)
  • Repository owner: 自動入力される
  • Repository name: GitHubリポジトリ名
  • Workflow filename: パッケージの公開処理をするワークフローファイル名
  • Environment name: GitHub Environmentを使っているなら指定

Trusted Publishingの設定画面

ちなみにcrates.ioへの公開をTrusted Publishingに限定できるので、動作確認できたらチェックを付けておくと個人PATを使う事故を防げます。

trusted publishingに限定する

GitHub Actionsワークフローの設定

GitHub Actionsのワークフローを設定します。コツは3つです。

  • ワークフローファイル名はcrates.ioで指定したWorkflow filenameと一致させる
  • rust-lang/crates-io-auth-actionアクションを実行するジョブにid-token: writeの権限を付与する
  • rust-lang/crates-io-auth-actionアクションを使ってcrates.ioの短命トークン取得する

サンプルのワークフローrelease.yamlは次の通りです。git tagでバージョンタグをプッシュしたときにパッケージを公開します。

name: Publish crates
on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  publish:
    permissions:
      contents: read
      id-token: write # OIDCトークン発行のために必要
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.
      # ビルド
      - run: cargo build --verbose
      # cratesの短命トークンを取得
      - uses: rust-lang/crates-io-auth-action@b7e9a28eded4986ec6b1fa40eeee8f8f165559ec # v1.0.3
        id: auth
      # 取得した短命トークンを使ってcratesを公開
      - run: cargo publish --manifest-path csbindgen/Cargo.toml
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

タグをプッシュすれば、GitHub ActionsがトリガーされてOIDCを使ってcrates.ioのパッケージが公開/更新されます。

まとめ

他のパッケージサービスと同様に、crates.ioもTrusted Publishingが使えます。トークンレスでパッケージ公開できるので、ぜひ使っていきましょう。

参考