Bagikan melalui


Tutorial: Menyiapkan cache biner vcpkg menggunakan Paket GitHub dalam alur kerja GitHub Actions

Nota

Tutorial ini menggunakan umpan NuGet yang dihosting dalam Paket GitHub tetapi instruksi yang sama dapat digunakan untuk penyedia umpan NuGet lainnya, misalnya: Artefak Azure, dengan perubahan minimal.

Paket GitHub menawarkan repositori yang nyaman untuk paket biner NuGet Anda yang diproduksi oleh vcpkg. Dalam tutorial ini, kami menunjukkan kepada Anda cara menyiapkan cache biner di alur kerja GitHub Actions Anda yang menggunakan Paket GitHub sebagai penyimpanan jarak jauh.

Dalam tutorial ini, Anda akan mempelajari cara:

Prasyarat

  • Editor kode
  • Repositori GitHub menggunakan GitHub Actions
  • Proyek menggunakan vcpkg

1 - Mengonfigurasi autentikasi untuk Paket GitHub

Tutorial ini menggunakan bawaan GITHUB_TOKEN yang disediakan oleh GitHub Actions. Untuk mengaktifkan akses baca dan tulis ke Paket GitHub, tambahkan blok berikut permissions ke alur kerja Anda:

permissions:
  packages: write

Ini memberikan GITHUB_TOKEN izin dan packages:write yang diperlukanpackages:read. Menggunakan GITHUB_TOKEN memiliki beberapa keuntungan:

  • Tidak perlu membuat atau mengelola rahasia tambahan
  • Bekerja secara otomatis untuk permintaan pull dari fork (dengan akses baca-saja)
  • Dicakup ke repositori dan eksekusi alur kerja tertentu

Nota

Atau, Anda dapat menggunakan Token Akses Pribadi (PAT) klasik jika Anda memerlukan akses lintas repositori atau skenario lanjutan lainnya. Ikuti instruksi GitHub untuk menghasilkan Token Akses Pribadi (PAT) klasik dengan packages:write dan packages:read izin, lalu tambahkan sebagai rahasia di repositori Anda dan gunakan ${{ secrets.YOUR_PAT_NAME }} alih-alih ${{ secrets.GITHUB_TOKEN }} dalam contoh di bawah ini.

2 - Bootstrap vcpkg

vcpkg memperoleh salinannya sendiri dari nuget.exe executable yang digunakannya selama operasi pengelolaan cache biner. Tutorial ini menggunakan vcpkg-acquired nuget.exe.

Tambahkan langkah untuk bootstrap vcpkg di alur kerja Anda:

- name: Bootstrap vcpkg
  shell: pwsh
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
  shell: bash
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

Anda mungkin perlu mengganti lokasi skrip bootstrap vcpkg dengan yang benar untuk alur kerja Anda, tutorial ini mengasumsikan bahwa vcpkg terletak di vcpkg folder di akar repositori.

3 - Menyiapkan variabel lingkungan yang diperlukan

Tambahkan variabel lingkungan berikut ke file alur kerja Anda (ganti <OWNER> dengan nama pengguna atau nama organisasi GitHub Anda):

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"

Anda mungkin perlu mengganti nilai VCPKG_EXE dengan lokasi executable vcpkg yang dihasilkan dalam langkah bootstrap vcpkg .

Dalam langkah ini Anda mengonfigurasi VCPKG_BINARY_SOURCES untuk menggunakan umpan Paket GitHub Anda sebagai sumber penembolokan biner, baca referensi penembolokan biner untuk mempelajari lebih lanjut.

4 - Tambahkan Paket GitHub sebagai sumber NuGet

Perintah vcpkg fetch nuget menghasilkan lokasi dari nuget.exe yang diperoleh vcpkg, dan mengunduh yang dapat dieksekusi jika perlu.

Tambahkan langkah berikut ke file alur kerja Anda untuk mengonfigurasi sumber NuGet dengan :GITHUB_TOKEN

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 }}"

Di Linux, Anda perlu mono untuk menjalankan nuget.exe. Anda dapat menginstal mono menggunakan manajer paket sistem distribusi Anda:

apt install mono-complete

Perhatikan bahwa ubuntu-22.04 pelari GitHub Actions dilengkapi dengan mono yang telah diinstal sebelumnya, tetapi dimulai dengan ubuntu-24.04 (yang ubuntu-latest saat ini menunjuk ke), mono tidak lagi diinstal sebelumnya.

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 }}"

Nota

Default GITHUB_TOKEN yang disediakan oleh GitHub Actions tidak memiliki izin yang diperlukan untuk mengunggah atau mengunduh paket cache.
Untuk mengaktifkan penyimpanan cache paket ke Paket GitHub, gunakan token akses pribadi (PAT) dan pastikan itu mencakup cakupan berikut:

  • packages:read
  • packages:write

Simpan PAT sebagai rahasia repositori (misalnya, VCPKG_PAT_TOKEN) dan referensikan di alur kerja Anda:

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

Dan itu saja! vcpkg sekarang akan mengunggah atau memulihkan paket dari umpan NuGet Anda yang dihosting di Paket GitHub di dalam alur kerja GitHub Actions Anda.

Langkah selanjutnya

Berikut adalah tugas lain untuk dicoba berikutnya: