Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
# $global:apiToken = "APP-TOKEN-GENERATED-BY-YOUR-APPCENTER-ACCOUNT"
# $global:appName = "THE NAME OF THE APP IN APPCENTER (You can find this in the URL of the app. eg: account/app-name)"
# $global:branchName = "THE BRANCH YOU HAVE CONFIGURED TO BUILD (eg feature/addAuth)"
function Login(){
appcenter login --token $global:apiToken
}
try{
## Login to AppCenter
Login
## Get configured branches
$configuredBranches = appcenter build branches list -a $global:appName --output json | ConvertFrom-Json
## Only branches configured on AppCenter can be built
## If branch is not configured, exit with a failure
if(($configuredBranches | Where-Object { $_.sourceBranch -eq "$global:branchName" } | Measure-Object).Count -eq 0){
Write-Host "The branch $global:branchName has not been configured yet. Please do so on Appcenter." -ForegroundColor Red
Write-Host "The branch $global:branchName has not been configured yet. If the branch has been configured, manually start the first build for the CLI to pick it up." -ForegroundColor Red
$Host.SetShouldExit(1)
exit 1
}
else{
## Kick off a new build
appcenter build queue --app $global:appName -b $global:branchName
Write-Host "Build has been queued on AppCenter"
$buildComplete = $false;
## WHILE BUILD IS IN PROGRESS
while ($buildComplete -eq $false) {
## Get the latest status for the build that was just queued
$buildStatus = appcenter build branches show -a $global:appName -b $global:branchName --output json | ConvertFrom-Json
## If the build status is completed
if($buildStatus.status -eq "completed"){
## Build has completed
if($buildStatus.result -eq "succeeded"){
Write-Host "Build has complete and the app is being processed on the Playstore"
## If this is a UAT build, notify collaborators of new build
if($global:appName -eq "geradebbd.co.za/rtc-mobile-uat"){
## Get all releases
$releases = appcenter distribute releases list -a $global:appName --output json | ConvertFrom-Json
## Get the release for this build
$builRelease = $releases | Where-Object { $_.version -eq "$($buildStatus.buildNumber)" }
## If there was a release for this build, notify collaborators
if(!($null -eq $builRelease)){
Write-Host "Distributing and notifying collaborators of new build available for testing"
appcenter distribute releases add-destination -d "Collaborators" -t "group" -r $builRelease.id -a $global:appName
}
else{
Write-Host "No release for build. Collaborators will not be notified."
}
}
}
elseif($buildStatus.result -eq "failed"){
## If the build failed on AppCenter, exit CI job with a failure
Write-Host "Build failed on AppCenter. Please login to AppCenter to view the logs."
$Host.SetShouldExit(1)
exit 1
}
elseif($buildStatus.result -eq "canceled"){
##Build was canceled on AppCenter
Write-Host "Build was canceled on AppCenter."
}
## Break out of while loop
$buildComplete = $true
}
else{
## Notify CI logs that build is still in progress
Write-Host "Build is still in progress"
## sleep for 15 seconds before checking for status again
Start-Sleep -Seconds 15
}
}
}
}catch {
Write-Host $_.Exception
$Host.SetShouldExit(1)
exit 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment