-
Notifications
You must be signed in to change notification settings - Fork 38
159 lines (131 loc) · 3.63 KB
/
ci.yml
File metadata and controls
159 lines (131 loc) · 3.63 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
env:
DEVELOPER_DIR: /Applications/Xcode_16.0.app/Contents/Developer
jobs:
lint:
name: SwiftLint
runs-on: macos-15
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install SwiftLint
run: brew install swiftlint
- name: Run SwiftLint
run: |
cd Recap
swiftlint --strict --reporter github-actions-logging
build:
name: Build
runs-on: macos-15
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.0'
- name: Cache Swift Package Manager
uses: actions/cache@v4
with:
path: |
~/Library/Developer/Xcode/DerivedData
.build
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
- name: Resolve Dependencies
run: |
cd Recap
swift package resolve
- name: Build Debug
run: |
cd Recap
swift build -c debug
- name: Build Release
run: |
cd Recap
swift build -c release
test:
name: Test
runs-on: macos-15
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.0'
- name: Cache Swift Package Manager
uses: actions/cache@v4
with:
path: |
~/Library/Developer/Xcode/DerivedData
.build
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
- name: Run Tests with Coverage
run: |
cd Recap
swift test --enable-code-coverage --parallel
- name: Generate Test Report
run: |
cd Recap
swift test --parallel --xunit-output=test-results.xml || true
- name: Generate Coverage Report
run: |
cd Recap
xcrun llvm-cov export \
.build/debug/RecapPackageTests.xctest/Contents/MacOS/RecapPackageTests \
-instr-profile .build/debug/codecov/default.profdata \
-format=lcov \
-ignore-filename-regex=".build|Tests|Mocks" \
> coverage.lcov || true
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: test-results.xml
- name: Upload Coverage Reports
uses: codecov/codecov-action@v5
with:
file: ./coverage.lcov
flags: unittests
name: recap-coverage
fail_ci_if_error: false
- name: Publish Test Report
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: 'test-results.xml'
check_name: 'Test Results'
fail_on_failure: true
check-generated-mocks:
name: Check Generated Mocks
runs-on: macos-15
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.0'
- name: Build to Generate Mocks
run: |
cd Recap
swift build
- name: Check for Uncommitted Mock Changes
run: |
if [[ -n $(git status --porcelain) ]]; then
echo "Generated mocks are not committed. Please build locally and commit the generated mock files."
git status --porcelain
exit 1
fi