GitHub 整合點

快取 GitHub Actions 工作流程的 vcpkg 建置二進位檔

vcpkg 的二進位快取功能可減少建置使用 GitHub Actions 進行持續整合的專案所花費的時間量。 GitHub 存放庫有兩個二進位快取提供者可供 GitHub 存放庫使用、GitHub Actions 快取提供者和 GitHub Packages NuGet 快取提供者。 如需這些 GitHub 功能的詳細資訊,請參閱 GitHub Actions 快取GitHub 套件。 如需 vcpkg 二進位快取的詳細資訊,請參閱我們的 二進位快取功能檔

GitHub Actions 快取提供者

注意

本節涵蓋 vcpkg 的實驗功能,隨時可能會變更或移除。

GitHub Actions 快取的目的是儲存存放庫的中繼組建檔案,這些檔案不會經常在作業或工作流程執行之間變更。 對於 GitHub 使用者,GitHub Actions 快取很適合 vcpkg 的二進位快取,而且比 vcpkg 的 GitHub 套件二進位快取整合更容易設定。 GitHub 提供一些不同的工具來管理動作快取,其中包括 REST API 和命令行工具的 gh 延伸模組,以便您將工作流程的快取優化。 vcpkg 與 GitHub Actions 快取的整合是透過 x-gha 二進位來源提供者。

GitHub Packages NuGet 快取提供者

GitHub Packages 可讓存放庫發佈二進製成品以供公用或私人使用。 除了裝載已發佈套件的記憶體之外,GitHub Packages 還支援各種套件管理工具,方法是做為套件登錄。 vcpkg 可以使用 NuGet 登錄介面將 GitHub Packages 作為 vcpkg 二進製成品的快取,方法是使用 nuget 二進位來源提供者。 與 GitHub Packages 的整合並不簡單,因為 GitHub Actions 快取整合和管理快取二進位檔比較困難,因此 GitHub Actions 快取對於大多數使用者而言是更好的選項。

GitHub 相依性圖表

注意

本節涵蓋 vcpkg 的實驗功能,隨時可能會變更或移除。

提示

我們正積極開發這項功能,並想要聽到您的意見反應。 如果您有任何關於目前功能或任何所需功能的想法,請傳送電子郵件vcpkg@microsoft.com或在 vcpkg提出問題,讓我們知道。 如果您有任何可啟用的 GitHub 功能意見反應,也請讓我們知道,我們會確定它會取得 GitHub 的合適人選。

關於 GitHub 相依性圖表

GitHub 相依性圖表會儲存存放庫的相依性集合。 除了能夠可視化存放庫的相依性之外,GitHub 會在此數據之上建置數個有用的功能,包括相依性檢閱和 Dependabot 警示。 若要深入瞭解,請參閱 GitHub 關於保護您的供應鏈

vcpkg 與 GitHub 相依性圖表整合

vcpkg 具有實驗性支援,可從 GitHub Actions 工作流程中填入 GitHub 相依性圖表。 若要啟用此功能,請在工作流程檔案中進行下列變更:

  • 設定 VCPKG_FEATURE_FLAGS 環境變數以包含 值 dependencygraph
  • GITHUB_TOKEN 環境變數設定為 值 ${{ secrets.GITHUB_TOKEN }}
  • 藉由包含下列許可權區塊,為 GitHub Actions 提供存放庫內容的寫入許可權。 若要將相依性圖形元數據寫入您的存放庫,則需要此專案。 這 不會 將任何認可新增至您的存放庫,也不會對存放庫的內容進行任何任何其他修改。
permissions:
  contents: write

您必須在存放庫的設定中啟用 GitHub 相依性圖表(預設在公用存放庫上啟用)。 針對私人存放庫,請遵循 GitHub 檔來 啟用相依性圖表 ,以滿足此需求。

已知的限制

  • 與 GitHub Actions 執行器配套的 vcpkg 版本可能不是最新的。 使用最新版本的 vcpkg 來取得此功能的存取權,並接收最新的錯誤修正。
  • 相依於相依性圖形的功能,例如 Dependabot 警示和 Dependabot 提取要求,尚無法使用。 如果您對這些功能感興趣,請讓我們知道!

GitHub Actions 工作流程範例

注意

此範例假設有一個有效的 vcpkg.json 指令清單會列出一些相依埠。 如需指令清單的詳細資訊,請參閱我們的 指令清單模式檔。

name: Populate dependencies

on:
  push:
    branches: [ main ]
  workflow_dispatch:

permissions:
  contents: write

env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  VCPKG_FEATURE_FLAGS: dependencygraph

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
      with:
        submodules: 'recursive'

    # This will execute a dry-run, meaning that libraries will not be built and
    # installed, but they will still be reported to the GitHub dependency graph.
    # This step assumes `vcpkg` has been bootstrapped (run `./vcpkg/bootstrap-vcpkg`)
    - name: Run vcpkg
      run: ${{ github.workspace }}/vcpkg/vcpkg install --dry-run