-
Notifications
You must be signed in to change notification settings - Fork 0
240 lines (219 loc) · 9.81 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
name: build
on:
workflow_dispatch:
push:
branches:
- main
# paths: [ 'src/**', 'tests/**', '.github/workflows/dotnet-ci.yml' ]
paths-ignore:
- '**.md'
- '**.pptx'
- '**.png'
- '**.ps1'
#- '.github/workflows/build-docs.yml'
# pull_request:
# branches: [ main ]
# 1. publish-unit-test-result-action: 솔루션 테스트 결과 trx 추가: Summary
# - https://github.com/EnricoMi/publish-unit-test-result-action?tab=readme-ov-file#permissions
# 2. dorny/test-reporter: 솔루션 테스트 메서드 목록
# - https://github.com/dorny/test-reporter
permissions:
checks: write
pull-requests: write
# contents: read
# actions: read
jobs:
build:
name: Build
# 빌드 환경 경우의 수 정의
strategy:
matrix:
dotnet-version: [ '9.0.x' ]
configuration: [ Release ]
os: [ ubuntu-24.04 ]
# 빌드 환경 지정
runs-on: ${{ matrix.os }}
# $GITHUB_OUTPUT
# $GITHUB_STEP_SUMMARY
# 환경 변수
# - 규칙: ${{ env.환경_변수_이름 }}
# - 예제: ${{ env.solution_dir }}
# 예약 변수
# - ${{ github.workspace }}
# - ${{ github.run_number }}
# - ${{ github.run_id }}
env:
solution_dir: ./Template
build_dir: ./Template/.build
solution_filename: Hello.sln
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_dir }}/${{ env.solution_filename }} \
--verbosity q
# 솔루션 빌드
- name: Build
run: |
dotnet build ${{ env.solution_dir }}/${{ env.solution_filename }} \
--no-restore \
--configuration ${{ matrix.configuration }} \
--verbosity q
# 솔루션 테스트
#
# 결과: coverage.cobertura.xml, logs.trx
# {테스트 프로젝트}
# └─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 로그 파일
- name: Test
run: |
dotnet test ${{ env.solution_dir }}/${{ env.solution_filename }} \
--configuration ${{ matrix.configuration }} \
--no-restore \
--no-build \
--verbosity q \
--settings ${{ env.solution_dir }}/.runsettings
# --collect "XPlat Code Coverage" \
# --logger "trx;LogFileName=logs.trx" \
# 코드 커버리지
# - https://github.com/danielpalme/ReportGenerator-GitHub-Action
#
# 결과: Cobertura.xml, SummaryGithub.md
# {솔루션}
# └─.build
# └─coverage
# ├─Cobertura.xml
# └─SummaryGithub.md
- name: Generate Coverage Reports
uses: danielpalme/[email protected]
if: always()
with:
reports: ${{ env.solution_dir }}/**/*.cobertura.xml
targetdir: ${{ env.build_dir }}/coverage
reporttypes: 'Cobertura;MarkdownSummaryGithub'
verbosity: "Warning"
title: "Code Coverage"
tag: "${{ github.run_number }}_${{ github.run_id }}"
customSettings: "" # https://github.com/danielpalme/ReportGenerator/wiki/Settings.
toolpath: "reportgeneratortool" # dotnet tool.
# 코드 커버러지 $GITHUB_STEP_SUMMARY에 추가
- name: Publish Coverage Reports in Build Summary
if: always()
run: cat "${{ env.build_dir }}/coverage/SummaryGithub.md" >> $GITHUB_STEP_SUMMARY
shell: bash
# 테스트 보고서
# - https://github.com/dorny/test-reporter?tab=readme-ov-file
#
# 결과: Test Report
# 23 passed, 0 failed and 0 skipped
# Report Passed Failed Skipped Time
# ./Template/Assets/Domains/Tests/Crop.Hello.Domain.Unit/TestResults/logs.trx 1✅ 3s
# ./Template/Assets/Frameworks/Tests/Crop.Hello.Framework.Tests.Unit/TestResults/logs.trx 7✅ 4s
# ./Template/Backend/Api/Tests/Crop.Hello.Api.Tests.Integration/TestResults/logs.trx 2✅ 4s
# ./Template/Backend/Api/Tests/Crop.Hello.Api.Tests.Unit/TestResults/logs.trx 12✅ 1 4s
- name: Publish Test Report
uses: dorny/[email protected]
if: always()
with:
name: Test Report
path: "${{ env.solution_dir }}/**/*.trx"
reporter: dotnet-trx
# # Publish-Unit-Test-Result-Action: 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 Summary
# uses: EnricoMi/[email protected]
# if: always()
# with:
# files: |
# ${{ env.solution_dir }}/**/*.trx
# check_name: "Test Summary"
# # CodeCoverageSummary: https://github.com/irongut/CodeCoverageSummary
# #
# # 결과: code-coverage-results.md
# # Package | Line Rate | Branch Rate | Complexity | Health
# # -------- | --------- | ----------- | ---------- | ------
# # Crop.Hello.Api | 74% | 88% | 11 | ➖
# # Crop.Hello.Api.Adapters.Infrastructure | 51% | 57% | 39 | ➖
# # Crop.Hello.Api.Adapters.Persistence | 50% | 100% | 2 | ➖
# # Crop.Hello.Api.Application | 50% | 100% | 2 | ➖
# # Crop.Hello.Api.Domain | 100% | 100% | 1 | ✔
# # Crop.Hello.Framework | 71% | 50% | 7 | ➖
# # Crop.Hello.Framework.Contracts | 43% | 38% | 64 | ❌
# # **Summary** | **52%** (107 / 205) | **52%** (26 / 50) | **126** | ➖
# - name: Publish Code Coverage Report
# uses: irongut/[email protected]
# with:
# filename: "${{ env.build_dir }}/coverage/Cobertura.xml" # 머지된 Cobertura.xml 파일
# 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: "출력"
# # run: |
# # #find "$(pwd)/.build"
# # find . -type f -name "code-coverage-results.md"
#
# - name: Publish Coverage Reports in Build Summary
# run: cat ./code-coverage-results.md >> $GITHUB_STEP_SUMMARY
# shell: bash
# - name: Add Coverage PR Comment
# uses: marocchino/sticky-pull-request-comment@v2
# if: github.event_name == 'pull_request'
# with:
# recreate: true
# path: code-coverage-results.md
# # 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"
# 테스트와 코드 커버리지 coverage.cobertura.xml 파일 생성
# - name: Find coverage output path
# run: |
# cp $(find . -name "coverage.cobertura.xml") .