注
このチュートリアルでは、GitHub パッケージでホストされている NuGet フィードを使用しますが、他の NuGet フィード プロバイダー (Azure Artifacts など) でも同じ手順を最小限の変更で使用できます。
GitHub Packages には、vcpkg によって生成された NuGet バイナリ パッケージ用の便利なリポジトリが用意されています。 このチュートリアルでは、GitHub Packages をリモート ストレージとして使用する GitHub Actions ワークフローでバイナリ キャッシュを設定する方法について説明します。
このチュートリアルで学習する内容は次のとおりです。
前提条件
- コード エディター
- GitHub Actions を使用した GitHub リポジトリ
- vcpkg を使用するプロジェクト
1 - GitHub 個人用アクセス トークンを指定する
GitHub の指示に従って、リポジトリの従来の個人用アクセス トークン (PAT) を生成し、packages:write
とpackages:read
のアクセス許可を付与してください。
次に、リポジトリの GitHub Action のワークフローで使用可能な secret として GitHub PAT を追加。 このチュートリアルでは、シークレットに GH_PACKAGES_TOKEN
という名前を付けます。
GITHUB_TOKEN
によって提供される組み込みの PAT にはpackages:read
アクセス許可のみが付与されており、ワークフローに読み取り専用バイナリ キャッシュを使用する場合に使用できます。
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 Actions ワークフロー ファイルに次の手順を追加します。
- 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.GH_PACKAGES_TOKEN }}"
.$(${{ env.VCPKG_EXE }} fetch nuget) `
setapikey "${{ secrets.GH_PACKAGES_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
はプリインストールされなくなります。
- 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.GH_PACKAGES_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
場合によっては、 GH_PACKAGES_TOKEN
を、 gitHub 個人用アクセス トークンの手順で生成された PAT に指定した正しいシークレット名に置き換える必要があります。
以上で作業は終了です。 vcpkg は、GitHub Actions ワークフロー内の GitHub Packages でホストされている NuGet フィードからパッケージをアップロードまたは復元するようになりました。
次のステップ
次に試すその他のタスクを次に示します。
vcpkg