-
Notifications
You must be signed in to change notification settings - Fork 78
205 lines (172 loc) · 7.17 KB
/
build.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
name: build
on:
push:
branches: ["master", "release/*", "feature/*"]
pull_request_target:
branches: ["master", "devops/*"]
workflow_dispatch:
permissions:
contents: read
id-token: write # needed by dorny/test-reporter
checks: write # needed by dorny/test-reporter
env:
SOLUTION_NAME: SlimMessageBus.sln
SOLUTION_CONFIGURATION: Release
jobs:
build:
runs-on: ubuntu-latest
# allow to run concurrently within separate branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps:
- name: PR - Checkout
if: github.event_name == 'pull_request_target'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout
if: github.event_name != 'pull_request_target'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
cache: false
- name: Restore dependencies
run: dotnet restore $SOLUTION_NAME
working-directory: ./src
- name: SonarCloud - Setup Java17
#if: github.event_name == 'pull_request_target'
uses: actions/setup-java@v4
with:
distribution: "adopt"
java-version: "17"
- name: SonarCloud - Install SonarCloud scanner
#if: github.event_name == 'pull_request_target'
run: dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner
- name: SonarCloud - SonarScanner Begin
#if: github.event_name == 'pull_request_target'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
params=""
pr_number="${{ github.event.pull_request.number }}"
if [[ -n "$pr_number" ]]; then
params="/d:sonar.pullrequest.key=${pr_number}"
fi
../.sonar/scanner/dotnet-sonarscanner begin /k:"zarusz_SlimMessageBus" /o:"zarusz" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" /d:sonar.exclusions="Samples/**/*,Tests/**/*" $params
working-directory: ./src
- name: Build
run: |
dotnet build $SOLUTION_NAME \
--configuration $SOLUTION_CONFIGURATION \
--no-restore
working-directory: ./src
- name: Unit Tests
run: |
dotnet test $SOLUTION_NAME \
--configuration $SOLUTION_CONFIGURATION \
--no-build \
--verbosity normal \
--logger "trx;LogFilePrefix=Unit" \
--collect:"XPlat Code Coverage;Format=opencover" \
--filter "Category!=Integration"
working-directory: ./src
- name: Integration Tests - Infrastructure
run: |
docker compose -f src/Infrastructure/docker-compose.yml up --detach --force-recreate -V
- name: Integration Tests
run: |
dotnet test $SOLUTION_NAME \
--configuration $SOLUTION_CONFIGURATION \
--no-build \
--verbosity normal \
--logger "trx;LogFilePrefix=Integration" \
--collect:"XPlat Code Coverage;Format=opencover" \
--filter "Category=Integration"
working-directory: ./src
env:
# Connects to the Azure cloud
azure_servicebus_connectionstring: ${{ secrets.azure_servicebus_connectionstring }}
azure_eventhub_connectionstring: ${{ secrets.azure_eventhub_connectionstring }}
azure_storagecontainer_connectionstring: ${{ secrets.azure_storagecontainer_connectionstring }}
# Connects to AWS cloud
amazon_access_key: ${{ secrets.amazon_access_key }}
amazon_secret_access_key: ${{ secrets.amazon_secret_access_key }}
_kafka_brokers: ${{ secrets.kafka_brokers }}
_kafka_username: ${{ secrets.kafka_username }}
_kafka_password: ${{ secrets.kafka_password }}
_kafka_secure: ${{ secrets.kafka_secure }}
_mqtt_server: ${{ secrets.mqtt_server }}
_mqtt_port: ${{ secrets.mqtt_port }}
_mqtt_username: ${{ secrets.mqtt_username }}
_mqtt_password: ${{ secrets.mqtt_password }}
_mqtt_secure: ${{ secrets.mqtt_secure }}
_rabbitmq_connectionstring: ${{ secrets.rabbitmq_connectionstring }}
_redis_connectionstring: ${{ secrets.redis_connectionstring }}
sqlserver_connectionstring: ${{ secrets.sqlserver_connectionstring }}
# Connects to the local Test Containers
kafka_brokers: localhost:9092
kafka_username: user
kafka_password: password
kafka_secure: false
mqtt_server: localhost
mqtt_port: 1883
mqtt_username: "(empty)"
mqtt_password: "(empty)"
mqtt_secure: false
rabbitmq_connectionstring: amqp://localhost
redis_connectionstring: localhost:6379
_sqlserver_connectionstring: "Server=localhost;Initial Catalog=SlimMessageBus_Outbox;User ID=sa;Password=SuperSecretP@55word;TrustServerCertificate=true;MultipleActiveResultSets=true;"
nats_endpoint: "nats://localhost:4222"
- name: SonarCloud - SonarScanner End
#if: github.event_name == 'pull_request_target'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ../.sonar/scanner/dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
working-directory: ./src
- name: Collect test results and rename
if: success() || failure()
run: |
mkdir -p ./test-results
# Find all the .trx files recursively and copy them to the test-results folder
# Use the grandparent directory name and filename
find ./src -name "*.trx" | while read file; do
# The grand parent will correspond to the csproj name e.g. SlimMessageBus.Host.Tests
grandparent_dir=$(basename $(dirname $(dirname "$file")))
filename=$(basename "$file")
# Copy the file and use grandparent_dir and index as the new filename
cp "$file" "./test-results/${grandparent_dir}_${filename}"
done
- name: Upload Test Results
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: test-results
path: ./test-results
- name: Publish Test Results
if: success() || failure()
uses: dorny/test-reporter@v1
with:
name: .NET Tests
path: ./test-results/*.trx
reporter: dotnet-trx
fail-on-error: true
- name: Copy NuGet packages
shell: bash
run: |
mkdir ./dist
find -name "*.nupkg" -exec cp {} ./dist \;
find -name "*.snupkg" -exec cp {} ./dist \;
find ./dist
- name: Archive NuGet packages
uses: actions/upload-artifact@v4
with:
name: nuget-packages
path: "./dist"