func getBranch()

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
}