次の方法で共有


チュートリアル: GitHub Actions ワークフローで GitHub Packages を使用して vcpkg バイナリ キャッシュを設定する

このチュートリアルでは、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:writepackages: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:read
  • packages:write

PAT をリポジトリ シークレット ( VCPKG_PAT_TOKEN など) として格納し、ワークフローで参照します。

-Password: "${{ secrets.VCPKG_PAT_TOKEN }}"
-Source: "${{ env.FEED_URL }}"

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

次のステップ

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