deploy in msys2 and proxspace (#702)
[proxmark3-svn] / CI / appveyor.yml
1 version: 3.0.1.{build}
2 image: Visual Studio 2017
3 clone_folder: C:\ProxSpace\pm3
4 init:
5 - ps: >-
6 $psversiontable
7
8 #Get-ChildItem Env:
9
10
11 $releasename=""
12
13 $env:APPVEYOR_REPO_COMMIT_SHORT = $env:APPVEYOR_REPO_COMMIT.Substring(0, 8)
14
15 if ($env:appveyor_repo_tag -match "true"){
16 $releasename=$env:APPVEYOR_REPO_TAG_NAME + "/"
17 }
18
19 $releasename+=$env:APPVEYOR_BUILD_VERSION + " [" + $env:APPVEYOR_REPO_COMMIT_SHORT + "]"
20
21
22 Write-Host "repository: $env:appveyor_repo_name branch:$env:APPVEYOR_REPO_BRANCH release: $releasename" -ForegroundColor Yellow
23
24 Add-AppveyorMessage -Message "[$env:APPVEYOR_REPO_COMMIT_SHORT]$env:appveyor_repo_name($env:APPVEYOR_REPO_BRANCH)" -Category Information -Details "repository: $env:appveyor_repo_name branch: $env:APPVEYOR_REPO_BRANCH release: $releasename"
25
26
27 iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
28 clone_script:
29 - ps: >-
30 Write-Host "Removing ProxSpace..." -NoNewLine
31
32 cd \
33
34 Remove-Item -Recurse -Force -Path c:\ProxSpace\*
35
36 Write-Host "[ OK ]" -ForegroundColor Green
37
38
39 Write-Host "Git clone ProxSpace..." -NoNewLine
40
41 git clone -q https://github.com/Gator96100/ProxSpace c:\ProxSpace
42
43 Write-Host "[ OK ]" -ForegroundColor Green
44
45
46 Write-Host "Removing pm3 dir..." -NoNewLine
47
48 Remove-Item -Recurse -Force -Path c:\ProxSpace\pm3\*
49
50 Write-Host "[ OK ]" -ForegroundColor Green
51
52
53 Write-Host "Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." -NoNewLine
54
55 if(-not $env:appveyor_pull_request_number) {
56 git clone -q --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $env:appveyor_build_folder
57 cd $env:appveyor_build_folder
58 git checkout -qf $env:appveyor_repo_commit
59 } else {
60 git clone -q https://github.com/$env:appveyor_repo_name.git $env:appveyor_build_folder
61 cd $env:appveyor_build_folder
62 git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge:
63 git checkout -qf FETCH_HEAD
64 }
65
66 Write-Host "[ OK ]" -ForegroundColor Green
67
68
69 Write-Host "Fill msys2\etc\fstab file..." -NoNewLine
70
71 New-Item c:\ProxSpace\msys2\etc\fstab -type file -force -value "# For a description of the file format, see the Users Guide`n# http://cygwin.com/cygwin-ug-net/using.html#mount-table`nnone / cygdrive binary,posix=0,noacl,user 0 0 `nC:\ProxSpace\pm3 /pm3 ntfs noacl 0 0 `nC:\ProxSpace\gcc-arm-none-eabi /gcc-arm-none-eabi ntfs noacl 0 0 `n"
72
73 Write-Host "[ OK ]" -ForegroundColor Green
74
75
76 Write-Host "Update msys2 packages..." -NoNewLine
77
78 $env:Path = "C:\ProxSpace\msys2\usr\bin;C:\ProxSpace\msys2\mingw32\bin;C:\ProxSpace\gcc-arm-none-eabi\bin;$env:Path"
79
80 C:\ProxSpace\msys2\msys2_shell.cmd -mingw32 -defterm -no-start /dev/null 1> msys1.txt 2>&1
81
82 C:\ProxSpace\msys2\msys2_shell.cmd -mingw32 -defterm -no-start /dev/null 1> msys1.txt 2>&1
83
84 Write-Host "[ OK ]" -ForegroundColor Green
85 install:
86 - ps: >-
87 function Exec-External {
88 param(
89 [Parameter(Position=0,Mandatory=1)][scriptblock] $command
90 )
91 & $command
92 if ($LASTEXITCODE -ne 0) {
93 throw ("Command returned non-zero error-code ${LASTEXITCODE}: $command")
94 }
95 }
96 build_script:
97 - ps: >-
98 "C:\ProxSpace\msys2\usr\bin;C:\ProxSpace\msys2\mingw32\bin;C:\ProxSpace\gcc-arm-none-eabi\bin;$env:Path"
99
100
101 $env:MINGW_HOME="C:\ProxSpace\msys2\mingw32"
102
103 $env:MSYS_HOME="C:\ProxSpace\msys2"
104
105 $env:MSYSTEM="MINGW32"
106
107 $env:MINGW_PREFIX="/mingw32"
108
109 $env:SHELL="/bin/bash"
110
111 $env:MSYSTEM_CHOST="i686-w64-mingw32"
112
113
114 #make
115
116 bash -c -i 'pwd;make clean;make all'
117
118
119 #some checks
120
121 if(!(Test-Path C:\ProxSpace\pm3\client\proxmark3.exe)){
122
123 throw "Main file proxmark3.exe not exists."
124
125 }
126
127 if(!(Test-Path C:\ProxSpace\pm3\armsrc\obj\fullimage.elf)){
128
129 throw "ARM file fullimage.elf not exists."
130
131 }
132
133 if(!(Test-Path C:\ProxSpace\pm3\client\hardnested\tables\*.bin.z)){
134
135 throw "Files in hardnested\tables not exists."
136
137 }
138
139
140 #copy
141
142 Write-Host "Copy release files..." -NoNewLine -ForegroundColor Yellow
143
144 New-Item -ItemType Directory -Force -Path C:\ProxSpace\Release
145
146 Copy-Item C:\ProxSpace\pm3\client\*.exe C:\ProxSpace\Release
147
148 New-Item -ItemType Directory -Force -Path C:\ProxSpace\Release\arm
149
150 Copy-Item C:\ProxSpace\pm3\armsrc\obj\*.elf C:\ProxSpace\Release\arm
151
152 Copy-Item C:\ProxSpace\pm3\bootrom\obj\*.elf C:\ProxSpace\Release\arm
153
154 New-Item -ItemType Directory -Force -Path C:\ProxSpace\Release\scripts
155
156 Copy-Item C:\ProxSpace\pm3\client\scripts\*.lua C:\ProxSpace\Release\scripts
157
158 New-Item -ItemType Directory -Force -Path C:\ProxSpace\Release\hardnested\tables
159
160 Copy-Item C:\ProxSpace\pm3\client\hardnested\*.bin C:\ProxSpace\Release\hardnested
161
162 Copy-Item C:\ProxSpace\pm3\client\hardnested\tables\*.bin.z C:\ProxSpace\Release\hardnested\tables
163
164 Write-Host "[ OK ]" -ForegroundColor Green
165
166
167 #archive and push
168
169 $releasename=""
170
171 if ($env:appveyor_repo_tag -match "true"){
172
173 $releasename=$env:APPVEYOR_REPO_TAG_NAME + "/"
174
175 }
176
177 $releasename+=$env:APPVEYOR_BUILD_VERSION + " [" + $env:APPVEYOR_REPO_COMMIT.Substring(0, 7) + "]"
178
179
180 Write-Host "Archive and publish release files ($releasename)..." -NoNewLine -ForegroundColor Yellow
181
182 cd C:\ProxSpace
183
184 7z a release.zip C:\ProxSpace\Release
185
186 Push-AppveyorArtifact release.zip -DeploymentName "$releasename"
187
188 Write-Host "[ OK ]" -ForegroundColor Green
189
190
191 Write-Host "Builded..." -ForegroundColor Yellow
192 test_script:
193 - ps: >-
194 $env:Path = "C:\ProxSpace\msys\bin;$env:Path"
195
196 cd c:\ProxSpace\pm3
197
198
199 $global:TestsPassed=$true
200
201
202 Function ExecTest($Name, $File, $Cmd, $CheckResult) {
203
204 #--- begin Job
205
206 $Job = Start-Job -ScriptBlock {
207 [bool]$res=$false
208 $TestTime=[System.Environment]::TickCount
209 $env:Path = "C:\ProxSpace\msys\bin;$env:Path"
210 Set-Location $using:PWD
211
212 $sb=[scriptblock]::Create("$using:Cmd")
213 #execute scriptblock
214 Write-host "Test [$using:Name] job: $using:Cmd"
215 $Cond=&$sb
216
217 if ($Cond -eq $null){
218 } ElseIf($using:CheckResult -ne $null) {
219 [String]$searchstr=""
220 if ($Cond -is [Object]){
221 ForEach($line in $Cond){
222 Write-host $line -ForegroundColor Gray
223 $searchstr += $line
224 }
225 }else{
226 Write-host "$Cond" -ForegroundColor Gray
227 $searchstr = $Cond
228 }
229 If($searchstr -like "*$using:CheckResult*") {
230 $res=$true
231 }
232 $Cond="*$using:CheckResult*"
233 } Else {
234 If (!($Cond -is [bool] -or $Cond -is [byte] -or $Cond -is [int16] -or $Cond -is [int32] -or $Cond -is [int64] -or $Cond -is [float])){
235 if ($Cond -is "String" -and $Cond -like "*passed*"){
236 $res= $true
237 }
238 if ($Cond -is "String" -and $Cond -like "*true*"){
239 $res= $true
240 }
241 } Else {
242 $res=$Cond
243 }
244 }
245
246 If ($res) {
247 Write-host "Result[$using:Name]: $Cond" -ForegroundColor Green
248 Add-AppveyorTest -Name "$using:Name" -Framework NUnit -Filename "$using:File" -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)"
249 }Else {
250 Write-host "Result[$using:Name]: $Cond" -ForegroundColor Red
251 Add-AppveyorTest -Name "$using:Name" -Framework NUnit -Filename "$using:File" -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" -ErrorMessage "command:$using:Cmd`nresult:$Cond"
252 }
253 return $res
254 }
255
256 #--- end Job
257
258 [bool]$res=$false
259 # Wait 120 sec timeout for Job
260 if(Wait-Job $Job -Timeout 120){
261 $Results = $Job | Receive-Job
262 if($Results -like "true"){
263 $res=$true
264 }
265 } else {
266 Write-host "Test [$Name] timeout" -ForegroundColor Red
267 Add-AppveyorTest -Name "$Name" -Framework NUnit -Filename "$File" -Outcome Failed -Duration 40000 -ErrorMessage "timeout"
268 }
269 Remove-Job -Force $Job
270
271 if(!$res){
272 $global:TestsPassed=$false
273 }
274 }
275
276
277 Write-Host "Running tests..." -ForegroundColor Yellow
278
279
280 #file test
281
282 ExecTest "proxmark3 exists" "proxmark3.exe" {Test-Path C:\ProxSpace\Release\proxmark3.exe}
283
284 ExecTest "arm image exists" "\arm\fullimage1.elf" {Test-Path C:\ProxSpace\Release\arm\fullimage.elf}
285
286 ExecTest "bootrom exists" "bootrom.elf" {Test-Path C:\ProxSpace\Release\arm\bootrom.elf}
287
288 ExecTest "hardnested tables exists" "hardnested" {Test-Path C:\ProxSpace\Release\hardnested\tables\*.z}
289
290 ExecTest "release exists" "release.zip" {Test-Path C:\ProxSpace\release.zip}
291
292
293 #proxmark logic tests
294
295 ExecTest "proxmark help" "proxmark3 -h" {bash -lc 'cd ~/client;./proxmark3 -h | grep -q Execute && echo Passed || echo Failed'}
296
297 ExecTest "proxmark help hardnested" "proxmark3 -h" {bash -lc 'cd ~/client;./proxmark3 -h | grep -q hardnested && echo Passed || echo Failed'}
298
299
300 ExecTest "hf mf offline text" "hf mf" {bash -lc "cd ~/client;./proxmark3 comx -c 'hf mf'"} "at_enc"
301
302 ExecTest "hf mf hardnested" "hf mf hardnested" {bash -lc "cd ~/client;./proxmark3 comx -c 'hf mf hardnested t 1 000000000000'"} "found:"
303
304
305 #proxmark crypto tests
306
307 ExecTest "hf emv test" "hf emv test" {bash -lc "cd ~/client;./proxmark3 comx -c 'hf emv test'"} "Tests ?OK"
308
309
310 if ($global:TestsPassed) {
311 Write-Host "Tests [ OK ]" -ForegroundColor Green
312 } else {
313 Write-Host "Tests [ ERROR ]" -ForegroundColor Red
314 throw "Tests error."
315 }
316 on_success:
317 - ps: Write-Host "Build success..." -ForegroundColor Green
318 on_failure:
319 - ps: Write-Host "Build error." -ForegroundColor Red
320 on_finish:
321 - ps: $blockRdp = $false; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
Impressum, Datenschutz