|
[CmdletBinding()] |
|
Param( |
|
[Parameter(Mandatory = $true)][string]$authToken, |
|
[Parameter(Mandatory = $true)][string]$organization, |
|
[Parameter(Mandatory = $true)][string]$project, |
|
[Parameter(Mandatory = $true)][string]$version, |
|
[Parameter(Mandatory = $true)][string]$repository, |
|
[Parameter(Mandatory = $true)][string]$commit, |
|
[parameter(Mandatory = $true)][DateTime]$dateReleased |
|
) |
|
|
|
function CreateRelease() |
|
{ |
|
$retries = 1 |
|
$success = $false |
|
|
|
while (!$success -and $retries -lt 6) { |
|
$location = "https://sentry.io/api/0/organizations/$organization/releases/" |
|
|
|
Write-Host "Invoke a web request for $location to create a new release. Attempting $retries" |
|
Set-Variable -Name createResultStatus -Force -Scope Local -Value $null |
|
Set-Variable -Name createResultStatusDescription -Force -Scope Local -Value $null |
|
Set-Variable -Name result -Force -Scope Local |
|
|
|
try { |
|
$result = Invoke-WebRequest -Uri $location -Method Post -Body $bodyBytes -Headers $headers -ContentType "application/json; charset=utf-8" |
|
} catch { |
|
Write-Warning "Response body: ${Error.ErrorDetails}" |
|
|
|
if($_.Exception.Response) { |
|
$createResultStatus = $_.Exception.Response.StatusCode.value__ |
|
$createResultStatusDescription = $_.Exception.Response.StatusDescription |
|
} |
|
else { |
|
$createResultStatus = "Exception" |
|
$createResultStatusDescription = $_.Exception.Message |
|
} |
|
} |
|
|
|
if ($result -eq $null) { |
|
if ($createResultStatus -eq $null) { |
|
$createResultStatus = "Unknown" |
|
} |
|
if ($createResultStatusDescription -eq $null) { |
|
$createResultStatusDescription = "Unknown" |
|
} |
|
} |
|
else { |
|
$success = $true |
|
} |
|
|
|
if ($createResultStatus -eq 409 -or $createResultStatus -eq 404 -or $createResultStatus -eq 401) # no retry when conflict or unauthorized or not found |
|
{ |
|
break |
|
} |
|
|
|
$retries = $retries + 1 |
|
sleep 1 |
|
} |
|
|
|
$createResultStatus |
|
$createResultStatusDescription |
|
return |
|
} |
|
|
|
Write-Host "Creating release in Sentry" |
|
|
|
Set-Variable -Name requestBody -Force -Scope Script |
|
$requestBody = @{} |
|
$requestBody.version = $version |
|
$requestBody.ref = $commit |
|
$requestBody.projects = @($project) |
|
$requestBody.dateReleased = $dateReleased.GetDateTimeFormats("s")[0] |
|
$requestBody.refs = @(@{ |
|
repository = $repository |
|
commit = $commit |
|
}) |
|
|
|
$bodyJson = $requestBody | ConvertTo-Json |
|
|
|
Write-Host $bodyJson |
|
|
|
$bodyBytes = [System.Text.Encoding]::UTF8.GetBytes($bodyJson) |
|
|
|
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" |
|
$headers.Add("Authorization", "Bearer $authToken") |
|
|
|
Set-Variable -Name createReleaseResult1 -Force -Scope Local -Value $null |
|
Set-Variable -Name createReleaseResultDescription -Force -Scope Local -Value "" |
|
|
|
$createReleaseResult1, $createReleaseResultDescription = CreateRelease |
|
if ($createReleaseResult1) |
|
{ |
|
$output = "Failed to create a release for version: {0}. Error {1}, Description: {2}." -f $requestBody.version, $createReleaseResult1, $createReleaseResultDescription |
|
throw $output |
|
} |
|
|
|
$str = "Release created. Version: {0}." -f $requestBody.version |
|
Write-Host $str |