-
Notifications
You must be signed in to change notification settings - Fork 1
155 lines (131 loc) · 4.93 KB
/
ci.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: CI
on:
push:
branches: [main]
release:
types: [published]
branches: [main]
pull_request:
workflow_dispatch:
jobs:
qa:
name: Run pre-commit hooks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pre-commit/[email protected]
build:
name: Build and test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- platform: linux
os: ubuntu-22.04
compiler: gcc-default
is_main: true
- platform: linux
os: ubuntu-22.04
compiler: gcc-latest
is_main: false
- platform: linux
os: ubuntu-22.04
compiler: clang
is_main: false
- platform: windows
os: windows-2022
compiler: msvc
is_main: true
env:
VCPKG_ROOT: "vcpkg"
VCPKG_BINARY_SOURCES: "clear;nuget,GitHub,readwrite"
# Update when there is a new version of gcc available
LATEST_GCC_VERSION: 13
steps:
- uses: actions/checkout@v3
- name: Set up MSVC (Windows)
if: matrix.platform == 'windows'
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Install dependencies (Linux)
if: matrix.platform == 'linux'
run: |
sudo apt update
sudo apt upgrade -y
sudo apt install --no-install-recommends build-essential ninja-build doxygen graphviz
- name: Install latest gcc (Linux)
if: matrix.compiler == 'gcc-latest'
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-$LATEST_GCC_VERSION
# Use environment variable to tell CMake to compile with this version of gcc
echo CXX=g++-$LATEST_GCC_VERSION >> "$GITHUB_ENV"
- name: Install clang (Linux)
if: matrix.platform == 'linux' && matrix.compiler == 'clang'
run: |
sudo apt install --no-install-recommends clang
# Use environment variable to tell CMake to compile with clang
echo CXX=clang++ >> "$GITHUB_ENV"
- name: Install VCPKG
run: |
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh -disableMetrics
- name: Configure HealthGPS (debug)
run: |
cmake --preset=${{ matrix.platform }}-debug -DWARNINGS_AS_ERRORS=ON
- uses: ZedThree/[email protected]
if: matrix.compiler == 'gcc-default'
id: review
with:
build_dir: out/build/linux-debug
# Uploads an artefact containing clang_fixes.json
- uses: ZedThree/clang-tidy-review/[email protected]
if: matrix.compiler == 'gcc-default'
id: upload-review
# If there are any comments, fail the check
- uses: ZedThree/clang-tidy-review/[email protected]
- if: steps.review.outputs.total_comments > 0 && matrix.compiler == 'gcc-default'
run: exit 1
- uses: ammaraskar/gcc-problem-matcher@master
- name: Build HealthGPS (debug)
if: "!cancelled()" # Run this step, even if the previous one fails
run: |
cmake --build --preset=debug-build-${{ matrix.platform }} --target=install
- name: Build HealthGPS (release)
if: "!cancelled()" # Run this step, even if the previous one fails
run: |
cmake --preset=${{ matrix.platform }}-release -DWARNINGS_AS_ERRORS=ON
cmake --build --preset=release-build-${{ matrix.platform }} --target=install
- name: Upload artifacts
if: matrix.is_main
uses: actions/upload-artifact@v3
with:
name: health-gps-${{ matrix.platform }}
path: |
${{ github.workspace }}/out/install/${{ matrix.platform }}-*/*
- name: Run tests
run: ctest --preset=core-test-${{ matrix.platform }}
- name: Zip output folder
if: startsWith(github.ref, 'refs/tags/') && matrix.is_main
working-directory: ${{github.workspace}}/out/install/${{ matrix.platform }}-release/bin/
run: |
mkdir ${{github.workspace}}/artifact
7z a -tzip ${{github.workspace}}/artifact/health_gps_${{ matrix.platform }}.zip *.dll *.Console*
- name: Upload release artifacts
if: startsWith(github.ref, 'refs/tags/') && matrix.is_main
uses: softprops/action-gh-release@v1
with:
files: artifact/health_gps_${{ matrix.platform }}.zip
- name: Doxygen release API deploy
if: matrix.compiler == 'gcc-default' && startsWith(github.ref, 'refs/tags/')
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ${{github.workspace}}/out/build/linux-release/src/html
destination_dir: html
enable_jekyll: true
commit_message: ${{ github.ref_name }} - ${{ github.event.head_commit.message }}