次の方法で共有


チュートリアル: 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:readアクセス許可をpackages:write付与してください。

次に、リポジトリの GitHub Action のワークフローで使用可能なシークレットとして GitHub PAT を追加します。 このチュートリアルでは、シークレット GH_PACKAGES_TOKENの名前を .

提供される GITHUB_TOKEN 組み込みの PAT には packages:read アクセス許可のみが付与されており、ワークフローに読み取り専用のバイナリ キャッシュを使用する場合に使用できます。

2 - Bootstrap vcpkg

vcpkg は、バイナリ キャッシュ操作中に使用する nuget.exe 実行可能ファイルの独自のコピーを取得します。 このチュートリアルでは、vcpkg-acquired 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 - 必要な環境変数を設定する

ワークフロー ファイルに次の環境変数を追加します (GitHub のユーザー名または組織の名前に置き換えます <OWNER> )。

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 VCPKG_EXE ステップで生成された vcpkg 実行可能ファイルの場所に置き換える必要がある場合があります。

この手順では、GitHub Packages フィードをバイナリ キャッシュ ソースとして使用するように構成 VCPKG_BINARY_SOURCES します。詳細については、 バイナリ キャッシュのリファレンスを参照 してください。

4 - GitHub パッケージを NuGet ソースとして追加する

このコマンドは vcpkg fetch nuget vcpkg-acquired 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。 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 }}"

GitHub 個人用アクセス トークンの提供手順で生成された PAT に指定した正しいシークレット名に置き換えるGH_PACKAGES_TOKEN必要がある場合があります。

以上で作業は終了です。 vcpkg は、GitHub Acions ワークフロー内の GitHub Packages でホストされている NuGet フィードからパッケージをアップロードまたは復元します。

次のステップ

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