Formatting/PSDevOps.Build.format.ps1

Write-FormatView -TypeName PSDevOps.Build -Action {
    Write-FormatViewExpression -ScriptBlock { $_.Definition.Name + ' ' + $_.BuildNumber + ' [' }
    
    Write-FormatViewExpression -ForegroundColor 'PSDevOps.Build.Succeeded' -If {
        $_.Result -eq 'Succeeded'
    } -ScriptBlock {
        $_.Result
    }

    Write-FormatViewExpression -ForegroundColor 'PSDevOps.Build.Failed' -If {
        $_.Result -eq 'Failed'
    } -ScriptBlock {
        $_.Result
    }

    Write-FormatViewExpression -ForegroundColor 'PSDevOps.Build.NotStarted' -If {
        $_.Status -eq 'notStarted'
    } -ScriptBlock {
        $_.Status
    }

    Write-FormatViewExpression -ForegroundColor 'PSDevOps.Build.InProgress' -If {
        $_.Status -eq 'inProgress'
    } -ScriptBlock {
        if ($_.QueueTime -and -not $_.StartTime) {
            'Queued'
        } elseif ($_.StartTime -and -not $_.FinishTime) {
            'Running'
        }        
    }

    Write-FormatViewExpression -ScriptBlock {
        if ($_.Status -eq 'inProgress') {
            if ($_.QueueTime -and -not $_.StartTime) {
                ' for ' + ([DateTime]::Now - $([Datetime]$_.QueueTime).ToLocalTime()).ToString().Substring(0,8)
            } else {
                ' for ' + ([DateTime]::Now - $([DateTime]$_.StartTime).ToLocalTime()).ToString().Substring(0,8)
            }
        } else {
            " in " + ([DateTime]($_.FinishTime) - [DateTime]($_.StartTime)).ToString().Substring(0,8)
        }    
    }

    Write-FormatViewExpression -Text ']'
    
    Write-FormatViewExpression -Newline
    Write-FormatViewExpression -ScriptBlock {
        '=' * ($_.Definition.Name.Length + 
            $_.BuildNumber.Length + 
            $_.Result.Length + 4 + $(
                if ($_.FinishTime) { 4 + 8 }
                else { 
                    5 + 8 + $(if (-not $_.StartTime) { 'Queued'.Length} else { 'Running'.Length }) 
                })
            )
    }
    Write-FormatViewExpression -Newline

    Write-FormatViewExpression -ScriptBlock {
        $_.Reason + ' of ' + $_.sourceBranch + ' for ' + $_.RequestedFor.DisplayName 
    }

    Write-FormatViewExpression -Newline

    Write-FormatViewExpression -ScriptBlock {
        '-' * ($_.Reason.Length + 4 + $_.sourceBranch.Length + 5 + $_.RequestedFor.DisplayName.Length)
    }

    Write-FormatViewExpression -Newline
    
    Write-FormatViewExpression -If { $_.ChangeSet } -ScriptBlock {
        "### Changes:" + [Environment]::NewLine
    }
    Write-FormatViewExpression -If { $_.ChangeSet } -ScriptBlock {
        ' * ' + (@($_.ChangeSet | Select-Object -ExpandProperty Message) -join "$([Environment]::NewLine) * ")
    }
}