From afafeba900a587a14a90a2019873e1846491c1af Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Tue, 15 Jul 2025 15:59:45 -0700 Subject: [PATCH] GitHub Actions using Windows on ARM64 native --- .github/linters/actionlint.yml | 4 ++ .github/workflows/arm64.yml | 77 ++++++++++++++++++++++++ .github/workflows/arm64bvt.yml | 107 +++++++++++++++++++++++++++++++++ .github/workflows/bvt.yml | 2 +- 4 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 .github/linters/actionlint.yml create mode 100644 .github/workflows/arm64.yml create mode 100644 .github/workflows/arm64bvt.yml diff --git a/.github/linters/actionlint.yml b/.github/linters/actionlint.yml new file mode 100644 index 0000000..8f70803 --- /dev/null +++ b/.github/linters/actionlint.yml @@ -0,0 +1,4 @@ +self-hosted-runner: + # Workaround until linter is updated + labels: + - windows-11-arm diff --git a/.github/workflows/arm64.yml b/.github/workflows/arm64.yml new file mode 100644 index 0000000..c5d172c --- /dev/null +++ b/.github/workflows/arm64.yml @@ -0,0 +1,77 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# +# http://go.microsoft.com/fwlink/?LinkId=248926 + +name: 'CMake (Windows on ARM64)' + +on: + push: + branches: "main" + paths-ignore: + - '*.md' + - LICENSE + - '.azuredevops/**' + - '.nuget/*' + - build/*.cmd + - build/*.json + - build/*.props + - build/*.ps1 + - build/*.targets + - build/*.xvd + pull_request: + branches: "main" + paths-ignore: + - '*.md' + - LICENSE + - '.azuredevops/**' + - '.nuget/*' + - build/*.cmd + - build/*.json + - build/*.props + - build/*.ps1 + - build/*.targets + - build/*.xvd + +permissions: + contents: read + +jobs: + build: + runs-on: windows-11-arm + + strategy: + fail-fast: false + + matrix: + build_type: [arm64-Debug, arm64-Release, arm64-Debug-UWP, arm64-Release-UWP] + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: 'Install Ninja' + run: choco install ninja + + - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 + with: + arch: arm64 + + - name: 'Configure CMake' + working-directory: ${{ github.workspace }} + run: cmake --preset=${{ matrix.build_type }} + + - name: 'Build' + working-directory: ${{ github.workspace }} + run: cmake --build out\build\${{ matrix.build_type }} + + - name: 'Clean up' + working-directory: ${{ github.workspace }} + run: Remove-Item -Path out -Recurse -Force + + - name: 'Configure CMake (DLL)' + working-directory: ${{ github.workspace }} + run: cmake --preset=${{ matrix.build_type }} -DBUILD_SHARED_LIBS=ON + + - name: 'Build (DLL)' + working-directory: ${{ github.workspace }} + run: cmake --build out\build\${{ matrix.build_type }} diff --git a/.github/workflows/arm64bvt.yml b/.github/workflows/arm64bvt.yml new file mode 100644 index 0000000..1e51ac8 --- /dev/null +++ b/.github/workflows/arm64bvt.yml @@ -0,0 +1,107 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# +# https://go.microsoft.com/fwlink/?LinkId=248926 + +name: 'BVTs (arm64)' + +on: + push: + branches: "main" + paths-ignore: + - '*.md' + - LICENSE + - '.azuredevops/**' + - '.nuget/*' + - build/*.cmd + - build/*.json + - build/*.props + - build/*.ps1 + - build/*.targets + - build/*.xvd + pull_request: + branches: "main" + paths-ignore: + - '*.md' + - LICENSE + - '.azuredevops/**' + - '.nuget/*' + - build/*.cmd + - build/*.json + - build/*.props + - build/*.ps1 + - build/*.targets + - build/*.xvd + +permissions: + contents: read + +jobs: + build: + runs-on: windows-11-arm + timeout-minutes: 60 + + strategy: + fail-fast: false + + matrix: + build_type: [arm64-Release] + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Clone test repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: walbourn/directxtextest + path: Tests + ref: main + + - name: 'Install Ninja' + run: choco install ninja + + - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 + with: + arch: arm64 + + - name: 'Set triplet' + shell: pwsh + run: echo "VCPKG_DEFAULT_TRIPLET=arm64-windows" >> $env:GITHUB_ENV + + - name: Get vcpkg commit hash + shell: pwsh + run: | + if ($Env:vcpkgRelease) { + echo "Using vcpkg commit from repo variable..." + $VCPKG_COMMIT_ID = $Env:vcpkgRelease + } + else { + echo "Fetching latest vcpkg commit hash..." + $commit = (git ls-remote https://github.com/microsoft/vcpkg.git HEAD | Select-String -Pattern '([a-f0-9]{40})').Matches.Value + $VCPKG_COMMIT_ID = $commit + } + Write-Host "VCPKG_COMMIT_ID=$VCPKG_COMMIT_ID" + echo "VCPKG_COMMIT_ID=$VCPKG_COMMIT_ID" >> $env:GITHUB_ENV + env: + vcpkgRelease: '${{ vars.VCPKG_COMMIT_ID }}' + + - uses: lukka/run-vcpkg@7d259227a1fb6471a0253dd5ab7419835228f7d7 # v11 + with: + runVcpkgInstall: true + vcpkgJsonGlob: '**/build/vcpkg.json' + vcpkgGitCommitId: '${{ env.VCPKG_COMMIT_ID }}' + + - name: 'Configure CMake' + working-directory: ${{ github.workspace }} + run: > + cmake --preset=${{ matrix.build_type }} -DBUILD_TESTING=ON -DBUILD_TOOLS=OFF -DBUILD_SAMPLE=OFF -DBUILD_BVT=ON + -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_MANIFEST_DIR="${{ github.workspace }}/build" + -DVCPKG_TARGET_TRIPLET="${env:VCPKG_DEFAULT_TRIPLET}" + + - name: 'Build' + working-directory: ${{ github.workspace }} + run: cmake --build out\build\${{ matrix.build_type }} + + - name: 'Run BVTs' + working-directory: ${{ github.workspace }} + run: ctest --preset=${{ matrix.build_type }} --output-on-failure diff --git a/.github/workflows/bvt.yml b/.github/workflows/bvt.yml index fa3715c..350f1ff 100644 --- a/.github/workflows/bvt.yml +++ b/.github/workflows/bvt.yml @@ -3,7 +3,7 @@ # # https://go.microsoft.com/fwlink/?LinkId=248926 -name: 'CTest (BVTs)' +name: 'BVTs (x64)' on: push: