-
Notifications
You must be signed in to change notification settings - Fork 4
219 lines (180 loc) · 8.01 KB
/
pipeline.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
216
217
218
219
name: Build Pipeline
on:
push:
branches:
- master
- 'dependabot/**'
- 'releases/**'
- 'feat/**'
- 'feature/**'
env:
PROJECT_NAME: Saucery
SOLN_FILE: Saucery.sln # full path to your solution file
UT_DIR: Saucery.Core.Tests
NUNIT_INT_DIR: Merlin.NUnit
XUNIT_INT_DIR: Merlin.XUnit
UT_PROJECT: Saucery.Core.Tests/Saucery.Core.Tests.csproj # full path to your unit test project file
M_NUNIT_PROJECT: Merlin.NUnit/Merlin.NUnit.csproj # full path to nunit internal integration test project file
EM_NUNIT_PROJECT: ExternalMerlin.NUnit/ExternalMerlin.NUnit.csproj # full path to nunit external integration test project file
M_XUNIT_PROJECT: Merlin.XUnit/Merlin.XUnit.csproj # full path to xunit internal integration test project file
EM_XUNIT_PROJECT: ExternalMerlin.XUnit/ExternalMerlin.XUnit.csproj # full path to xunit external integration test project file
SAUCE_USER_NAME: ${{ secrets.SAUCE_USER_NAME }}
SAUCE_API_KEY: ${{ secrets.SAUCE_API_KEY }}
CONFIG: Release
APP_PACKAGE_PATH: 'published' # set this to the path to your web app project, defaults to the repository root
COVERAGE_FORMAT: opencover
UNIT_COVERAGE_FILENAME: opencover.unit.xml
NUNIT_INTEGRATION_COVERAGE_FILENAME: opencover.nunit.integration.xml
XUNIT_INTEGRATION_COVERAGE_FILENAME: opencover.xunit.integration.xml
COVERAGE_THRESHOLD: 80
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
# Check for latest at link at .NET 8 download page (https://dotnet.microsoft.com/download/dotnet/8.0)
dotnet-version: 8.0.x
- name: Compile solution
run: dotnet build -c ${{ env.CONFIG }}
## Run code analysis for all projects/solutions, such that code analysis violations break the build.
#- name: Run .NET Code Analysis
# uses: dotnet/code-analysis@v1
# id: code-analysis
# with:
# build-breaking: true
- name: Run Unit Tests
uses: b3b00/[email protected]
with:
testProject: ${{ env.UT_PROJECT }}
output: ${{ env.UNIT_COVERAGE_FILENAME }}
outputFormat: ${{ env.COVERAGE_FORMAT }}
threshold: ${{ env.COVERAGE_THRESHOLD }}
excludes: '[Saucery.Core.Tests]Tests.*,[Saucery]AutoGeneratedProgram,[Saucery]Saucery.Selenium.*,[Saucery]Saucery.Driver.SauceryAndroid*,[Saucery]Saucery.Driver.SauceryIOS*,[Saucery]Saucery.Tests.SauceryAndroid*,[Saucery]Saucery.Tests.SauceryIOS*,[Saucery]Saucery.DataSources.EnvCompositor*,[Saucery]Saucery.Util.WebControl'
- name: Publish Artifacts
uses: actions/upload-artifact@v3
with:
name: unit-test-results
path: ${{ env.UT_DIR }}/${{ env.UNIT_COVERAGE_FILENAME }}
xunit-integration-tests:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
# Check for latest at link at .NET 8 download page (https://dotnet.microsoft.com/download/dotnet/8.0)
dotnet-version: 8.0.x
- name: Compile solution
run: dotnet build -c ${{ env.CONFIG }}
- name: Run XUnit Integration Tests
uses: b3b00/[email protected]
with:
testProject: ${{ env.M_XUNIT_PROJECT }}
output: ${{ env.XUNIT_INTEGRATION_COVERAGE_FILENAME }}
outputFormat: ${{ env.COVERAGE_FORMAT }}
#threshold: ${{ env.COVERAGE_THRESHOLD }}
excludes: '[Merlin.XUnit]Tests.*'
- name: Publish Artifacts
uses: actions/upload-artifact@v3
with:
name: xunit-integration-test-results
path: ${{ env.XUNIT_INT_DIR }}/${{ env.XUNIT_INTEGRATION_COVERAGE_FILENAME }}
nunit-integration-tests:
runs-on: ubuntu-latest
needs: xunit-integration-tests
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
# Check for latest at link at .NET 8 download page (https://dotnet.microsoft.com/download/dotnet/8.0)
dotnet-version: 8.0.x
- name: Compile solution
run: dotnet build -c ${{ env.CONFIG }}
- name: Run NUnit Integration Tests
uses: b3b00/[email protected]
with:
testProject: ${{ env.M_NUNIT_PROJECT }}
output: ${{ env.NUNIT_INTEGRATION_COVERAGE_FILENAME }}
outputFormat: ${{ env.COVERAGE_FORMAT }}
#threshold: ${{ env.COVERAGE_THRESHOLD }}
excludes: '[Merlin.NUnit]Tests.*'
- name: Publish Artifacts
uses: actions/upload-artifact@v3
with:
name: nunit-integration-test-results
path: ${{ env.NUNIT_INT_DIR }}/${{ env.NUNIT_INTEGRATION_COVERAGE_FILENAME }}
xunit-external-tests:
runs-on: ubuntu-latest
needs: nunit-integration-tests
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
# Check for latest at link at .NET 8 download page (https://dotnet.microsoft.com/download/dotnet/8.0)
dotnet-version: 8.0.x
- name: Compile solution
run: dotnet build -c ${{ env.CONFIG }}
- name: Run External XUnit Integration Tests
run: dotnet test -c ${{ env.CONFIG }} ${{ env.EM_XUNIT_PROJECT }}
nunit-external-tests:
runs-on: ubuntu-latest
needs: nunit-integration-tests
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
# Check for latest at link at .NET 8 download page (https://dotnet.microsoft.com/download/dotnet/8.0)
dotnet-version: 8.0.x
- name: Compile solution
run: dotnet build -c ${{ env.CONFIG }}
- name: Run External NUnit Integration Tests
run: dotnet test -c ${{ env.CONFIG }} ${{ env.EM_NUNIT_PROJECT }}
generate-report:
runs-on: ubuntu-latest
needs: [build, xunit-integration-tests, nunit-integration-tests, xunit-external-tests, nunit-external-tests]
steps:
- name: Download unit-test results
uses: actions/download-artifact@v3
with:
name: unit-test-results
- name: Download xunit-integration-test results
uses: actions/download-artifact@v3
with:
name: xunit-integration-test-results
- name: Download nunit-integration-test results
uses: actions/download-artifact@v3
with:
name: nunit-integration-test-results
- name: Display structure of downloaded files
run: ls -R
- name: ReportGenerator
uses: danielpalme/[email protected]
with:
reports: ${{ env.UNIT_COVERAGE_FILENAME }};${{ env.NUNIT_INTEGRATION_COVERAGE_FILENAME }};${{ env.XUNIT_INTEGRATION_COVERAGE_FILENAME }} # REQUIRED # The coverage reports that should be parsed (separated by semicolon). Globbing is supported.
targetdir: 'coveragereport' # REQUIRED # The directory where the generated report should be saved.
reporttypes: 'HtmlInline;Cobertura' # The output formats and scope (separated by semicolon) Values: Badges, Clover, Cobertura, CsvSummary, Html, HtmlChart, HtmlInline, HtmlInline_AzurePipelines, HtmlInline_AzurePipelines_Dark, HtmlSummary, JsonSummary, Latex, LatexSummary, lcov, MarkdownSummary, MHtml, PngChart, SonarQube, TeamCitySummary, TextSummary, Xml, XmlSummary
- name: Upload coverage report artifact
uses: actions/upload-artifact@v3
with:
name: CoverageReport # Artifact name
path: coveragereport # Directory containing files to upload
# Use always() to always run this step to publish test results when there are test failures
if: ${{ always() }}
- name: Bump version and push tag
if: ${{ (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master') && success() }}
id: tag_version
uses: mathieudutour/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}