From 4720aff6ee9904af4c6ec5b8574e1a6bcd14c4fd Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 5 Nov 2024 17:12:56 -0800 Subject: [PATCH] Onboard GitHub Actions as a replacement for Azure DevOps. This reduces the vcpkg team's compliance burden as we won't be maintaining a separate Azure DevOps instance, and results in a better user experience for contributors as they need not go through so many clicks in order to get build logs. --- .github/workflows/test_modified_ports.yml | 151 ++++++++++++++++++++-- 1 file changed, 143 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test_modified_ports.yml b/.github/workflows/test_modified_ports.yml index fa1d8f68a6527e..7a2133683139ee 100644 --- a/.github/workflows/test_modified_ports.yml +++ b/.github/workflows/test_modified_ports.yml @@ -3,21 +3,156 @@ on: push: branches: - onboard-actions +permissions: + id-token: write + contents: read jobs: - Windows: + test-modified-ports: + strategy: + matrix: + include: + - triplet: 'x86-windows' + pool: windows + extra-checks: true + - triplet: 'x64-windows' + pool: windows + - triplet: 'x64-windows-static' + pool: windows + - triplet: 'x64-windows-static-md' + pool: windows + - triplet: 'x64-uwp' + pool: windows + - triplet: 'arm64-windows' + pool: windows + - triplet: 'arm64-uwp' + pool: windows + - triplet: 'arm64-osx' + pool: macOS + - triplet: 'x64-osx' + pool: macOS + - triplet: 'x64-linux' + pool: linux + - triplet: 'arm-neon-android' + pool: android + - triplet: 'x64-android' + pool: android + - triplet: 'arm64-android' + pool: android + - pool: windows + onees: vcpkg-windows-wus + artifact-staging: "D:\\artifactstaging" + vcpkg-downloads: "D:\\downloads" + working-root: "D:\\" + - pool: macOS + onees: vcpkg-windows-wus # FIXME: This should be the macOS pool + artifact-staging: /mnt/vcpkg-ci/artifactstaging # FIXME: Are these paths reasonable? + vcpkg-downloads: /mnt/vcpkg-ci/downloads + working-root: /mnt/vcpkg-ci + - pool: linux + onees: vcpkg-windows-wus # FIXME: This should be the linux pool + artifact-staging: /mnt/vcpkg-ci/artifactstaging + working-root: /mnt/vcpkg-ci + - pool: android + onees: vcpkg-windows-wus # FIXME: This should be the android pool + artifact-staging: /mnt/vcpkg-ci/artifactstaging + working-root: /mnt/vcpkg-ci runs-on: - self-hosted - - "1ES.Pool=vcpkg-windows-wus" + - "1ES.Pool=${{ matrix.onees }}" + env: + VCPKG_DOWNLOADS: ${{ matrix.vcpkg-downloads }} + WORKING_ROOT: ${{ matrix.working-root }} steps: - - name: Checkout + - name: Block non-Windows (for testing) + if: ${{ matrix.pool != 'windows' }} + run: exit 1 + - name: Checkout (Windows) uses: actions/checkout@v4 + if: ${{ matrix.pool == 'windows' }} + env: + PATH: c:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\cmd;$PATH with: # fetch-depth 50 tries to ensure we capture the whole history of the branch fetch-depth: 50 + - name: Checkout (Non-Windows) + uses: actions/checkout@v4 + if: ${{ matrix.pool != 'windows' }} + with: + # fetch-depth 50 tries to ensure we capture the whole history of the branch + fetch-depth: 50 + - name: Azure Login + uses: azure/login@v2 + with: + client-id: a81b4cd3-9d8d-4cb9-9a74-f2038f24f224 + subscription-id: 7fcb00fa-a761-49de-8a2f-d67190e62882 + tenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 + - name: Bootstrap (Windows) + if: ${{ matrix.pool == 'windows' }} + run: ./scripts/bootstrap.ps1 + - name: Bootstrap (Non-Windows) + if: ${{ matrix.pool != 'windows' }} + run: ./scripts/bootstrap.sh + - name: Format Manifests + if: ${{ matrix.extra-checks }} + run: ./vcpkg.exe format-manifest --all + - name: Create Format Manifest Diff + if: ${{ matrix.extra-checks }} + run: ./scripts/azure-pipelines/Create-PRDiff.ps1 -DiffFile "${{ matrix.artifact-staging }}/format.diff" + - name: 'Publish Artifact: Format Diff' + uses: actions/upload-artifact@v4 + if: ${{ failure() }} + with: + name: 'format.diff' + path: "${{ matrix.artifact-staging }}/format.diff" + retention-days: 7 + if-no-files-found: error + - name: "*** Test Modified Ports" + shell: pwsh + run: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + Write-Host "Getting Asset Cache SAS" + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus3 --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String + if ($LastExitCode -ne 0) { + Write-Error "Failed to get Asset Cache SAS" + return 1 + } + + $assetSas = $assetSas.Trim() + Write-Host "Getting Binary Cache SAS" + $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String + if ($LastExitCode -ne 0) { + Write-Error "Failed to get Binary Cache SAS" + return 1 + } + + $binarySas = $binarySas.Trim() + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus3.blob.core.windows.net/cache,$assetSas,readwrite" + if ($IsWindows) { # FIXME: Git in the images + $env:PATH += ";c:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\cmd" + } - - name: Bootstrap - run: ./bootstrap-vcpkg.sh - - - name: Example + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ matrix.triplet }} -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory "${{ matrix.artifact-staging}}" + - name: 'Validate version files' + run: 'scripts/azure-pipelines/windows/validate-version-files.ps1' + - name: 'Publish Artifact: failure logs for ${{ matrix.triplet }}' + uses: actions/upload-artifact@v4 + with: + name: 'failure logs for ${{ matrix.triplet }}' + path: '${{ matrix.artifact-staging}}/failure-logs' + retention-days: 7 + if-no-files-found: ignore + - name: 'Build a file list for all packages' + if: ${{ always() }} shell: pwsh - run: Write-Host 'Running on 1ES Hosted GitHub Runners' + run: | + & $(./vcpkg fetch python3) ./scripts/file_script.py "${{ matrix.working-root }}/installed/vcpkg/info/" + - name: 'Publish Artifact: file lists for ${{ matrix.triplet }}' + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: 'file lists for ${{ matrix.triplet }}' + path: scripts/list_files + retention-days: 7 + if-no-files-found: ignore