GSL/asm/scripts/deploy-asm.ps1

133 lines
4.2 KiB
PowerShell
Raw Normal View History

2019-02-14 13:56:46 -05:00
function Get-AppVeyorBuild {
param()
if (-not ($env:APPVEYOR_API_TOKEN)) {
throw "missing api token for AppVeyor."
}
Invoke-RestMethod -Uri "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG" -Method GET -Headers @{
"Authorization" = "Bearer $env:APPVEYOR_API_TOKEN"
"Content-type" = "application/json"
}
}
function Get-TravisBuild {
param(
[int]$limit = 10,
[int]$maxLimit = 100
)
if (-not ($env:TRAVIS_API_TOKEN)) {
throw "missing api token for Travis-CI."
}
$builds = Invoke-RestMethod -Uri "https://api.travis-ci.org/builds?limit=$($limit)" -Method Get -Headers @{
"Authorization" = "token $env:TRAVIS_API_TOKEN"
"Travis-API-Version" = "3"
}
$currentBuild = $builds.builds | Where-Object {$_.commit.sha -eq $env:APPVEYOR_REPO_COMMIT}
if (!$currentBuild) {
if($limit+10 -le $maxLimit) {
return Get-TravisBuild -limit $limit+10 -maxLimit $maxLimit
} else {
throw "Could not get information about Travis build with sha $REPO_COMMIT"
}
}
return $currentBuild
}
function appveyorFinished {
param()
$buildData = Get-AppVeyorBuild
$lastJob = ($buildData.build.jobs | Select-Object -Last 1).jobId
if ($lastJob -ne $env:APPVEYOR_JOB_ID) {
return $false
}
2019-02-14 17:46:00 -05:00
Write-Host "[Appveyor] At Last Job: "
Write-Host $buildData
2019-02-14 13:56:46 -05:00
[datetime]$stop = ([datetime]::Now).AddMinutes($env:TIMEOUT_MINS)
do {
2019-02-14 17:46:00 -05:00
Write-Host "[Appveyor] Checking Build Jobs"
(Get-AppVeyorBuild).build.jobs | Where-Object {$_.jobId -ne $env:APPVEYOR_JOB_ID} | Foreach-Object `
2019-02-14 17:46:00 -05:00
-Begin { $allSuccess = $true } `
-Process {
2019-02-14 13:56:46 -05:00
$job = $_
switch ($job.status) {
"failed" { throw "AppVeyor's Job ($($job.jobId)) failed." }
"success" { continue }
2019-02-14 18:01:31 -05:00
Default { Write-Host "Job status: $($job.status)"; Write-Host $job ;$allSuccess = $false }
2019-02-14 13:56:46 -05:00
}
} `
2019-02-14 17:46:00 -05:00
-End { if ($allSuccess) { return $true } }
2019-02-14 13:56:46 -05:00
Start-sleep 5
} while (([datetime]::Now) -lt $stop)
throw "Test jobs were not finished in $env:TIMEOUT_MINS minutes"
}
function travisFinished {
param()
[datetime]$stop = ([datetime]::Now).AddMinutes($env:TIMEOUT_MINS)
do {
$builds = Get-TravisBuild
$currentBuild = $builds.builds | Where-Object {$_.commit.sha -eq $env:APPVEYOR_REPO_COMMIT}
if (!$currentBuild) {
throw "Could not get information about Travis build with sha $REPO_COMMIT"
}
switch -regex ($currentBuild.state) {
"^passed$" {
return $true
}
"^(errored|failed|canceled)" {
throw "Travis Job ($($builds.builds.id)) failed"
}
}
Start-sleep 5
} while (([datetime]::Now) -lt $stop)
throw "Travis build did not finished in $env:TIMEOUT_MINS minutes"
}
function collectAsm {
# Create branch to merge asm into
# $asmFinalBranch = asm/$env:APPVEYOR_REPO_COMMIT/final
# git pull
# git checkout $env:APPVEYOR_REPO_BRANCH
# git checkout -b $asmFinalBranch
#collect all branches to merge
$asmBranches = @()
(Get-AppVeyorBuild).build.jobs | Foreach-Object { $asmBranches += "asm/$($env:APPVEYOR_REPO_COMMIT)/appveyor-$($_.jobId)"}
#TODO: collect asm from travis
# $travisBuild = Get-TravisBuild
# $travisJobs = @()
# $travisBuild.jobs | Foreach-Object { $travisJobs += $_.id }
#Merge all branches into master
$branchString = $asmBranches -join ' '
git checkout master
git merge --squash $branchString
git diff-index --cached --quiet --exit-code HEAD
if(-not $?) {
git commit -m "[skip ci] Update ASM for $($env:APPVEYOR_REPO_COMMIT)"
git push
}
}
2019-02-14 17:46:00 -05:00
Write-Host "Starting asm deployment"
2019-02-14 13:56:46 -05:00
# Wait for all jobs
if(appveyorFinished) {
2019-02-14 17:46:00 -05:00
Write-Host "Appveyor Finished, collecting ASM"
2019-02-14 13:56:46 -05:00
# Collect ASM (currently from Appveyor only)
collectAsm
}