Move some common jenkins logic into the jenkins package
MultiPart: 2/2
Change-Id: Ia916ad40ebd4889b02010db70f6874ebbbaa0d38
diff --git a/presubmit/query.go b/presubmit/query.go
index 3a072e6..7937f3f 100644
--- a/presubmit/query.go
+++ b/presubmit/query.go
@@ -67,15 +67,13 @@
printf(jirix.Stdout(), "%d sent.\n", numSentCLs)
}()
- // Load Jenkins matrix jobs config.
- config, err := tooldata.LoadConfig(jirix)
+ jenkinsObj, err := jirix.Jenkins(jenkinsHostFlag)
if err != nil {
return err
}
- matrixJobsConf := config.JenkinsMatrixJobs()
// Don't query anything if the last "presubmit-test" build failed.
- lastBuildInfo, err := lastCompletedBuildStatus(jirix, presubmitTestJobFlag, axisValuesInfo{}, matrixJobsConf)
+ lastBuildInfo, err := jenkinsObj.LastCompletedBuildStatus(presubmitTestJobFlag, nil)
if err != nil {
fmt.Fprintf(jirix.Stderr(), "%v\n", err)
} else {
diff --git a/presubmit/result.go b/presubmit/result.go
index fcaa86a..1eb114e 100644
--- a/presubmit/result.go
+++ b/presubmit/result.go
@@ -112,36 +112,18 @@
PartIndex int
}
-// genBuildSpec returns a spec string for the given Jenkins build.
-//
-// If the main job is a multi-configuration job, the spec is in the form of:
-// <jobName>/axis1Label=axis1Value,axis2Label=axis2Value,.../<suffix>
-// The axis values are taken from the given axisValuesInfo object, and only
-// the axes set in the job's axisInfo object will appear in the spec.
-//
-// If the main job is not a multi-configuration job, the spec will be:
-// <jobName>/<suffix>.
-func genBuildSpec(jobName string, axisValues axisValuesInfo, suffix string, matrixJobsConf map[string]tooldata.JenkinsMatrixJobInfo) string {
- axis, ok := matrixJobsConf[jobName]
-
- // Not a multi-configuration job.
- if !ok {
- return fmt.Sprintf("%s/%s", jobName, suffix)
+func (avi *axisValuesInfo) AsMap(jobInfo tooldata.JenkinsMatrixJobInfo) map[string]string {
+ jobArgs := map[string]string{}
+ if jobInfo.HasArch {
+ jobArgs["ARCH"] = avi.Arch
}
-
- // Multi-configuration job.
- // The axis order doesn't matter.
- parts := []string{}
- if axis.HasArch {
- parts = append(parts, fmt.Sprintf("ARCH=%s", axisValues.Arch))
+ if jobInfo.HasOS {
+ jobArgs["OS"] = avi.OS
}
- if axis.HasOS {
- parts = append(parts, fmt.Sprintf("OS=%s", axisValues.OS))
+ if jobInfo.HasParts {
+ jobArgs["P"] = fmt.Sprintf("%d", avi.PartIndex)
}
- if axis.HasParts {
- parts = append(parts, fmt.Sprintf("P=%d", axisValues.PartIndex))
- }
- return fmt.Sprintf("%s/%s/%s", jobName, strings.Join(parts, ","), suffix)
+ return jobArgs
}
// genSubJobLabel returns a descriptive label for given Jenkins job's sub-job.
@@ -271,10 +253,13 @@
for _, resultInfo := range testResults {
name := resultInfo.TestName
timestamp := resultInfo.Timestamp
- axisValues := resultInfo.AxisValues
fmt.Fprintf(jirix.Stdout(), "Getting postsubmit build info for %q before timestamp %d...\n", resultInfo.key(), timestamp)
- buildInfo, err := lastCompletedBuildStatus(jirix, name, axisValues, matrixJobsConf)
+ var axisValuesMap map[string]string
+ if jobInfo, ok := matrixJobsConf[name]; ok {
+ axisValuesMap = resultInfo.AxisValues.AsMap(jobInfo)
+ }
+ buildInfo, err := jenkinsObj.LastCompletedBuildStatus(name, axisValuesMap)
if err != nil {
test.Fail(jirix.Context, "%v\n", err)
continue
@@ -287,7 +272,7 @@
}
for i := curId; i >= 0; i-- {
fmt.Fprintf(jirix.Stdout(), "Checking build %d...\n", i)
- buildSpec := genBuildSpec(name, resultInfo.AxisValues, fmt.Sprintf("%d", i), matrixJobsConf)
+ buildSpec := jenkins.GenBuildSpec(name, axisValuesMap, fmt.Sprintf("%d", i))
curBuildInfo, err := jenkinsObj.BuildInfoForSpec(buildSpec)
if err != nil {
test.Fail(jirix.Context, "%v\n", err)
@@ -541,22 +526,6 @@
return testFailed
}
-// lastCompletedBuildStatus gets the status of the last completed
-// build for a given Jenkins job.
-func lastCompletedBuildStatus(jirix *jiri.X, jobName string, axisValues axisValuesInfo, matrixJobsConf map[string]tooldata.JenkinsMatrixJobInfo) (*jenkins.BuildInfo, error) {
- jenkins, err := jirix.Jenkins(jenkinsHostFlag)
- if err != nil {
- return nil, err
- }
-
- buildSpec := genBuildSpec(jobName, axisValues, "lastCompletedBuild", matrixJobsConf)
- buildInfo, err := jenkins.BuildInfoForSpec(buildSpec)
- if err != nil {
- return nil, err
- }
- return buildInfo, nil
-}
-
type failureType int
const (