-
Notifications
You must be signed in to change notification settings - Fork 0
298 lines (261 loc) · 10.9 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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
name: build
# TODO: PR일 때 코드 커버리지 댓글 추가
on:
workflow_dispatch:
push:
branches:
- main
# paths: [ 'src/**', 'tests/**', '.github/workflows/dotnet-ci.yml' ]
paths-ignore:
- '**.md'
- '**.pptx'
- '**.png'
#- '.github/workflows/build-docs.yml'
#- 'docs/**'
# pull_request:
# branches: [ main ]
# # 솔루션 테스트 결과 trx 추가
# # - dorny/test-reporter@v1
# # - Error: HttpError: Resource not accessible by integration
# permissions:
# checks: write
# 솔루션 테스트 결과 trx 추가
# - https://github.com/EnricoMi/publish-unit-test-result-action?tab=readme-ov-file#permissions
# 2024-12-22 22:46:33 +0000
# - github.GithubRetry
# - INFO
# - Request POST /repos/hhko/better-code-with-ddd/check-runs failed with 403: Forbidden
permissions:
checks: write
pull-requests: write
jobs:
build:
name: Build
# 빌드 환경 경우의 수 정의
strategy:
matrix:
dotnet-version: [ '9.0.x' ]
configuration: [ Release ]
os: [ ubuntu-24.04 ]
# 빌드 환경 지정
runs-on: ${{ matrix.os }}
#runs-on: ubuntu-22.04
# $GITHUB_OUTPUT
# $GITHUB_STEP_SUMMARY
# 환경 변수
# - 규칙: ${{ env.환경_변수_이름 }}
# - 예제: ${{ env.solution_dir }}
# 예약 변수
# - ${{ github.workspace }}
env:
solution_file: ./Template/Hello.sln
coverage_in_cobertura_files: ./Template/**/*.cobertura.xml
coverage_out_dir: ./Template/.build/coverage/output
coverage_out_cobertura_file: ./Template/.build/coverage/cobertura.xml
#testresult_dirs: ./Template/**/TestResults/**/*
trx_files: ./Template/**/*.trx
steps:
# 형상관리 최신 소스 받기
- name: Checkout
uses: actions/checkout@v4
# Git Commit SHA 얻기
# - Deprecating save-state and set-output commands: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
# - GitHub Actions에서 output 변수의 문법 변경: https://blog.outsider.ne.kr/1651
# - Github Actions and creating a short SHA hash: https://dev.to/hectorleiva/github-actions-and-creating-a-short-sha-hash-8b7
#
# 동적 변수 만들기
# 규칙 1. $GITHUB_OUTPUT은 "steps.vars.outputs"을 지정한다.
# 규칙 2. "키=값" 형식으로 outputs을 정의한다.
# 예. ${{ steps.vars.outputs.short_sha }}
- name: Set Short Git Commit SHA
id: vars
run: |
calculatedSha=$(git rev-parse --short ${{ github.sha }})
echo "short_sha=$calculatedSha" >> $GITHUB_OUTPUT
# .NET SDK 설치
- name: Setup .NET SDK ${{ matrix.dotnet-version }}
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ matrix.dotnet-version }}
# 솔루션 패키지 복원
- name: Restore NuGet Packages
run: |
dotnet restore ${{ env.solution_file }} \
--verbosity q
# 솔루션 빌드
- name: Build
run: |
dotnet build ${{ env.solution_file }} \
--no-restore \
--configuration ${{ matrix.configuration }} \
--verbosity q
# 솔루션 테스트
#
# {테스트 프로젝트}
# └─TestResults
# ├─0ca60e99-32fb-43ac-bbd3-01f5a5ef6886 : XPlat Code Coverage 폴더
# │ └─coverage.cobertura.xml : 코드 커버리지 파일(dotnet-coverage merge 대상)
# ├─{username}_{hostname}_2024-03-14_15_16_30 : trx 로그 폴더
# │ └─In
# │ └─{hostname}
# │ └─coverage.cobertura.xml : 코드 커버리지 파일(사용 안함, Junit 로그 생성시 자동 생성됨)
# └─logs.trx : trx 로그 파일
# 테스트와 코드 커버리지 coverage.cobertura.xml 파일 생성
# - name: Find coverage output path
# run: |
# cp $(find . -name "coverage.cobertura.xml") .
- name: Test
run: |
dotnet test ${{ env.solution_file }} \
--configuration ${{ matrix.configuration }} \
--no-restore \
--no-build \
--collect "XPlat Code Coverage" \
--logger "trx;LogFileName=logs.trx" \
--verbosity q
./Template/.build/coverage/output/Cobertura.xml
# {솔루션}
# └─.build
# └─coverage
# ├─coverage.cobertura.merged.xml
# └─report
# ├─...
# └─SummaryGithub.md
# https://github.com/danielpalme/ReportGenerator-GitHub-Action
#
# 결과물
# - ./Template/.build/coverage/output/Cobertura.xml
# - ./Template/.build/coverage/output/SummaryGithub.md
#
# .dotnet toool 설치 명령
# /usr/share/dotnet/dotnet tool install dotnet-reportgenerator-globaltool \
# --tool-path reportgeneratortool \
# --version 5.4.1 \
# --ignore-failed-sources
#
# reportgenerator 명령
# /home/runner/work/better-code-with-ddd/better-code-with-ddd/reportgeneratortool/reportgenerator \
# -reports:./Template/**/*.cobertura.xml \ <- 입력 파일 N개
# -targetdir:./Template/.build/coverage/output \ <- 출력 경로
# -reporttypes:Cobertura;MarkdownSummaryGithub \ <- 출력 타입
# -sourcedirs: \
# -historydir: \
# -plugins: \
# -assemblyfilters:+* \
# -classfilters:+* \
# -filefilters:+* \
# -riskhotspotassemblyfilters:+* \
# -riskhotspotclassfilters:+* \
# -verbosity:Info \
# -title:Code Coverage \ <- 제목
# -tag:2_12382597103
# -license:
- name: Generate Coverage Reports
uses: danielpalme/[email protected]
with:
reports: '${{ env.coverage_in_cobertura_files }}'
targetdir: '${{ env.coverage_out_dir }}'
reporttypes: 'Cobertura;MarkdownSummaryGithub'
verbosity: "Info"
title: "Code Coverage"
tag: "${{ github.run_number }}_${{ github.run_id }}"
customSettings: "" # https://github.com/danielpalme/ReportGenerator/wiki/Settings.
toolpath: "reportgeneratortool" # dotnet tool.
- name: Publish Coverage Reports in Build Summary
run: cat "${{ env.coverage_out_dir }}/SummaryGithub.md" >> $GITHUB_STEP_SUMMARY
shell: bash
# https://github.com/EnricoMi/publish-unit-test-result-action?tab=readme-ov-file#permissions
# GitHub Summary
# Test Results
# 4 files 4 suites 1s ⏱️
# 22 tests 22 ✅ 0 💤 0 ❌
# 23 runs 23 ✅ 0 💤 0 ❌
- name: Publish Test Results
uses: EnricoMi/[email protected]
if: always()
with:
files: |
${{ env.trx_files }}
- name: 출력
run: |
echo "출력"
pwd
echo "./.build 모든 파일"
find ./.build
# # https://github.com/irongut/CodeCoverageSummary
# - name: Publish Code Coverage Report
# uses: irongut/[email protected]
# with:
# filename: ${{ env.coverage_out_cobertura_file }}
# badge: true
# fail_below_min: false # just informative for now
# format: markdown
# hide_branch_rate: false
# hide_complexity: false
# indicators: true
# output: both
# #thresholds: "10 30"
# # 첨부 파일
# - name: Upload Test Results
# uses: actions/upload-artifact@v4
# with:
# name: Test-Results
# path: ${{ env.testresult_dirs }}
# retention-days: 5
# # 첨부 파일
# - name: Upload Combined Coverage XML
# uses: actions/upload-artifact@v4
# with:
# name: coverage
# path: ${{ env.coverage_out_cobertura_file }}
# retention-days: 5
# # 솔루션 테스트 상세 보고서 생성
# - name: Create test detail report
# uses: dorny/test-reporter@v1
# if: always()
# with:
# name: Test Detail Report
# path: "tests/**/logs.trx"
# reporter: dotnet-trx
# # dotnet-coverage 도구 설치
# - name: Install dotnet-coverage tool
# run: dotnet tool install -g dotnet-coverage --version 17.9.6
# # 솔루션 코드 커버리지 폴더 생성
# - name: Create coverage folder
# run: mkdir -p ${{ env.coverage_dir }}
# # 솔루션 코드 커버지리 병합
# # N개 coverage.cobertura.xml 파일을 1개 coverage.cobertura.merged.xml로 통합
# - name: Convert .coverage.xml to .cobertura.merged.xml
# run: |
# dotnet-coverage merge "**/TestResults/*/*.cobertura.xml" \
# -f cobertura \
# -o ${{ env.coverage_path }}
# 솔루션 코드 커버리지 보고서 생성
# {솔루션}
# └─.results
# └─coverage
# ├─coverage.cobertura.merged.xml
# └─report
# ├─...
# └─SummaryGithub.md
# - name: Create coverage markdown file
# uses: danielpalme/[email protected]
# with:
# reports: '${{ env.coverage_path }}'
# targetdir: '${{ env.coverage_dir }}/report'
# reporttypes: 'MarkdownSummaryGithub;Html'
# # 솔루션 코드 커버리지 보고서 Summary 업로드
# - name: Upload coverage markdown into github actions summary
# run: cat ${{ env.coverage_dir }}/report/SummaryGithub.md >> $GITHUB_STEP_SUMMARY
# # 솔루션 테스트 결과 Artifacts 업로드
# - name: Upload coverage files into github actions artifacts
# uses: actions/upload-artifact@v4
# with:
# name: coverage_${{ matrix.dotnet-version }}_sha-${{ steps.vars.outputs.short_sha }}
# path: ${{ env.coverage_dir }}/report
# # 솔루션 코드 커버리지 전송(Codecov)
# - name: Upload coverage reports to Codecov
# uses: codecov/[email protected]
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
# slug: hhko/ArchDdd