注
このチュートリアルでは、GitHub パッケージでホストされている NuGet フィードを使用しますが、他の NuGet フィード プロバイダー (Azure Artifacts など) でも同じ手順を最小限の変更で使用できます。
GitHub Packages には、vcpkg によって生成された NuGet バイナリ パッケージ用の便利なリポジトリが用意されています。 このチュートリアルでは、GitHub Packages をリモート ストレージとして使用する GitHub Actions ワークフローでバイナリ キャッシュを設定する方法について説明します。
このチュートリアルで学習する内容は次のとおりです。
前提条件
- コード エディター
- GitHub Actions を使用した GitHub リポジトリ
- vcpkg を使用するプロジェクト
1 - GitHub パッケージの認証を構成する
このチュートリアルでは、GitHub Actions によって提供される組み込みの GITHUB_TOKEN を使用します。 GitHub Packages への読み取りと書き込みの両方のアクセスを有効にするには、次の permissions ブロックをワークフローに追加します。
permissions:
packages: write
これにより、 GITHUB_TOKEN に必要な packages:write と packages:read のアクセス許可が付与されます。
GITHUB_TOKENの使用には、いくつかの利点があります。
- 追加のシークレットを作成または管理する必要はありません
- フォークからのプル要求に対して自動的に機能します (読み取り専用アクセスを使用)
- 特定のリポジトリとワークフロー実行のスコープ
注
または、クロスリポジトリ アクセスまたはその他の高度なシナリオが必要な場合は、従来の個人用アクセス トークン (PAT) を使用することもできます。 GitHub の指示に従って、とpackages:writeのアクセス許可を持つpackages:readし、それをリポジトリにシークレットとして追加し、次の例で${{ secrets.YOUR_PAT_NAME }}の代わりに${{ secrets.GITHUB_TOKEN }}を使用します。
2 - Bootstrap vcpkg
vcpkg は、バイナリ キャッシュ操作中に使用する nuget.exe 実行可能ファイルの独自のコピーを取得します。 このチュートリアルでは、vcpkg で取得した nuget.exeを使用します。
ワークフローで vcpkg をブートストラップするステップを追加します。
- name: Bootstrap vcpkg
shell: pwsh
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
shell: bash
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh
vcpkg ブートストラップ スクリプトの場所をワークフローに適した場所に置き換える必要がある場合があります。このチュートリアルでは、vcpkg がリポジトリのルートにある vcpkg フォルダーにあることを前提としています。
3 - 必要な環境変数を設定する
ワークフロー ファイルに次の環境変数を追加します ( <OWNER> を GitHub のユーザー名または組織の名前に置き換えます)。
env:
USERNAME: <OWNER>
VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/<OWNER>/index.json,readwrite"
VCPKG_EXEの値を、bootstrap vcpkg ステップで生成された vcpkg 実行可能ファイルの場所に置き換える必要がある場合があります。
この手順では、gitHub Packages フィードをバイナリ キャッシュ ソースとして使用するように VCPKG_BINARY_SOURCES を構成します。詳細については、 binary キャッシュリファレンス を参照してください。
4 - GitHub パッケージを NuGet ソースとして追加する
vcpkg fetch nuget コマンドは、vcpkg で取得したnuget.exeの場所を出力し、必要に応じて実行可能ファイルをダウンロードします。
次の手順をワークフロー ファイルに追加して、 GITHUB_TOKENで NuGet ソースを構成します。
permissions:
packages: write
jobs:
build:
runs-on: windows-latest
steps:
# ... other steps ...
- name: Add NuGet sources
shell: pwsh
run: |
.$(${{ env.VCPKG_EXE }} fetch nuget) `
sources add `
-Source "${{ env.FEED_URL }}" `
-StorePasswordInClearText `
-Name GitHubPackages `
-UserName "${{ env.USERNAME }}" `
-Password "${{ secrets.GITHUB_TOKEN }}"
.$(${{ env.VCPKG_EXE }} fetch nuget) `
setapikey "${{ secrets.GITHUB_TOKEN }}" `
-Source "${{ env.FEED_URL }}"
Linux では、monoを実行するnuget.exeが必要です。 ディストリビューションのシステム パッケージ マネージャーを使用して、 mono をインストールできます。
apt install mono-complete
ubuntu-22.04 GitHub Actions ランナーにはmonoがプレインストールされていますが、ubuntu-24.04 (現在ubuntu-latest指している) 以降では、monoプレインストールは行われません。
permissions:
packages: write
jobs:
build:
runs-on: ubuntu-latest
steps:
# ... other steps ...
- name: Add NuGet sources
shell: bash
env:
VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
USERNAME: <OWNER>
FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
run: |
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
sources add \
-Source "${{ env.FEED_URL }}" \
-StorePasswordInClearText \
-Name GitHubPackages \
-UserName "${{ env.USERNAME }}" \
-Password "${{ secrets.GITHUB_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GITHUB_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
注
GitHub Actions によって提供される既定の GITHUB_TOKEN には、キャッシュされたパッケージをアップロードまたはダウンロードするために必要なアクセス許可 がありません 。
GitHub パッケージへのパッケージ キャッシュを有効にするには、代わりに 個人用アクセス トークン (PAT) を使用し、次のスコープが含まれていることを確認します。
packages:readpackages:write
PAT をリポジトリ シークレット ( VCPKG_PAT_TOKEN など) として格納し、ワークフローで参照します。
-Password: "${{ secrets.VCPKG_PAT_TOKEN }}"
-Source: "${{ env.FEED_URL }}"
以上で作業は終了です。 vcpkg は、GitHub Actions ワークフロー内の GitHub Packages でホストされている NuGet フィードからパッケージをアップロードまたは復元するようになりました。
次のステップ
次に試すその他のタスクを次に示します。
vcpkg