-
Notifications
You must be signed in to change notification settings - Fork 1
150 lines (137 loc) · 3.94 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
name: Build
on:
push:
branches:
- master
- develop
paths:
- .github/workflows/build.yml
- .config/dotnet-tools.json
- global.json
- nuget.config
- Shimakaze.Sdk.sln
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- "src/**/*"
- "sdk/**/*"
- "test/**/*"
pull_request:
branches:
- master
- develop
paths:
- .github/workflows/build.yml
- .config/dotnet-tools.json
- global.json
- nuget.config
- Shimakaze.Sdk.sln
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- "src/**/*"
- "sdk/**/*"
- "test/**/*"
merge_group:
jobs:
build-dotnet:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
name: .Net 构建 ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- name: 签出仓库
uses: actions/checkout@v4
with:
lfs: true
fetch-depth: 0
- name: 配置 .Net 环境
uses: actions/setup-dotnet@v4.0.1
with:
global-json-file: ./global.json
cache-dependency-path: ./**/packages.lock.json
cache: false
- name: 还原本地工具
shell: pwsh
run: dotnet tool restore
- name: 还原
shell: pwsh
run: dotnet restore
- name: 构建
shell: pwsh
run: dotnet build --graph --configuration Release --no-restore
- name: 测试
shell: pwsh
run: dotnet coverage collect -f cobertura dotnet test --graph --configuration Release --no-build
- name: 打包
shell: pwsh
run: dotnet pack --graph --configuration Release --no-restore --no-build --include-symbols --include-source
- name: 生成校验和
shell: pwsh
env:
matrix_os : ${{ matrix.os }}
run: |
Write-Output "### Build Success :rocket: $env:matrix_os" >> $env:GITHUB_STEP_SUMMARY
Write-Output "|File|SHA256|" >> $env:GITHUB_STEP_SUMMARY
Write-Output "|:-|:-:|" >> $env:GITHUB_STEP_SUMMARY
Get-ChildItem nupkg | ForEach-Object {
Write-Output "|$($PSItem.Name)|$((Get-FileHash $PSItem -Algorithm SHA256).Hash)|" >> $env:GITHUB_STEP_SUMMARY
}
- name: 收集 Nuget 包
uses: actions/upload-artifact@v4.4.0
with:
name: nuget-packages-${{ matrix.os }}
path: |
nupkg/*
retention-days: 3
- name: 收集测试覆盖率
uses: coverallsapp/github-action@v2
continue-on-error: true
with:
flag-name: run-${{ join(matrix.*, '-') }}
parallel: true
file: ./output.cobertura.xml
coverage-upload:
needs: build-dotnet
if: ${{ always() }}
name: 上传测试覆盖率
runs-on: ubuntu-latest
steps:
- name: 上传测试覆盖率
uses: coverallsapp/github-action@v2
continue-on-error: true
with:
parallel-finished: true
carryforward: "run-ubuntu-latest,run-windows-latest,run-macos-latest"
release:
needs: build-dotnet
name: 发布
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
discussions: write
runs-on: ubuntu-latest
steps:
- name: Download a Build Artifact
uses: actions/download-artifact@v4.1.8
with:
name: nuget-packages-windows-latest
path: artifact
- name: Release
uses: softprops/action-gh-release@v2
with:
files: artifact/*
- name: 推送 Nuget 包
shell: pwsh
continue-on-error: true
env:
NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }}
run: |
Set-Location nupkg
dotnet nuget push *.nupkg -s nuget -k $env:NUGET_TOKEN --skip-duplicate
Set-Location ..