-
Notifications
You must be signed in to change notification settings - Fork 0
136 lines (108 loc) · 3.6 KB
/
ci.yml
File metadata and controls
136 lines (108 loc) · 3.6 KB
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
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
env:
DOTNET_VERSION: "9.0"
DOTNET_CLI_TELEMETRY_OPTOUT: 1
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
jobs:
build-and-test:
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Install CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: "3.20"
- name: Install cpp (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y gcc
- name: Install cpp (macOS)
if: runner.os == 'macOS'
run: xcode-select --install || true
- name: Install cpp (Windows)
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
- name: Restore dotnet tools
run: dotnet tool restore
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/*.props', '**/*.targets') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Configure CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Process grammar files
run: cmake --build build --target process
- name: Build solution
run: cmake --build build --target build
- name: Check code formatting
run: |
cmake --build build --target format
git diff --exit-code || (echo "Code is not properly formatted. Please run 'cmake --build build --target format'" && exit 1)
- name: Run tests
run: cmake --build build --target test-ci
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-${{ matrix.os }}
path: |
**/TestResults/**/*.xml
**/TestResults/**/*.trx
- name: Generate code coverage (Linux only)
if: matrix.os == 'ubuntu-latest'
run: |
cmake --build build --target test-collect-coverage
- name: Upload coverage to Codecov (Linux only)
if: matrix.os == 'ubuntu-latest'
uses: codecov/codecov-action@v4
with:
directory: OpenLanguage.Test/TestResults/coverage
fail_ci_if_error: false
verbose: true
package:
needs: build-and-test
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Install CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: "3.20"
- name: Install cpp
run: sudo apt-get update && sudo apt-get install -y gcc
- name: Restore dotnet tools
run: dotnet tool restore
- name: Configure CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build and package
run: |
cmake --build build --target process
cmake --build build --target build
cmake --build build --target pack
- name: Upload NuGet packages
uses: actions/upload-artifact@v4
with:
name: nuget-packages
path: build/packages/*.nupkg
retention-days: 30