Build/Rerun-FailedInsiderBuilds.ps1

function Rerun-FailedInsiderBuilds{
    $InsiderRepos = Invoke-TFSAPI ('{0}/_apis/git/repositories' -f (Get-TFSCollectionURL))
    $InsiderRepos = $InsiderRepos.value | Where-Object name  -like '*-BC'
    foreach($Repo in $InsiderRepos){
        $Branches = Invoke-TFSAPI ('{0}/refs' -f $Repo.url)
        $Branches = $Branches.value | Where-Object name  -like 'refs/heads/build/insider*'
        foreach($Branch in $Branches){
            $LastBuildUrl = ('{0}/build/builds?$top=1&branchName={1}' -f $Branch.url.Substring(0, $Branch.url.IndexOf('/git')), $Branch.name)
            $LastBuild = Invoke-TFSAPI $LastBuildUrl
            if($LastBuild.value.result -eq 'failed'){ #result: succeeded,failed
                $Logs = Invoke-TFSAPI $LastBuild.value.Logs.url

                foreach($Log in $Logs.value | Sort-Object id -Descending){
                    $RawLog = Invoke-TFSAPI ('{0}?endLine=1' -f $Log.url)   
                    if($RawLog -match 'Create packages and execute tests'){
                        $FullRawLog = Invoke-TFSAPI $Log.url

                        if(!($FullRawLog -match 'Container Build[0-9]* successfully created')){
                            Write-Host "Retrying failed build $LastBuild.value.buildNumber - $Repo.name: $LastBuild.value.sourceBranch" -ForegroundColor Green
                            $Response = Invoke-TFSAPI -Url ('{0}/?retry=true&api-version=6.0' -f $LastBuild.value.url) -HttpMethod Patch
                        }
                        break
                    }
                }           
            }
        }
    }
}

Export-ModuleMember -Function Rerun-FailedInsiderBuilds