github.com/wtfutil/wtf@v0.43.0/modules/azuredevops/client.go (about)

     1  package azuredevops
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	azrBuild "github.com/microsoft/azure-devops-go-api/azuredevops/build"
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  func (widget *Widget) getBuildStats() string {
    12  	projName := widget.settings.projectName
    13  	statusFilter := azrBuild.BuildStatusValues.All
    14  	top := widget.settings.maxRows
    15  	builds, err := widget.cli.GetBuilds(widget.ctx, azrBuild.GetBuildsArgs{Project: &projName, StatusFilter: &statusFilter, Top: &top})
    16  	if err != nil {
    17  		return errors.Wrap(err, "could not get builds").Error()
    18  	}
    19  
    20  	result := ""
    21  	for _, build := range builds.Value {
    22  		num := *build.BuildNumber
    23  		branch := *build.SourceBranch
    24  		reason := *build.Reason
    25  		triggers := *build.TriggerInfo
    26  		if reason == azrBuild.BuildReasonValues.PullRequest {
    27  			branch = triggers["pr.sourceBranch"]
    28  		}
    29  		branch = strings.TrimPrefix(branch, "refs/heads/")
    30  		status := *build.Status
    31  		statusDisplay := "[white:grey]unknown"
    32  		if status == azrBuild.BuildStatusValues.InProgress {
    33  			statusDisplay = "[white:blue]in progress"
    34  		} else if status == azrBuild.BuildStatusValues.Cancelling {
    35  			statusDisplay = "[white:orange]in cancelling"
    36  		} else if (status == azrBuild.BuildStatusValues.Postponed) || (status == azrBuild.BuildStatusValues.NotStarted) {
    37  			statusDisplay = "[white:blue]waiting"
    38  		} else if status == azrBuild.BuildStatusValues.Completed {
    39  			buildResult := *build.Result
    40  			if buildResult == azrBuild.BuildResultValues.Succeeded {
    41  				statusDisplay = "[white:green]succeeded"
    42  			} else if buildResult == azrBuild.BuildResultValues.Failed {
    43  				statusDisplay = "[white:red]failed"
    44  			} else if buildResult == azrBuild.BuildResultValues.Canceled {
    45  				statusDisplay = "[white:darkgrey]cancelled"
    46  			} else if buildResult == azrBuild.BuildResultValues.PartiallySucceeded {
    47  				statusDisplay = "[white:magenta]partially"
    48  			}
    49  		}
    50  
    51  		result += fmt.Sprintf("%s[-:-:-] #%s %s (%s) \n", statusDisplay, num, branch, reason)
    52  	}
    53  
    54  	if result == "" {
    55  		result = "no builds found"
    56  	}
    57  
    58  	return result
    59  }