in tools/dockerversioning/scripts/cloudbuild/main.go [248:315]
func newCloudBuildTemplateData(
registry string, spec versions.Spec, options cloudBuildOptions) cloudBuildTemplateData {
data := cloudBuildTemplateData{}
data.RequireNewTags = options.RequireNewTags
// Defines the default docker image, if its not set
if (options.DockerImage == "") {
data.DockerImage = "gcr.io/cloud-builders/docker"
} else {
data.DockerImage = options.DockerImage
}
// Determine the set of directories to operate on.
dirs := make(map[string]bool)
if len(options.Directories) > 0 {
for _, d := range options.Directories {
dirs[d] = true
}
} else {
for _, v := range spec.Versions {
dirs[v.Dir] = true
}
}
// Extract tests to run.
var structureTests []string
var functionalTests []string
if options.RunTests {
// Legacy structure tests reside in the root tests/ directory.
structureTests = append(structureTests, readTests(testsDir)...)
structureTests = append(structureTests, readTests(structureTestsDir)...)
functionalTests = append(functionalTests, readTests(functionalTestsDir)...)
}
// Extract a list of full image names to build.
for _, v := range spec.Versions {
if !dirs[v.Dir] {
continue
}
var images []string
for _, t := range v.Tags {
image := fmt.Sprintf("%v/%v:%v", registry, v.Repo, t)
images = append(images, image)
if options.FirstTagOnly {
break
}
}
// Ignore builder images from images list
if !v.Builder {
data.AllImages = append(data.AllImages, images...)
}
versionSTests, versionFTests := filterTests(structureTests, functionalTests, v)
// Enforce to use ImageNameFromBuilder as reference to create tags
if v.BuilderImage != "" {
BuilderImageFull := fmt.Sprintf("%v/%v", registry, v.BuilderImage)
data.ImageBuilds = append(
data.ImageBuilds, imageBuildTemplateData{v.Dir, v.ImageNameFromBuilder, images, versionSTests, versionFTests, v.Builder, BuilderImageFull, v.BuilderArgs, v.ImageNameFromBuilder, v.Annotations, v.Labels})
} else {
data.ImageBuilds = append(
data.ImageBuilds, imageBuildTemplateData{v.Dir, images[0], images[1:], versionSTests, versionFTests, v.Builder, v.BuilderImage, v.BuilderArgs, v.ImageNameFromBuilder, v.Annotations, v.Labels})
}
}
data.TimeoutSeconds = options.TimeoutSeconds
data.MachineType = options.MachineType
data.Parallel = shouldParallelize(options, len(spec.Versions), len(functionalTests))
return data
}