-
Notifications
You must be signed in to change notification settings - Fork 114
233 lines (187 loc) · 9.22 KB
/
Build&Test.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
name: Build&Test
on: [push, pull_request]
jobs:
Build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: 恢复编译产物
id: BinCache
uses: actions/cache@v4
with:
path: |
objs/**/*.obj
Lib/**/*.*
YY.Depends.Analyzer.exe
key: BinCache_${{github.sha}}
- name: 初始化
working-directory: ${{env.GITHUB_WORKSPACE}}
run: |
mkdir -p Bin
Invoke-WebRequest -Uri https://github.com/Chuyu-Team/LibMaker/releases/download/v1.0.4/LibMaker.exe -OutFile Bin\LibMaker.exe
Invoke-WebRequest -Uri https://github.com/Chuyu-Team/YY-Thunks/releases/download/v1.0.2.8/MinimumRequiredVersionHelper.exe -OutFile Bin\MinimumRequiredVersionHelper.exe
$ProgramFiles = ${env:ProgramFiles(x86)}
if (-not $ProgramFiles)
{
$ProgramFiles = $env:ProgramFiles
}
$BuiltInVsWhereExe = "$ProgramFiles\Microsoft Visual Studio\Installer\vswhere.exe"
if (-not (Test-Path $BuiltInVsWhereExe))
{
throw "找不到vswhere.exe!"
}
Write-Output $BuiltInVsWhereExe
$LatestVisualStudioRoot = & $BuiltInVsWhereExe -latest -prerelease -property installationPath
if (-not (Test-Path $LatestVisualStudioRoot))
{
throw "找不到 VisualStudioRoot!"
}
echo "LatestVisualStudioRoot=$LatestVisualStudioRoot" >> $env:GITHUB_ENV
$MSBuildBinPath="$LatestVisualStudioRoot\MSBuild\Current\Bin"
if (-not (Test-Path $MSBuildBinPath))
{
$installationVersion = & $BuiltInVsWhereExe -latest -prerelease -property installationVersion
$majorVersion = "$installationVersion".Split('.')[0]
$MSBuildBinPath="$LatestVisualStudioRoot\MSBuild\$majorVersion.0\Bin"
}
if (-not (Test-Path $MSBuildBinPath))
{
throw "找不到 MSBuildBinPath!"
}
echo "MSBuildBinPath=$MSBuildBinPath" >> $env:GITHUB_ENV
if($env:GITHUB_REF.StartsWith("refs/tags/v", "CurrentCultureIgnoreCase"))
{
$BuildVersion = $env:GITHUB_REF.Remove(0, 11);
echo "BuildVersion=$BuildVersion" >> $env:GITHUB_ENV
# github的内置版本有Bug,此行必须添加,否则无法获得内容
git fetch --depth=1 origin +refs/tags/*:refs/tags/*
$releaseNotes = & git tag -l --format='%(contents)' $env:GITHUB_REF.Remove(0, 10)
$content = [System.IO.File]::ReadAllText("NuGet\YY-Thunks.nuspec")
# 使用此文本替换 .nuspec 中的 releaseNotes
# [System.IO.File]::WriteAllText("YY-Thunks-New.nuspec", $content)
# 微软这个大爷……
$releaseNotesToken = '$releaseNotes$'
$releaseNotesIndex = $content.IndexOf($releaseNotesToken)
if($releaseNotesIndex -ne -1)
{
echo $content.Substring(0, $releaseNotesIndex) | out-file "YY-Thunks-New.nuspec" -NoNewline
echo $releaseNotes | out-file "YY-Thunks-New.nuspec" -Append
echo $content.Remove(0, $releaseNotesIndex + $releaseNotesToken.Length) | out-file "YY-Thunks-New.nuspec" -NoNewline -Append
}
}
- name: 执行编译
if: steps.BinCache.outputs.cache-hit != 'true'
working-directory: ${{env.GITHUB_WORKSPACE}}
shell: cmd
run: |
set Path=%GITHUB_WORKSPACE%\Bin;${{env.MSBuildBinPath}};%Path%
set LatestVisualStudioRoot=${{env.LatestVisualStudioRoot}}
setlocal
call "%LatestVisualStudioRoot%\VC\Auxiliary\Build\vcvars32.bat"
call "%GITHUB_WORKSPACE%\src\Build.cmd"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
endlocal
setlocal
call "%LatestVisualStudioRoot%\VC\Auxiliary\Build\vcvars64.bat"
call "%GITHUB_WORKSPACE%\src\Build.cmd"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
endlocal
msbuild src\YY.Depends.Analyzer\YY.Depends.Analyzer.vcxproj "-p:Configuration=Release;Platform=Win32;OutDir=%GITHUB_WORKSPACE%\;SolutionDir=%GITHUB_WORKSPACE%\src\\"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
- name: 执行单元测试
if: steps.BinCache.outputs.cache-hit != 'true'
working-directory: ${{env.GITHUB_WORKSPACE}}
shell: pwsh
run: |
# Procdump工具,用于单元测试崩溃诊断
Invoke-WebRequest -Uri https://download.sysinternals.com/files/Procdump.zip -OutFile Bin\Procdump.zip
&7z e Bin\Procdump.zip "-o$Env:GITHUB_WORKSPACE\Bin"
Invoke-WebRequest -Uri https://github.com/mingkuang-Chuyu/Visual_Studio_Platform_Toolset/releases/download/v1.0.2/Visual.Studio.2008.Platform.Toolset.v1.0.2.7z -OutFile Bin\Visual.Studio.2008.Platform.Toolset.v1.0.2.7z
&7z x Bin\Visual.Studio.2008.Platform.Toolset.v1.0.2.7z "-o$Env:GITHUB_WORKSPACE\Bin"
# MSBuild、PROCDUMP_PATH目录更新到 Path
$Env:Path="$Env:GITHUB_WORKSPACE\Bin;${{env.MSBuildBinPath}};${{env.LatestVisualStudioRoot}}\Common7\IDE\CommonExtensions\Microsoft\TestWindow;" + $Env:Path
$Env:WindowsSdkDir_60A_TestPath="$Env:GITHUB_WORKSPACE\Bin\Program Files\Microsoft SDKs\Windows\v6.0A"
# 编译单元测试项目
&msbuild src\YY-Thunks.UnitTest\YY-Thunks.UnitTest.vcxproj "-p:Configuration=Release;Platform=Win32;SolutionDir=$Env:GITHUB_WORKSPACE\src\\"
if($lastexitcode -ne 0)
{
throw "YY-Thunks.UnitTest.vcxproj编译失败!退出代码:$lastexitcode"
}
&msbuild src\YY-Thunks.UnitTest\YY-Thunks.UnitTest.vcxproj "-p:Configuration=Release;Platform=x64;SolutionDir=$Env:GITHUB_WORKSPACE\src\\"
if($lastexitcode -ne 0)
{
throw "YY-Thunks.UnitTest.vcxproj编译失败!退出代码:$lastexitcode"
}
$RunFaild = 0
&vstest.console src\Release\YY-Thunks.UnitTest.dll "/logger:trx;LogFileName=UnitTestWin32.trx" "/Blame:CollectDump;CollectAlways=false;DumpType=full" "/Diag:TestResults\Win32.log"
if($lastexitcode -ne 0)
{
$RunFaild = 1
}
&vstest.console src\x64\Release\YY-Thunks.UnitTest.dll "/logger:trx;LogFileName=UnitTestWin64.trx" "/Blame:CollectDump;CollectAlways=false;DumpType=full" "/Diag:TestResults\Win64.log"
if($lastexitcode -ne 0)
{
$RunFaild = 1
}
if($RunFaild -ne 0)
{
throw "YY-Thunks.UnitTest单元测试失败!"
}
- uses: dorny/test-reporter@v1
if: steps.BinCache.outputs.cache-hit != 'true' && (success() || failure())
with:
name: 单元测试报告
path: TestResults/*.trx
reporter: dotnet-trx
- name: 文件打包
working-directory: ${{env.GITHUB_WORKSPACE}}
shell: cmd
run: |
::打包Release
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Objs.zip objs LICENSE ReadMe.md ThunksList.md YY.Depends.Analyzer.exe
pushd ".\src\YY.Depends.Analyzer"
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Objs.zip Config
popd
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Lib.zip Lib LICENSE ReadMe.md ThunksList.md YY.Depends.Analyzer.exe
pushd ".\src\YY.Depends.Analyzer"
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Lib.zip Config
popd
::打包Nuget
if "${{env.BuildVersion}}" NEQ "" (
nuget pack YY-Thunks-New.nuspec -Properties version=${{env.BuildVersion}};commit=%GITHUB_SHA%
)
- uses: actions/upload-artifact@v4
with:
path: |
*.nupkg
*.zip
# 失败时我们收集一些信息,用于诊断
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ErrorLog
path: |
TestResults\**\*.*
src\Release\YY-Thunks.UnitTest.dll
src\Release\YY-Thunks.UnitTest.pdb
src\Release\*.log
src\x64\Release\YY-Thunks.UnitTest.dll
src\x64\Release\YY-Thunks.UnitTest.pdb
src\x64\Release\*.log
src\YY-Thunks.UnitTest\TestProject\Example\Win32\Static
src\YY-Thunks.UnitTest\TestProject\Example\x64\Static
- uses: xresloader/upload-to-github-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
file: "YY-Thunks-*.zip"
overwrite: true
tags: true
draft: false
- name: 内容发布
if: contains(github.ref, 'tags/')
working-directory: ${{env.GITHUB_WORKSPACE}}
shell: cmd
run: |
:: 把生成的nuget包发布到nuget中
nuget push YY-Thunks.${{env.BuildVersion}}.nupkg -ApiKey ${{ secrets.NUGET_TOKEN }} -Source https://api.nuget.org/v3/index.json