diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index e69559ea..2e3a0e59 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -27,23 +27,31 @@ jobs: run: git diff --exit-code - name: Checking code style run: ./scripts/run-clang-tidy.sh + build: - runs-on: ubuntu-latest + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + include: + - os: ubuntu-latest + setup-script: ./scripts/setup-ubuntu.sh + - os: windows-latest + setup-script: ./scripts/find_vs.ps1 + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 with: submodules: recursive - - name: Setup Ubuntu + + - name: Build run: | - ./scripts/setup-ubuntu.sh + ${{ matrix.setup-script }} mkdir build - - name: Run cmake - run: | cmake --version cmake -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Debug -DBUILD_TZ_LIB=ON - - name: Build - run: ninja -C build + ninja -C build + - name: Test run: ctest --test-dir build --output-on-failure --timeout 30 diff --git a/scripts/find_vs.ps1 b/scripts/find_vs.ps1 new file mode 100644 index 00000000..613212dd --- /dev/null +++ b/scripts/find_vs.ps1 @@ -0,0 +1,48 @@ +# Find and enter a Visual Studio development environment. +# Required to use Ninja instead of msbuild on our build agents. +function Enter-VsDevEnv { + [CmdletBinding()] + param( + [Parameter()] + [switch]$Prerelease, + [Parameter()] + [string]$architecture = "x64" + ) + + $ErrorActionPreference = 'Stop' + + if ($null -eq (Get-InstalledModule -name 'VSSetup' -ErrorAction SilentlyContinue)) { + Install-Module -Name 'VSSetup' -Scope CurrentUser -SkipPublisherCheck -Force + } + Import-Module -Name 'VSSetup' + + Write-Verbose 'Searching for VC++ instances' + $vsinfo = ` + Get-VSSetupInstance -All -Prerelease:$Prerelease ` + | Select-VSSetupInstance ` + -Latest -Product * ` + -Require 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64' + + $vspath = $vsinfo.InstallationPath + + switch ($env:PROCESSOR_ARCHITECTURE) { + "amd64" { $hostarch = "x64" } + "x86" { $hostarch = "x86" } + "arm64" { $hostarch = "arm64" } + default { throw "Unknown architecture: $switch" } + } + + $devShellModule = "$vspath\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + + Import-Module -Global -Name $devShellModule + + Write-Verbose 'Setting up environment variables' + Enter-VsDevShell -VsInstanceId $vsinfo.InstanceId -SkipAutomaticLocation ` + -devCmdArguments "-arch=$architecture -host_arch=$hostarch" + + Set-Item -Force -path "Env:\Platform" -Value $architecture + + remove-Module Microsoft.VisualStudio.DevShell, VSSetup +} + +Enter-VsDevEnv