Files
CMake/.gitlab-ci.yml
T
Brad King 0eebd0a0e3 gitlab-ci: pin macOS and Windows jobs to nonconcurrent runners
On macOS and Windows, our jobs use a `GIT_CLONE_PATH` that does not
contain `$CI_CONCURRENCY_ID` so that the build and test jobs always use
the same path.  Since we use shell runners for these platforms, all
concurrent jobs would use the same path and conflict.  Therefore we can
only use runners with a concurrency level of 1 for jobs in the `build`
and `test` stages.  However, jobs in the `test-ext` stage configure a
new build tree for the tests and therefore can use `$CI_CONCURRENCY_ID`
and support shell runners with higher concurrency levels.

Prepare to make that distinction in the future by pinning all jobs to
runners with a `nonconcurrent` tag.
2020-05-29 11:23:16 -04:00

440 lines
13 KiB
YAML

.manual_rules_settings: &manual_rules_settings
- if: '$CI_PROJECT_PATH == "cmake/cmake"'
when: delayed
start_in: 5 minutes
- if: '$CI_MERGE_REQUEST_ID'
when: manual
- when: never
.rules_settings: &rules_settings
- if: '$CI_PROJECT_PATH == "cmake/cmake"'
when: always
- if: '$CI_MERGE_REQUEST_ID'
when: always
- when: never
.fedora31: &fedora31
image: "kitware/cmake:ci-fedora31-x86_64-2020-05-08"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
.debian10: &debian10
image: "kitware/cmake:ci-debian10-x86_64-2020-04-27"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
.debian10_iwyu: &debian10_iwyu
extends: .debian10
variables:
CMAKE_CONFIGURATION: debian10_iwyu
CTEST_NO_WARNINGS_ALLOWED: 1
CMake_SKIP_INSTALL: 1
.fedora31_tidy: &fedora31_tidy
extends: .fedora31
variables:
CMAKE_CONFIGURATION: fedora31_tidy
CTEST_NO_WARNINGS_ALLOWED: 1
CMake_SKIP_INSTALL: 1
.fedora31_sphinx: &fedora31_sphinx
extends: .fedora31
variables:
CMAKE_CONFIGURATION: fedora31_sphinx
CTEST_NO_WARNINGS_ALLOWED: 1
CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
CMake_SKIP_INSTALL: 1
.fedora31_ninja: &fedora31_ninja
extends: .fedora31
variables:
CMAKE_CONFIGURATION: fedora31_ninja
CTEST_NO_WARNINGS_ALLOWED: 1
.fedora31_makefiles: &fedora31_makefiles
extends: .fedora31
variables:
CMAKE_CONFIGURATION: fedora31_makefiles
CTEST_NO_WARNINGS_ALLOWED: 1
CMAKE_GENERATOR: "Unix Makefiles"
.macos: &macos
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"
# TODO: Factor this out so that each job selects the Xcode version to
# use so that different versions can be tested in a single pipeline.
DEVELOPER_DIR: "/Applications/Xcode-11.5.app/Contents/Developer"
.macos_ninja: &macos_ninja
extends: .macos
variables:
CMAKE_CONFIGURATION: macos_ninja
CTEST_NO_WARNINGS_ALLOWED: 1
.macos_makefiles: &macos_makefiles
extends: .macos
variables:
CMAKE_CONFIGURATION: macos_makefiles
CTEST_NO_WARNINGS_ALLOWED: 1
CMAKE_GENERATOR: "Unix Makefiles"
.windows: &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_ninja: &windows_ninja
extends: .windows
variables:
# Debug and RelWithDebinfo build types use the `/Zi` which results in
# uncacheable compiations.
# https://github.com/mozilla/sccache/issues/242
CMAKE_BUILD_TYPE: Release
CTEST_NO_WARNINGS_ALLOWED: 1
.windows_vs2019_x64_ninja: &windows_vs2019_x64_ninja
extends: .windows_ninja
variables:
CMAKE_CONFIGURATION: windows_vs2019_x64_ninja
VCVARSALL: "${VS160COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
VCVARSPLATFORM: "x64"
VCVARSVERSION: "14.25"
.windows_vs2019_x64: &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.25"
.linux_builder_tags: &linux_builder_tags
tags:
- build
- docker
- linux
.linux_builder_tags_qt: &linux_builder_tags_qt
tags:
- build
- docker
- linux
- linux-3.17 # Needed to be able to load Fedora's Qt libraries.
.macos_builder_tags: &macos_builder_tags
tags:
- cmake # Since this is a bare runner, pin to a project.
- macos
- shell
- xcode-11.5
- nonconcurrent # Use runners without concurrency for fixed GIT_CLONE_PATH.
# TODO: Use "concurrent" and "nonconcurrent" on individual jobs.
.windows_builder_tags: &windows_builder_tags
tags:
- cmake # Since this is a bare runner, pin to a project.
- windows
- shell
- vs2019
- msvc-19.25
- nonconcurrent # Use runners without concurrency for fixed GIT_CLONE_PATH.
# TODO: Use "concurrent" and "nonconcurrent" on individual jobs.
.before_script_unix: &before_script_unix
- .gitlab/ci/cmake.sh
- .gitlab/ci/ninja.sh
- export PATH=$PWD/.gitlab:$PWD/.gitlab/cmake/bin:$PATH
- cmake --version
- ninja --version
.before_script_windows: &before_script_windows
- Invoke-Expression -Command .gitlab/ci/cmake.ps1
- Invoke-Expression -Command .gitlab/ci/ninja.ps1
- $pwdpath = $pwd.Path
- Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab;$pwdpath\.gitlab\cmake\bin;$env:PATH"
- cmake --version
- ninja --version
.cmake_build_unix: &cmake_build_unix
stage: build
script:
- *before_script_unix
- .gitlab/ci/sccache.sh
# Allow the server to already be running.
- "sccache --start-server || :"
- sccache --show-stats
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
- sccache --show-stats
interruptible: true
.cmake_build_windows: &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
- ctest -VV -S .gitlab/ci/ctest_configure.cmake
- ctest -VV -S .gitlab/ci/ctest_build.cmake
- sccache --show-stats
- sccache --stop-server
interruptible: true
.cmake_build_artifacts: &cmake_build_artifacts
artifacts:
expire_in: 1d
paths:
# XXX(globbing): Can be simplified with support from
# https://gitlab.com/gitlab-org/gitlab-runner/issues/4840
- build/CTestTestfile.cmake
- build/*/CTestTestfile.cmake
- build/*/*/CTestTestfile.cmake
- build/*/*/*/CTestTestfile.cmake
- build/*/*/*/*/CTestTestfile.cmake
# Allow CMake to find CMAKE_ROOT.
- build/CMakeFiles/CMakeSourceDir.txt
# Take the install tree.
- build/install/
# We need the main binaries.
- build/bin/
# The cache is needed for the installation test.
- build/CMakeCache.txt
# Test binaries. Eventually these might be better under
# `Source/Tests` or the like.
- build/Tests/EnforceConfig.cmake
- build/Tests/CMakeBuildTest.cmake
- build/Tests/CMakeBuildDoubleProjectTest.cmake
- build/Tests/CMake*/runcompilecommands
- build/Tests/CMake*/runcompilecommands.exe
- build/Tests/CMake*/test*
- build/Tests/CMake*/PseudoMemcheck/valgrind
- build/Tests/CMake*/PseudoMemcheck/purify
- build/Tests/CMake*/PseudoMemcheck/memcheck_fail
- build/Tests/CMake*/PseudoMemcheck/BC
- build/Tests/CMake*/PseudoMemcheck/valgrind.exe
- build/Tests/CMake*/PseudoMemcheck/purify.exe
- build/Tests/CMake*/PseudoMemcheck/memcheck_fail.exe
- build/Tests/CMake*/PseudoMemcheck/BC.exe
- build/Tests/CMake*/PseudoMemcheck/NoLog
- build/Tests/CMake*Lib/*LibTests
- build/Tests/CMake*Lib/*LibTests.exe
- build/Source/kwsys/cmsysTest*
- build/Source/kwsys/testConsoleBufChild.exe
- build/Utilities/cmcurl/curltest
- build/Utilities/cmcurl/curltest.exe
- build/Utilities/KWIML/test/kwiml_test
- build/Utilities/KWIML/test/kwiml_test.exe
- build/Source/kwsys/*cmsysTestDynload.*
- build/Source/kwsys/dynloaddir/cmsysTestDynloadImpl.dll
- build/Source/kwsys/dynloaddir/cmsysTestDynloadUse.dll
# Test directories.
- build/Tests/CTest*
- build/Tests/Find*
- build/Tests/Qt5*
- build/Tests/RunCMake/
- build/Tests/CMakeOnly/
- build/Tests/CMakeTests/
# CTest/CDash information.
- build/Testing/
- build/DartConfiguation.tcl
- build/CTestCustom.cmake
.cmake_test_artifacts: &cmake_test_artifacts
artifacts:
expire_in: 1d
paths:
# Take the install tree.
- build/install/
.cmake_test_unix: &cmake_test_unix
stage: test
script:
- *before_script_unix
- "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake"
interruptible: true
.cmake_test_windows: &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: &cmake_test_windows_external
stage: test-ext
script:
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
interruptible: true
stages:
- build
- test
- test-ext
build:debian10-iwyu:
<<:
- *debian10_iwyu
- *cmake_build_unix
- *linux_builder_tags
rules: *rules_settings
build:fedora31-tidy:
<<:
- *fedora31_tidy
- *cmake_build_unix
- *linux_builder_tags
rules: *rules_settings
build:fedora31-sphinx:
<<:
- *fedora31_sphinx
- *cmake_build_unix
- *linux_builder_tags_qt
rules: *rules_settings
build:fedora31-ninja:
<<:
- *fedora31_ninja
- *cmake_build_unix
- *cmake_build_artifacts
- *linux_builder_tags
rules: *manual_rules_settings
test:fedora31-ninja:
<<:
- *fedora31_ninja
- *cmake_test_unix
- *linux_builder_tags_qt
rules: *rules_settings
dependencies:
- build:fedora31-ninja
needs:
- build:fedora31-ninja
build:fedora31-makefiles:
<<:
- *fedora31_makefiles
- *cmake_build_unix
- *cmake_build_artifacts
- *linux_builder_tags
rules: *manual_rules_settings
test:fedora31-makefiles:
<<:
- *fedora31_makefiles
- *cmake_test_unix
- *linux_builder_tags_qt
rules: *rules_settings
dependencies:
- build:fedora31-makefiles
needs:
- build:fedora31-makefiles
build:macos-ninja:
<<:
- *macos_ninja
- *cmake_build_unix
- *cmake_build_artifacts
- *macos_builder_tags
rules: *manual_rules_settings
test:macos-ninja:
<<:
- *macos_ninja
- *cmake_test_unix
- *macos_builder_tags
rules: *rules_settings
dependencies:
- build:macos-ninja
needs:
- build:macos-ninja
build:macos-makefiles:
<<:
- *macos_makefiles
- *cmake_build_unix
- *cmake_build_artifacts
- *macos_builder_tags
rules: *manual_rules_settings
test:macos-makefiles:
<<:
- *macos_makefiles
- *cmake_test_unix
- *macos_builder_tags
rules: *rules_settings
dependencies:
- build:macos-makefiles
needs:
- build:macos-makefiles
build:windows-vs2019-x64-ninja:
<<:
- *windows_vs2019_x64_ninja
- *cmake_build_windows
- *cmake_build_artifacts
- *windows_builder_tags
rules: *manual_rules_settings
test:windows-vs2019-x64-ninja:
<<:
- *windows_vs2019_x64_ninja
- *cmake_test_windows
- *windows_builder_tags
- *cmake_test_artifacts
rules: *rules_settings
dependencies:
- build:windows-vs2019-x64-ninja
needs:
- build:windows-vs2019-x64-ninja
test:windows-vs2019-x64:
<<:
- *windows_vs2019_x64
- *cmake_test_windows_external
- *windows_builder_tags
rules: *rules_settings
dependencies:
- test:windows-vs2019-x64-ninja
needs:
- test:windows-vs2019-x64-ninja