-
Notifications
You must be signed in to change notification settings - Fork 8
144 lines (131 loc) · 4.73 KB
/
cmake.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
name: Build [CMake]
on:
workflow_dispatch:
inputs:
analyze-codeql:
required: true
default: true
type: boolean
description: 'Peform static analysis with CodeQL'
build-arm64:
required: false
default: false
type: boolean
description: 'Build ARM64 architecture'
install:
required: true
default: false
type: boolean
description: 'Invoke CMake install for the project'
package:
required: true
default: false
type: boolean
description: 'Invoke CMake CPack for the project'
publish-artifacts:
required: true
default: false
type: boolean
description: 'Publish build artifacts'
build-types:
required: true
# Note the string here contains a JSON array. This is later converted to an array using fromJson.
default: "[ 'Debug' ]"
type: string
description: 'The CMake build types (CMAKE_BUILD_TYPE) to run (must be encoded as a JSON array)'
preset-name:
required: true
default: 'cicd'
type: choice
options:
- 'dev'
- 'dev-driver'
- 'vcpkg-dev'
- 'vcpkg-release'
- 'cicd'
- 'official-release'
description: 'The name of the preset to use for all CMake operations (configure, build, test, install, package)'
pull_request:
workflow_call:
inputs:
build-types:
required: false
# Note the string here contains a JSON array. This is later converted to an array using fromJson.
default: "[ 'Debug' ]"
type: string
description: 'The CMake build type (CMAKE_BUILD_TYPE) to run.'
analyze-codeql:
required: false
default: true
type: boolean
build-arm64:
required: false
default: false
type: boolean
install:
required: false
default: false
type: boolean
package:
required: false
default: false
type: boolean
publish-artifacts:
required: false
default: false
type: boolean
preset-name:
required: false
default: 'cicd'
type: string
jobs:
build:
name: cmake build
strategy:
fail-fast: false
matrix:
config:
- { os: windows-2022, generator: 'Visual Studio 17 2022' }
- { os: windows-2022, generator: 'Visual Studio 17 2022', arch: 'ARM64' }
- { os: ubuntu-22.04, generator: 'Ninja Multi-Config' }
build-type: ${{ fromJson(inputs.build-types) }}
runs-on: ${{ matrix.config.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install build tools
if: matrix.config.os == 'ubuntu-22.04'
run: sudo apt-get install ninja-build
- name: Initialize CodeQL
if: inputs.analyze-codeql == true
uses: github/codeql-action/init@v2
with:
languages: 'cpp'
- name: CMake Configure
if: ${{ ! matrix.config.arch }}
run: cmake --preset ${{ inputs.preset-name }} --fresh -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -G"${{ matrix.config.generator }}"
- name: CMake Configure Cross-Compile ${{ matrix.config.arch }}
if: ${{ matrix.config.arch }}
run: cmake --preset ${{ inputs.preset-name }} --fresh -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DNOF_DISABLE_TESTS=TRUE -G"${{ matrix.config.generator }}" -A ${{ matrix.config.arch }}
- name: CMake Build
run: cmake --build --preset ${{ inputs.preset-name }} --config ${{ matrix.build-type }}
- name: CMake Test (ctest)
if: ${{ ! matrix.config.arch }}
run: ctest --preset ${{ inputs.preset-name }} -C ${{ matrix.build-type }}
- name: CMake Install
if: inputs.install == true
run: cmake --build --preset ${{ inputs.preset-name }} --target install --config ${{ matrix.build-type }}
- name: CMake Package (cpack)
if: inputs.package == true
run: cpack --preset ${{ inputs.preset-name }} -C ${{ matrix.build-type }}
- name: Perform CodeQL Analysis
if: inputs.analyze-codeql == true
uses: github/codeql-action/analyze@v2
- name: Publish Artifacts
if: inputs.publish-artifacts == true
uses: actions/upload-artifact@v3
with:
name: release-package-${{ runner.os }}-${{ matrix.build-type }}-${{ matrix.config.arch != '' && matrix.config.arch || runner.arch }}
path: |
${{ github.workspace }}/out/package/${{ inputs.preset-name }}/*.tar.*
${{ github.workspace }}/out/package/${{ inputs.preset-name }}/*.zip