CMake/.gitlab/os-windows.yml
Brad King 0929221ca3 gitlab-ci: Simplify Windows packaging pipeline
In commit 4c7c66dcf5 (gitlab-ci: Add jobs to make Windows x86_64 and
i386 packages, 2022-05-19, v3.24.0-rc1~112^2) we used a separate Windows
packaging job in nightly packaging pipelines.  It did not run in release
pipelines, where we need to run the final packaging step manually with
signing.  Simplify nightly packaging pipelines by running `cpack` at the
end of the build job as we do for other platforms.

For release packaging pipelines, create an archive of the files needed
to build a package, and present this as the built "package" on Windows.
2023-02-28 13:39:44 -05:00

450 lines
12 KiB
YAML

# Windows-specific builder configurations and build commands
## Base configurations
.windows:
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake ci ext\\$CI_CONCURRENT_ID"
# Avoid conflicting with other projects running on the same machine.
SCCACHE_SERVER_PORT: 4227
### Build and test
.windows_build:
extends: .windows
variables:
# Note that shell runners only support runners with a single
# concurrency level. We can't use `$CI_CONCURRENCY_ID` because this may
# change between the build and test stages which CMake doesn't support.
# Even if we could, it could change if other runners on the machine
# could run at the same time, so we drop it.
GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake ci"
.windows_build_ninja:
extends: .windows_build
variables:
# Debug and RelWithDebinfo build types use the `/Zi` which results in
# uncacheable compiations.
# https://github.com/mozilla/sccache/issues/242
CMAKE_CI_BUILD_TYPE: Release
CTEST_NO_WARNINGS_ALLOWED: 1
.windows_vcvarsall_vs2022_x64:
variables:
VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
VCVARSPLATFORM: "x64"
VCVARSVERSION: "14.35.32215"
.windows_vcvarsall_vs2022_x86:
variables:
VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
VCVARSPLATFORM: "x86"
VCVARSVERSION: "14.35.32215"
.windows_vcvarsall_vs2022_x64_arm64:
variables:
VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
VCVARSPLATFORM: "x64_arm64"
VCVARSVERSION: "14.35.32215"
.windows_arm64_vcvarsall_vs2022:
variables:
VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
VCVARSPLATFORM: "arm64"
VCVARSVERSION: "14.35.32215"
.windows_vs2022_x64_ninja:
extends:
- .windows_build_ninja
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_vs2022_x64_ninja
.windows_arm64_vs2022_ninja:
extends:
- .windows_build_ninja
- .windows_arm64_vcvarsall_vs2022
variables:
CMAKE_CONFIGURATION: windows_arm64_vs2022_ninja
.windows_package:
extends:
- .windows_build_ninja
variables:
CMAKE_CI_BUILD_TYPE: Release
CMAKE_CI_NO_INSTALL: 1
.windows_x86_64_package:
extends:
- .windows_package
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_x86_64_package
.windows_i386_package:
extends:
- .windows_package
- .windows_vcvarsall_vs2022_x86
variables:
CMAKE_CONFIGURATION: windows_i386_package
.windows_arm64_package:
extends:
- .windows_package
- .windows_vcvarsall_vs2022_x64_arm64
variables:
CMAKE_CONFIGURATION: windows_arm64_package
### External testing
.windows_vs2022_x64:
extends: .windows
variables:
CMAKE_CONFIGURATION: windows_vs2022_x64
CMAKE_GENERATOR: "Visual Studio 17 2022"
CMAKE_GENERATOR_PLATFORM: "x64"
CMAKE_GENERATOR_TOOLSET: "v143,version=14.35.32215"
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_vs2019_x64:
extends: .windows
variables:
CMAKE_CONFIGURATION: windows_vs2019_x64
CMAKE_GENERATOR: "Visual Studio 16 2019"
CMAKE_GENERATOR_PLATFORM: "x64"
CMAKE_GENERATOR_TOOLSET: "v142,version=14.29.30133"
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_borland:
extends: .windows
variables:
CMAKE_GENERATOR: "Borland Makefiles"
CMAKE_CI_BUILD_TYPE: Release
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_borland5.5:
extends: .windows_borland
variables:
CMAKE_CONFIGURATION: windows_borland5.5
.windows_borland5.8:
extends: .windows_borland
variables:
CMAKE_CONFIGURATION: windows_borland5.8
.windows_ninja:
extends: .windows
variables:
CMAKE_GENERATOR: "Ninja"
CMAKE_CI_BUILD_TYPE: Release
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_ninja_multi:
extends: .windows
variables:
CMAKE_GENERATOR: "Ninja Multi-Config"
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_nmake:
extends: .windows
variables:
CMAKE_GENERATOR: "NMake Makefiles"
CMAKE_CI_BUILD_TYPE: Release
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_jom:
extends: .windows
variables:
CMAKE_GENERATOR: "NMake Makefiles JOM"
CMAKE_CI_BUILD_TYPE: Release
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_vs2022_x64_nmake:
extends:
- .windows_nmake
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_vs2022_x64_nmake
.windows_vs2022_x64_jom:
extends:
- .windows_jom
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_vs2022_x64_jom
.windows_vs2022_x64_ninja_multi:
extends:
- .windows_ninja_multi
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_vs2022_x64_ninja_multi
.windows_clang_ninja:
extends:
- .windows_ninja
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_clang_ninja
.windows_clang_nmake:
extends:
- .windows_nmake
- .windows_vcvarsall_vs2022_x64
variables:
CMAKE_CONFIGURATION: windows_clang_nmake
.windows_msvc_v71_nmake:
extends: .windows_nmake
variables:
CMAKE_CONFIGURATION: windows_msvc_v71_nmake
.windows_openwatcom:
extends: .windows
variables:
# Watcom does not support spaces in the path.
GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake-ci-ext\\$CI_CONCURRENT_ID"
CMAKE_GENERATOR: "Watcom WMake"
CMAKE_CI_BUILD_TYPE: Release
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.windows_openwatcom1.9:
extends: .windows_openwatcom
variables:
CMAKE_CONFIGURATION: windows_openwatcom1.9
.windows_arm64_vs2022:
extends: .windows
variables:
CMAKE_CONFIGURATION: windows_arm64_vs2022
CMAKE_GENERATOR: "Visual Studio 17 2022"
CMAKE_GENERATOR_PLATFORM: "ARM64"
CMAKE_GENERATOR_TOOLSET: "v143,version=14.35.32215"
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.mingw_osdn_io:
extends: .windows
variables:
# Place MinGW environment in a path without spaces.
GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake-ci-ext\\$CI_CONCURRENT_ID"
CMAKE_CI_BUILD_TYPE: Debug
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
.mingw_osdn_io_mingw_makefiles:
extends: .mingw_osdn_io
variables:
CMAKE_CONFIGURATION: mingw_osdn_io_mingw_makefiles
CMAKE_GENERATOR: "MinGW Makefiles"
.mingw_osdn_io_msys_makefiles:
extends: .mingw_osdn_io
variables:
CMAKE_CONFIGURATION: mingw_osdn_io_msys_makefiles
CMAKE_GENERATOR: "MSYS Makefiles"
## Tags
.windows_x86_64_tags_nonconcurrent_vs2022:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-x86_64
- shell
- vs2022
- msvc-19.35
- nonconcurrent
.windows_x86_64_tags_nonconcurrent_vs2022_arm64:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-x86_64
- shell
- vs2022
- msvc-19.35-arm64
- nonconcurrent
.windows_x86_64_tags_concurrent_vs2022:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-x86_64
- shell
- vs2022
- msvc-19.35
- concurrent
.windows_x86_64_tags_concurrent_vs2019:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-x86_64
- shell
- vs2019
- msvc-19.29-16.11
- concurrent
.windows_x86_64_tags_concurrent:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-x86_64
- shell
- concurrent
.windows_arm64_tags_nonconcurrent_vs2022:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-arm64
- shell
- vs2022
- msvc-19.35
- nonconcurrent
.windows_arm64_tags_concurrent_vs2022:
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows-arm64
- shell
- vs2022
- msvc-19.35
- concurrent
## Windows-specific scripts
.before_script_windows: &before_script_windows
- . .gitlab/ci/env.ps1
- $pwdpath = $pwd.Path
- (& "$pwsh" -File ".gitlab/ci/wix.ps1")
- Set-Item -Force -Path "env:WIX" -Value "$pwdpath\.gitlab\wix"
- (& "$pwsh" -File ".gitlab/ci/cmake.ps1")
- Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\cmake\bin;$env:PATH"
- . .gitlab/ci/ninja-env.ps1
- (& "$env:WIX\bin\light.exe" -help) | Select -First 1
- cmake --version
- . .gitlab/ci/qt-env.ps1
- . .gitlab/ci/python-env.ps1
.cmake_build_windows:
stage: build
script:
- *before_script_windows
- Set-Item -Force -Path "env:PATH" -Value "$env:PATH;$env:SCCACHE_PATH"
- Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
- sccache --start-server
- sccache --show-stats
- (& "$pwsh" -File ".gitlab/ci/pre_build.ps1")
- ctest -VV -S .gitlab/ci/ctest_configure.cmake
- ctest -VV -S .gitlab/ci/ctest_build.cmake
- (& "$pwsh" -File ".gitlab/ci/post_build.ps1")
- sccache --show-stats
- sccache --stop-server
interruptible: true
.cmake_test_windows:
stage: test
script:
- *before_script_windows
- Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
- ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake
interruptible: true
.cmake_test_windows_external:
stage: test-ext
script:
- . .gitlab/ci/env.ps1
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake
interruptible: true
.cmake_test_windows_nmake:
stage: test-ext
script:
- . .gitlab/ci/env.ps1
- Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake
interruptible: true
.cmake_test_windows_jom:
stage: test-ext
script:
- . .gitlab/ci/env.ps1
- Invoke-Expression -Command .gitlab/ci/jom.ps1
- $pwdpath = $pwd.Path
- Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\jom;$env:PATH"
- Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake
interruptible: true
.cmake_test_windows_borland:
stage: test-ext
script:
- . .gitlab/ci/env.ps1
- Invoke-Expression -Command .gitlab/ci/borland.ps1
- $pwdpath = $pwd.Path
- Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\bcc\bin;$env:PATH"
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake
interruptible: true
.cmake_test_windows_msvc:
stage: test-ext
script:
- . .gitlab/ci/env.ps1
- Invoke-Expression -Command .gitlab/ci/msvc.ps1
- Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake
interruptible: true
.cmake_test_windows_openwatcom:
stage: test-ext
script:
- . .gitlab/ci/env.ps1
- Invoke-Expression -Command .gitlab/ci/openwatcom.ps1
- $pwdpath = $pwd.Path
- Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\watcom\binnt;$pwdpath\.gitlab\watcom\binw;$env:PATH"
- Set-Item -Force -Path "env:INCLUDE" -Value "$pwdpath\.gitlab\watcom\h;$pwdpath\.gitlab\watcom\h\nt"
- Set-Item -Force -Path "env:EDPATH" -Value "$pwdpath\.gitlab\watcom\eddat"
- Set-Item -Force -Path "env:WATCOM" -Value "$pwdpath\.gitlab\watcom"
- Set-Item -Force -Path "env:WLINKTMP" -Value "."
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake
interruptible: true