次の方法で共有


チュートリアル: 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:writepackages: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 フィードからパッケージをアップロードまたは復元するようになりました。

次のステップ

次に試すその他のタスクを次に示します。