-
Notifications
You must be signed in to change notification settings - Fork 3
215 lines (180 loc) · 7.92 KB
/
main.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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# Copyright (c) the Dviglo project
# Copyright (c) 2008-2023 the Urho3D project
# License: MIT
name: CI/CD
on:
push:
pull_request:
jobs:
Windows:
# Job будет запущен на виртуальной машине с новейшей версией Windows
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on
# https://github.com/actions/runner-images
runs-on: windows-latest
# Используем матрицу для параллельной сборки разных билдов
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategy
strategy:
fail-fast: false
matrix:
COMPILER: [vs, mingw]
BUILD_TYPE: [debug, release]
# Отображаемое имя job
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idname
name: 🔲-${{ matrix.COMPILER }}-${{ matrix.BUILD_TYPE }}
steps:
# Используем MSYS2 вместо устаревшего MinGW
# https://github.com/urho3d/urho3D/issues/2887
- name: Устанавливаем MinGW
if: matrix.COMPILER == 'mingw'
# https://www.msys2.org/docs/ci/
# https://github.com/msys2/setup-msys2
uses: msys2/setup-msys2@v2
with:
update: true
install: mingw-w64-x86_64-toolchain
- name: Добавляем в PATH путь к MinGW
if: matrix.COMPILER == 'mingw'
shell: bash
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path
run: echo "${RUNNER_TEMP}/msys64/mingw64/bin" >> $GITHUB_PATH
- name: Устанавливаем остальной софт
shell: bash
run: |
choco install --no-progress graphviz.portable
# choco качает Doxygen через раз. Качаем собственную сборку
mkdir $GITHUB_WORKSPACE/programs
cd $GITHUB_WORKSPACE/programs
curl -Lso tmp.zip https://github.com/dviglo-tools/doxygen-builder/raw/main/doxygen_win64.zip && unzip tmp.zip && rm tmp.zip
echo "$GITHUB_WORKSPACE/programs" >> $GITHUB_PATH
echo "Собственная сборка Doxygen скачана в $GITHUB_WORKSPACE/programs"
- name: Скачиваем репозиторий
# https://github.com/actions/checkout
uses: actions/checkout@v4
with:
path: repo # Папка, в которую будет скачан репозиторий
submodules: recursive # Движок тоже качаем
- name: Генерируем проекты
shell: bash
run: |
ARGS=(repo -B build) # Массив аргументов
if [ "${{ matrix.COMPILER }}" == "vs" ]
then
ARGS+=(-G "Visual Studio 17 2022")
else
ARGS+=(-G "MinGW Makefiles")
# Для MinGW тип сбоки задаётся при генерации проектов
ARGS+=(-D CMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }})
fi
ARGS+=(-D DV_CTEST=1)
cmake "${ARGS[@]}"
- name: Компилируем
shell: bash
run: |
ARGS=(--build build) # Массив аргументов
if [ "${{ matrix.COMPILER }}" == "vs" ]
then
# Для Visual Studio тип сбоки задаётся при компиляции проектов
ARGS+=(--config ${{ matrix.BUILD_TYPE }})
fi
cmake "${ARGS[@]}"
# Виртуальная машина ГитХаба может запускать Direct3D-приложения,
# но не может запускать OpenGL-приложения. Поэтому используем
# предкомпилированный Mesa 3D for Windows
- name: Качаем Mesa 3D
shell: bash
run: |
# Качаем и распаковываем Mesa 3D
# https://curl.se/docs/manpage.html
curl.exe --location --output mesa.7z --url https://github.com/pal1000/mesa-dist-win/releases/download/22.2.3/mesa3d-22.2.3-release-msvc.7z
7z x mesa.7z -omesa
rm mesa.7z
# Перемещаем нужные dll в папку result
#mv mesa/x64/dxil.dll build/result # Используется при эмуляции через DirectX
mv mesa/x64/libgallium_wgl.dll build/result
mv mesa/x64/libglapi.dll build/result
mv mesa/x64/opengl32.dll build/result
- name: CTest
shell: bash {0} # Разрешаем перехват ошибок
run: |
ARGS=(--test-dir build --timeout 60) # Массив аргументов
if [ "${{ matrix.COMPILER }}" == "vs" ]
then
# Для Visual Studio нужно указывать тип сборки (конфигурацию)
ARGS+=(-C ${{ matrix.BUILD_TYPE }})
fi
# Настройка для Mesa (не используем DirectX для эмуляции).
# Без этого не проходит тест примера pbr_materials.
# https://docs.mesa3d.org/envvars.html
export LIBGL_ALWAYS_SOFTWARE=true
ctest "${ARGS[@]}"
EXIT_CODE=$? # Код возврата предыдущей команды
if (( $EXIT_CODE != 0 ))
then
echo "$(cat D:/a/minimal_app/minimal_app/build/Testing/Temporary/LastTest.log)" # Показываем содержимое лога
exit $EXIT_CODE
fi
Linux_Native:
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
COMPILER:
- {
ID: gcc,
#C: gcc,
#CXX: g++,
C: gcc-13, # Используем GCC 13, так как 12 не поддерживает std::format
CXX: g++-13,
}
- {
ID: clang,
#C: clang,
#CXX: clang++,
C: clang-16,
CXX: clang++-16,
}
BUILD_TYPE:
- {
ID: dbg,
VALUE: Debug,
}
- {
ID: rel,
VALUE: Release,
}
name: 🐧-${{ matrix.COMPILER.ID }}-${{ matrix.BUILD_TYPE.ID }}
steps:
- name: Скачиваем репозиторий
uses: actions/checkout@v4
with:
path: repo # Папка, в которую будет скачан репозиторий
submodules: recursive # Движок тоже качаем
- name: Устанавливаем зависимости
run: |
sudo apt update
# Без libxrandr-dev не получится узнать список поддерживаемых разрешений
sudo apt install libgl1-mesa-dev libxrandr-dev
# Репозиторий Ubuntu содержит устаревшую версию Doxygen 1.9.1. Качаем собственную сборку
mkdir $HOME/programs
cd $HOME/programs
wget -q -O tmp.zip https://github.com/dviglo-tools/doxygen-builder/raw/main/doxygen_linux64.zip && unzip tmp.zip && rm tmp.zip
echo "$HOME/programs" >> $GITHUB_PATH
- name: Компилируем
run: |
#set -x # Echo commands
echo "Current dir: $PWD"
cmake repo -B build -G "Unix Makefiles" \
-D CMAKE_C_COMPILER=${{ matrix.COMPILER.C }} -D CMAKE_CXX_COMPILER=${{ matrix.COMPILER.CXX }} \
-D CMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE.VALUE }} \
-D DV_CTEST=1
cmake --build build
- name: CTest
shell: bash {0} # Разрешаем перехват ошибок
run: |
xvfb-run ctest --test-dir build --timeout 60
EXIT_CODE=$? # Exit code of the previous command
if (( $EXIT_CODE != 0 ))
then
echo "$(cat /home/runner/work/minimal_app/minimal_app/build/Testing/Temporary/LastTest.log)"
exit $EXIT_CODE
fi