// Given the patch version and a list of build variants, creates new builds // with the patch's tasks. func AddNewBuildsForPatch(p *patch.Patch, patchVersion *version.Version, project *Project, buildVariants []string) (*version.Version, error) { // compute a list of the newly added build variants var newVariants []string for _, variant := range buildVariants { if !util.SliceContains(p.BuildVariants, variant) { newVariants = append(newVariants, variant) } } // update the patch if err := p.AddBuildVariants(buildVariants); err != nil { return nil, err } newBuildIds := make([]string, 0) newBuildStatuses := make([]version.BuildStatus, 0) tt := BuildTaskIdTable(project, patchVersion) for _, buildVariant := range newVariants { evergreen.Logger.Logf(slogger.INFO, "Creating build for version %v, buildVariant %v, activated = %v", patchVersion.Id, buildVariant, p.Activated) buildId, err := CreateBuildFromVersion( project, patchVersion, tt, buildVariant, p.Activated, p.Tasks) if err != nil { return nil, err } newBuildIds = append(newBuildIds, buildId) newBuildStatuses = append(newBuildStatuses, version.BuildStatus{ BuildVariant: buildVariant, BuildId: buildId, Activated: p.Activated, }, ) patchVersion.BuildIds = append(patchVersion.BuildIds, buildId) } err := version.UpdateOne( bson.M{version.IdKey: patchVersion.Id}, bson.M{ "$push": bson.M{ version.BuildIdsKey: bson.M{"$each": newBuildIds}, version.BuildVariantsKey: bson.M{"$each": newBuildStatuses}, }, }, ) if err != nil { return nil, err } return patchVersion, nil }