version: 3.0.1.{build} image: Visual Studio 2019 clone_folder: C:\ProxSpace\pm3\proxmark cache: - C:\ps-cache -> appveyor.yml environment: proxspace_url: https://github.com/Gator96100/ProxSpace/archive/master.zip proxspace_zip_file: \proxspace.zip proxspace_zip_folder_name: ProxSpace-* proxspace_path: C:\ProxSpace proxspace_home_path: \ProxSpace\pm3 proxspace_cache_path: C:\ps-cache wsl_git_path: C:\proxmark APPVEYOR_SAVE_CACHE_ON_ERROR: true init: - ps: >- $psversiontable #Get-ChildItem Env: $releasename="" $env:APPVEYOR_REPO_COMMIT_SHORT = $env:APPVEYOR_REPO_COMMIT.Substring(0, 8) if ($env:appveyor_repo_tag -match "true"){ $releasename=$env:APPVEYOR_REPO_TAG_NAME + "/" } $releasename+=$env:APPVEYOR_BUILD_VERSION + " [" + $env:APPVEYOR_REPO_COMMIT_SHORT + "]" Write-Host "repository: $env:appveyor_repo_name branch:$env:APPVEYOR_REPO_BRANCH release: $releasename" -ForegroundColor Yellow 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" # iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) clone_script: - ps: >- Function GitClone($Text, $Folder) { Write-Host "$Text" -NoNewLine if(-not $env:appveyor_pull_request_number) { git clone -q --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $Folder cd $Folder git checkout -qf $env:appveyor_repo_commit } else { git clone -q https://github.com/$env:appveyor_repo_name.git $Folder cd $Folder git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge: git checkout -qf FETCH_HEAD } Write-Host "[ OK ]" -ForegroundColor Green } $WSLjob = Start-Job -Name WSLInstall -ScriptBlock { Function WSLExec($Text, $Cmd) { Write-Host "$Text" wsl -- bash -c $Cmd Write-Host "$Text" -NoNewLine Write-Host "[ OK ]" -ForegroundColor Green } $WSLInstallTime=[System.Environment]::TickCount WSLExec "WSL update..." "sudo apt-get update 1>/dev/null" WSLExec "WSL upgrade..." "sudo apt-get upgrade -y 1>/dev/null" WSLExec "WSL cleanup..." "sudo apt-get auto-remove -y 1>/dev/null" WSLExec "WSL install..." "sudo apt-get -y install --reinstall --no-install-recommends git ca-certificates build-essential pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev qtbase5-dev cmake libpython3-dev python3 python3-pip python3-dev libpython3-all-dev 1>/dev/null" WSLExec "WSL QT fix..." "sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5" WSLExec "WSL install python dependencies..." "sudo python3 -m pip install --upgrade pip 1>/dev/null" WSLExec "WSL install pip..." "sudo python3 -m pip install setuptools 1>/dev/null" WSLExec "WSL install pip continue..." "sudo python3 -m pip install ansicolors sslcrypto 1>/dev/null" Add-AppveyorMessage -Message "WSL setup took $(([System.Environment]::TickCount-$WSLInstallTime) / 1000) sec" -Category Information New-Item -ItemType "file" -Path "C:\WSL-Finished.txt" -Force | Out-Null } $env:PSInstallTime=[System.Environment]::TickCount Write-Host "ProxSpace: Removing folder..." -NoNewLine cd \ Remove-Item -Recurse -Force -Path $env:proxspace_path -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Green Write-Host "ProxSpace: downloading..." -NoNewLine [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Invoke-WebRequest "$env:proxspace_url" -outfile "$env:proxspace_zip_file" Write-Host "[ OK ]" -ForegroundColor Green Write-Host "ProxSpace: extracting..." -NoNewLine Expand-Archive -LiteralPath "$env:proxspace_zip_file" -DestinationPath "\" Remove-Item "$env:proxspace_zip_file" Write-Host "[ OK ]" -ForegroundColor Green Write-Host "ProxSpace: renaming folder..." -NoNewLine Get-ChildItem -Path "\$env:proxspace_zip_folder_name" | Rename-Item -NewName (Split-Path $env:proxspace_path -Leaf) Write-Host "[ OK ]" -ForegroundColor Gree $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "$env:proxspace_path\setup\09-proxspace_setup.post").Line.Split("""")[1] Write-Host "ProxSpace version: $psversion" -ForegroundColor Yellow GitClone "ProxSpace: Cloning repository <$env:appveyor_repo_name> to $env:appveyor_build_folder ..." $env:appveyor_build_folder GitClone "WSL: Cloning repository <$env:appveyor_repo_name> to $env:wsl_git_path ..." $env:wsl_git_path install: - ps: >- Function ExecUpdate($Text, $firstStart) { Write-Host "$Text" $PSjob = Start-Job -Name PSInstall -ScriptBlock { cd $env:proxspace_path ./runme64.bat -c "exit" } $StartTime=[System.Environment]::TickCount Start-Sleep -s 10 while($true) { if ($PSjob.State -eq 'Completed') { Write-Host "$Text" -NoNewLine Write-Host "[ OK ]" -ForegroundColor Green break } if ($PSjob.State -eq 'Failed') { Write-Host "$Text" -NoNewLine Write-Host "[ Failed ]" -ForegroundColor Red break } if ($firstStart -And (Test-Path "$env:proxspace_path\msys2\etc\pacman.conf.pacnew")) { Start-Sleep -s 5 Stop-Job -Job $PSjob Start-Sleep -s 5 Write-Host "$Text" -NoNewLine Write-Host "Exit by pacman.conf" -ForegroundColor Green break } if ([System.Environment]::TickCount-$StartTime -gt 1000000) { Stop-Job -Job $PSjob Write-Host "$Text" -NoNewLine Write-host "Exit by timeout" -ForegroundColor Yellow break } Start-Sleep -s 5 Receive-Job -Name WSLInstall -ErrorAction SilentlyContinue } #Receive-Job -Wait -Name PSInstall } Function GitClone($Text, $Folder) { Write-Host "$Text" -NoNewLine if(-not $env:appveyor_pull_request_number) { git clone -q --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $Folder cd $Folder git checkout -qf $env:appveyor_repo_commit } else { git clone -q https://github.com/$env:appveyor_repo_name.git $Folder cd $Folder git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge: git checkout -qf FETCH_HEAD } Write-Host "[ OK ]" -ForegroundColor Green } Write-Host "ProxSpace: move cache..." -NoNewLine New-Item -ItemType Directory -Force -Path "$env:proxspace_path\msys2\var\cache\" | Out-Null Copy-Item -Path "$env:proxspace_cache_path\*" -Destination "$env:proxspace_path\msys2\var\cache\" -Force -Recurse -ErrorAction SilentlyContinue Write-Host "[ OK ]" -ForegroundColor Gree ExecUpdate "ProxSpace: initial msys2 startup..." $true ExecUpdate "ProxSpace: installing required packages..." $false Add-AppveyorMessage -Message "ProxSpace download and update took $(([System.Environment]::TickCount-$env:PSInstallTime) / 1000) sec" -Category Information build_script: - ps: >- $pmfolder = Split-Path $env:appveyor_build_folder -Leaf Function ExecMinGWCmd($Cmd) { cd $env:proxspace_path ./runme64.bat -c "cd $pmfolder && $Cmd" } Function ExecCheck($Name) { $testspass = ($LASTEXITCODE -eq 0) $global:TestsPassed=$testspass if ($testspass) { Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" Write-Host "$Name [ OK ]" -ForegroundColor Green } else { Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" Write-Host "$Name [ ERROR ]" -ForegroundColor Red throw "Tests error." } } $WSLjob = Start-Job -Name WSLCompile -ScriptBlock { Function ExecWSLCmd($Cmd) { cd $env:wsl_git_path wsl -- bash -c $Cmd } Function ExecCheck($Name) { $testspass = ($LASTEXITCODE -eq 0) $global:TestsPassed=$testspass if ($testspass) { Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Passed -Duration "$([System.Environment]::TickCount-$TestTime)" Write-Host "$Name [ OK ]" -ForegroundColor Green } else { Add-AppveyorTest -Name $Name -Framework NUnit -Filename $Name -Outcome Failed -Duration "$([System.Environment]::TickCount-$TestTime)" Write-Host "$Name [ ERROR ]" -ForegroundColor Red throw "Tests error." } } #WSL: wait for installation to finish if(!(Test-Path "C:\WSL-Finished.txt")){ Write-Host "Waiting for WSL installation to finish..." -NoNewLine while(!(Test-Path "C:\WSL-Finished.txt")) { Start-Sleep -s 5 } Remove-Item -Force "C:\WSL-Finished.txt" -ErrorAction SilentlyContinue Write-Host "$Name [ OK ]" -ForegroundColor Green } #Windows Subsystem for Linux (WSL) Write-Host "---------- WSL make ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecWSLCmd "make clean;make V=1" #some checks if(!(Test-Path "$env:wsl_git_path\client\proxmark3")){ throw "Main file proxmark3 not exists." } ExecWSLCmd "make check" ExecCheck "WSL make Tests" Start-Sleep -s 2 Write-Host "---------- WSL btaddon ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecWSLCmd "make clean;make V=1 PLATFORM_EXTRAS=BTADDON" ExecWSLCmd "make check" ExecCheck "WSL BTaddon Tests" Start-Sleep -s 2 Write-Host "---------- WSL make clean ----------" -ForegroundColor Yellow ExecWSLCmd 'make clean' Write-Host "---------- WSL cmake ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecWSLCmd 'mkdir -p client/build; cd client/build; cmake ..; make VERBOSE=1;' Write-Host "---------- WSL cmake tests ----------" -ForegroundColor Yellow ExecWSLCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3 client' ExecCheck "WSL cmake Tests" } #ProxSpace Write-Host "ProxSpace: create new cache..." -NoNewLine cd $env:proxspace_path ./runme64.bat -c "yes | pacman -Sc > /dev/null 2>&1" Remove-Item -Recurse -Force -Path "$env:proxspace_cache_path" -ErrorAction SilentlyContinue Move-Item -Path "$env:proxspace_path\msys2\var\cache" -Destination "$env:proxspace_cache_path" -Force Write-Host "[ OK ]" -ForegroundColor Gree Write-Host "---------- PS make ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecMinGWCmd "make clean;make V=1" if(!(Test-Path "$env:proxspace_home_path\$pmfolder\client\proxmark3.exe")){ throw "Main file proxmark3.exe not exists." } ExecMinGWCmd 'make check' ExecCheck "PS make Tests" Write-Host "---------- PS btaddon ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecMinGWCmd 'make clean;make V=1 PLATFORM_EXTRAS=BTADDON' ExecMinGWCmd 'make check' ExecCheck "PS BTaddon Tests" Write-Host "---------- PS make clean ----------" -ForegroundColor Yellow ExecMinGWCmd 'make clean' Write-Host "---------- PS cmake ----------" -ForegroundColor Yellow $TestTime=[System.Environment]::TickCount ExecMinGWCmd 'mkdir -p client/build; cd client/build; cmake -G""MSYS Makefiles"" ..; make VERBOSE=1;' Write-Host "---------- PS cmake tests ----------" -ForegroundColor Yellow ExecMinGWCmd './tools/pm3_tests.sh --clientbin client/build/proxmark3.exe client' ExecCheck "PS cmake Tests" Receive-Job -Wait -Name WSLInstall -ErrorAction SilentlyContinue Receive-Job -Wait -Job $WSLjob test_script: - ps: >- if ($global:TestsPassed) { Write-Host "Tests [ OK ]" -ForegroundColor Green } else { Write-Host "Tests [ ERROR ]" -ForegroundColor Red throw "Tests error." } on_success: - ps: Write-Host "Build success..." -ForegroundColor Green on_failure: - ps: Write-Host "Build error." -ForegroundColor Red on_finish: - ps: # $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))