最近、UmbracoNaviHideIconの新しいバージョンをリリースしたけど、APIキーは有効期限が切れていた。
新しいAPIキーを作った時、NuGetの勧めを見つけた。
8月17日から普通のAPIキーは30日で期限が切れる。
毎月更新しなければいけない。
それは面倒だから、信頼された発行を使いたい。
そのために、僕のGitHub Actionsも変えなければいけない。
前に「どうやってGitHub Actionsを使ってNuGetパッケージを公開したか」というブログ記事を書いた。
そのブログ記事を書いた時、Umbraco 13を使っていたけど、今Umbraco 17を使っているから、プロジェクトの構造をちょっと変えた。
(プロジェクトの構造はここで読める「(第2回)Auto Dictionaries:Umbraco 13 から 17 への冒険 — プロジェクト構造と TypeScript への移行準備」)
name: Release
on:
release:
types:
- published
jobs:
release_name:
name: Publish NuGet Package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build project
run: dotnet build --configuration Release PROJECT_NAME
- name: Package files
run: dotnet pack --configuration Release PROJECT_NAME/p:Version=${{github.ref_name}}
- name: Publish the package
run: dotnet nuget push PROJECT_NAME/build/Release/PROJECT_NAME.${{github.ref_name}}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{secrets.PRIVATE_NUGET_KEY}}
「(第2回)Auto Dictionaries:Umbraco 13 から 17 への冒険 — プロジェクト構造と TypeScript への移行準備」というブログ記事では、プロジェクトの構造を説明したから、この記事では説明しない。
でも一番大切なことは、今、TypeScriptを使っているから、コードがコンパイルされなければいけないことだ。
だから、ワークフローの.YMLのファイルには、このステップを追加しなければならない。
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'npm'
cache-dependency-path: 'PROJECT_NAME/Client/package-lock.json'
- name: Install frontend dependencies
run: npm ci
working-directory: PROJECT_NAME/Client
- name: Build frontend assets
run: npm run build
working-directory: PROJECT_NAME/Client
基本的なフローを次に示す。
まずは、OIDCトークンが必要だから、YMLファイルに許可を追加する。
permissions:
id-token: write
OIDC(OpenID Connect)は認証の仕組みだ。
ワークフローが動く時、GitHubがトークンを作る。
そのトークンには、どのリポジトリのどのワークフローかが書いてある。
nuget.orgは、そのトークンが本当にGitHubから来たかどうか確認できる。
だから、APIキーを保存しなくてもいい。
次に、有効期間の短いトークンを発行する。
- name: NuGet login (OIDC → temp API key)
uses: NuGet/login@v1
id: login
with:
user: ${{secrets.NUGET_USER}}
userはnuget.orgのユーザー名で、メールアドレスじゃない。GitHub SecretsにNUGET_USERとして追加したほうがいい。
最後に、
secrets.PRIVATE_NUGET_KEYをsteps.login.outputs.NUGET_API_KEYに変更する。
これで、GitHub SecretsのPRIVATE_NUGET_KEYを削除できる。
- name: Publish the package
run: dotnet nuget push PROJECT_NAME/build/Release/PROJECT_NAME.${{github.ref_name}}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{steps.login.outputs.NUGET_API_KEY}}
nuget.orgにログインしてから、新しい信頼された発行ポリシーを追加できる!
ユーザー名をクリックして、「Trusted Publishing」を選ぶ。
UmbracoNaviHideIconmain.yml。ファイル名だけでいい(.github/workflows/はいらない)*はすべてのパッケージという意味main.yml
name: Release
on:
release:
types:
- published
permissions:
contents: read
jobs:
release_name:
permissions:
id-token: write
name: Publish NuGet Package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '24'
cache: 'npm'
cache-dependency-path: 'PROJECT_NAME/Client/package-lock.json'
- name: Install frontend dependencies
run: npm ci
working-directory: PROJECT_NAME/Client
- name: Build frontend assets
run: npm run build
working-directory: PROJECT_NAME/Client
- name: Build project
run: dotnet build --configuration Release PROJECT_NAME
- name: Package files
run: dotnet pack --configuration Release PROJECT_NAME /p:Version=${{github.ref_name}}
- name: NuGet login (OIDC → temp API key)
uses: NuGet/login@v1
id: login
with:
user: ${{secrets.NUGET_USER}}
- name: Publish the package
run: dotnet nuget push PROJECT_NAME/build/Release/PROJECT_NAME.${{github.ref_name}}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{steps.login.outputs.NUGET_API_KEY}}
API キーから信頼された発行に変えるために、やったことは3つだけだ。
id-token: writeの許可を追加したNuGet/loginのステップとNUGET_USERを追加したこれで、PRIVATE_NUGET_KEYはもういらない。
キーを保存しないから、もっと安全だ。
それに、もう毎月 APIキーを更新しなくてもいい!

ヨハネス・ランツ
ウェブ開発者・経験9年