チュートリアル: GitHub Actions ワークフローで GitHub Packages を使用して vcpkg バイナリ キャッシュを設定する
Note
このチュートリアルでは、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 では、nuget.exe
を実行するmono
が必要です。 Ubuntu を使用する GitHub Actions ランナーには、 mono
がプレインストールされています。 それ以外の場合は、ディストリビューションのシステム パッケージ マネージャーを使用して 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