-
Notifications
You must be signed in to change notification settings - Fork 0
155 lines (135 loc) · 6.95 KB
/
Test.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: Test
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
run_tests:
strategy:
matrix:
build_type: [ Release, Debug ]
# Only Windows builds are enabled, because preinstalled CLang and GCC version on both ubuntu-latest and
# macos-latest images do not fully support transparent unordered_multiset operations and concepts library.
os: [ windows-2022, ubuntu-22.04 ]
# Native toolchain is native compiler for the platform: MSVC for Windows and GCC for Ubuntu.
toolchain: [ CLang, Native ]
include:
# As of March 2022, there is a strange problem with llvm coverage on clang-cl 13.0 from VS 2022:
# llvm-profdata emits 'unsupported instrumentation profile format version' error for profraw's, emitted
# by programs, compiled using same clang-cl package.
# Therefore, we are using separate VS 2019 build to check coverage.
- build_type: Debug
os: windows-2019
toolchain: CLang
# Adding to compensate the exclusion below.
- build_type: Release
os: windows-2019
toolchain: CLang
exclude:
# As of June 2023, there is a strange issue with compiling on CLang on VS 2022: either build scripts are
# generated incorrectly or there is a strange problem with CLang on CI that cannot be reproduced locally.
# Therefore, we're temporary disabling builds on CLang on VS 2022 in favor of VS 2019.
- build_type: Debug
os: windows-2022
toolchain: CLang
- build_type: Release
os: windows-2022
toolchain: CLang
defaults:
run:
shell: pwsh
env:
BUILD_DIRECTORY: ${{github.workspace}}/Build
runs-on: ${{matrix.os}}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: recursive
- name: Setup dependencies
# Currently, things that use PhysX aren't supported on Ubuntu.
if: matrix.os != 'ubuntu-22.04'
uses: ./.github/actions/SetupDependencies
with:
platform: ${{runner.os}}
build_type: ${{matrix.build_type}}
- name: Install Ninja
if: matrix.os == 'ubuntu-22.04'
run: sudo apt-get update && sudo apt-get install ninja-build
- name: Install OpenGL
if: matrix.os == 'ubuntu-22.04'
run: sudo apt-get update && sudo apt-get install libgl1-mesa-dev
- name: Create build directory
run: cmake -E make_directory ${{env.BUILD_DIRECTORY}}
# We have separate build for coverage check, therefore we have separate configuration step for it here.
# On Windows images there is a separate LLVM installation that is already in Env:Path.
# We want to use CLangCL for coverage, therefore we must delete this installation from path to avoid mismatches.
- name: Configure coverage check
if: matrix.build_type == 'Debug' && matrix.os == 'windows-2019' && matrix.toolchain == 'CLang'
run: |
echo "ENABLE_COVERAGE=yes" >> $Env:GITHUB_ENV
echo "CMAKE_ENABLE_COVERAGE=-DEMERGENCE_ENABLE_COVERAGE=ON" >> $Env:GITHUB_ENV
echo "CMAKE_FALLBACK_TO_CXX20=-DEMERGENCE_FALLBACK_TO_CXX_20=ON" >> $Env:GITHUB_ENV
echo "CMAKE_DISABLE_DIRECTX=-DSDL_DIRECTX=OFF" >> $Env:GITHUB_ENV
echo "LLVM_PROFILE_FILE=%m.profraw" >> $Env:GITHUB_ENV
echo "CMAKE_GENERATOR=-G `"Visual Studio 16 2019`" -A x64 -T clangcl" >> $Env:GITHUB_ENV
$PathWithoutLLVM13 = $Env:Path.Replace("C:\Program Files\LLVM\bin", "")
echo "PATH=$PathWithoutLLVM13" >> $Env:GITHUB_ENV
# We disable DirectX here as SDL with it doesn't compile on VS 2019 CLang for some reason (only on CI).
- name: Windows - VS 2019 - Select CLang toolset
if: matrix.build_type == 'Release' && matrix.os == 'windows-2019' && matrix.toolchain == 'CLang'
run: |
echo "CMAKE_FALLBACK_TO_CXX20=-DEMERGENCE_FALLBACK_TO_CXX_20=ON" >> $Env:GITHUB_ENV
echo "CMAKE_GENERATOR=-G `"Visual Studio 16 2019`" -A x64 -T clangcl" >> $Env:GITHUB_ENV
echo "CMAKE_DISABLE_DIRECTX=-DSDL_DIRECTX=OFF" >> $Env:GITHUB_ENV
- name: Windows - Select CLang toolset
if: matrix.os == 'windows-2022' && matrix.toolchain == 'CLang'
run: echo "CMAKE_GENERATOR=-G `"Visual Studio 17 2022`" -A x64 -T clangcl" >> $Env:GITHUB_ENV
- name: Windows - Select MSVC 143 toolset
if: matrix.os == 'windows-2022' && matrix.toolchain == 'Native'
run: echo "CMAKE_GENERATOR=-G `"Visual Studio 17 2022`" -A x64 -T v143" >> $Env:GITHUB_ENV
- name: Ubuntu - Select GCC 11 toolset
if: matrix.os == 'ubuntu-22.04' && matrix.toolchain == 'Native'
run: |
echo "CC=gcc" >> $Env:GITHUB_ENV
echo "CXX=g++" >> $Env:GITHUB_ENV
echo "CMAKE_GENERATOR=-G `"Ninja Multi-Config`"" >> $Env:GITHUB_ENV
echo "CMAKE_FALLBACK_TO_CXX20=-DEMERGENCE_FALLBACK_TO_CXX_20=ON" >> $Env:GITHUB_ENV
- name: Ubuntu - Select CLang 14 toolset
if: matrix.os == 'ubuntu-22.04' && matrix.toolchain == 'CLang'
run: |
echo "CC=clang-14" >> $Env:GITHUB_ENV
echo "CXX=clang-14" >> $Env:GITHUB_ENV
echo "CMAKE_GENERATOR=-G `"Ninja Multi-Config`"" >> $Env:GITHUB_ENV
echo "CMAKE_FALLBACK_TO_CXX20=-DEMERGENCE_FALLBACK_TO_CXX_20=ON" >> $Env:GITHUB_ENV
- name: Configure
working-directory: ${{env.BUILD_DIRECTORY}}
run: >
cmake ${{github.workspace}} ${{env.CMAKE_GENERATOR}} ${{env.CMAKE_ENABLE_COVERAGE}}
${{env.CMAKE_FALLBACK_TO_CXX20}} ${{env.CMAKE_DISABLE_DIRECTX}} -DEMERGENCE_INCLUDE_GPU_DEPENDANT_TESTS=OFF
-DCMAKE_BUILD_TYPE=${{matrix.build_type}}
- name: Build
working-directory: ${{env.BUILD_DIRECTORY}}
run: cmake --build . --target EmergenceTests --config ${{matrix.build_type}} -j 2
- name: Test
working-directory: ${{env.BUILD_DIRECTORY}}
run: ctest -C ${{matrix.build_type}}
- name: Collect and check coverage data
if: env.ENABLE_COVERAGE == 'yes'
# We use CMD instead of PowerShell because of convenient && operator.
shell: cmd
run: >
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" &&
powershell .\Script\Coverage\CollectCLangCoverage.ps1 ${{env.BUILD_DIRECTORY}} ${{matrix.build_type}} &&
powershell .\Script\Coverage\CheckCLangCoverage.ps1 ${{env.BUILD_DIRECTORY}}
- name: Upload test and coverage results
if: env.ENABLE_COVERAGE == 'yes' && (${{ success() }} || ${{ failure() }})
uses: actions/upload-artifact@v2
with:
name: Test and coverage results (${{matrix.build_type}}, ${{matrix.os}}, ${{matrix.toolchain}})
path: |
${{env.BUILD_DIRECTORY}}/Coverage/Temporary
${{env.BUILD_DIRECTORY}}/Testing/Temporary