in pkg/analyzer/ReportAnalyzer.go [234:288]
func getBranch(runResult *RunResult, extraData model.ExtraData, projectId string, logger *slog.Logger) (string, error) {
parser := parserPool.Get()
defer parserPool.Put(parser)
props, err := parser.ParseBytes(extraData.TcBuildProperties)
if err != nil {
return "", fmt.Errorf("failed to parse build properties: %w", err)
}
if projectId == "mlEvaluation" {
branch := props.GetStringBytes("teamcity.build.branch")
if branch != nil {
return string(branch), nil
}
return "master", nil
}
if projectId == "jbr" {
splitId := strings.SplitN(extraData.TcBuildType, "_", 4)
if len(splitId) == 4 {
jbrBranch := strings.ToLower(splitId[1]) + "_" + strings.ToLower(splitId[2])
return jbrBranch, nil
}
logger.Error("format of JBR project is unexpected", "teamcity.project.id", extraData.TcBuildType)
return "", errors.New("cannot infer branch from JBR project id")
}
if projectId == "qodana" {
qodanaImage := string(props.GetStringBytes("image"))
lastSlash := strings.LastIndex(qodanaImage, "/")
if lastSlash >= 0 {
return qodanaImage[lastSlash+1:], nil
}
logger.Warn("No slash found in string")
}
//goland:noinspection SpellCheckingInspection
branch := string(props.GetStringBytes("teamcity.build.branch"))
if branch != "" && branch != "<default>" {
return branch, nil
}
branchInt := props.GetInt("teamcity.build.branch")
if branchInt != 0 {
return strconv.Itoa(branchInt), nil
}
isMaster := props.GetStringBytes("vcsroot.ijplatform_master_IntelliJMonorepo.branch")
if len(isMaster) == 0 && runResult.BuildC1 != 0 {
// we check that the property doesn't exist so it is not a master
if runResult.BuildC3 == 0 {
return strconv.Itoa(runResult.BuildC1), nil
}
// we have EAP branch
return strconv.Itoa(runResult.BuildC1) + "." + strconv.Itoa(runResult.BuildC2), nil
}
return "master", nil
}