in pkg/gcp/gcb/gcb.go [184:296]
func (g *GCB) Submit() error {
if err := g.options.Validate(); err != nil {
return errors.Wrap(err, "validating GCB options")
}
toolOrg := release.GetToolOrg()
toolRepo := release.GetToolRepo()
toolRef := release.GetToolRef()
if err := gcli.PreCheck(); err != nil {
return errors.Wrap(err, "pre-checking for GCP package usage")
}
if err := g.repoClient.Open(); err != nil {
return errors.Wrap(err, "open release repo")
}
if err := g.repoClient.CheckState(toolOrg, toolRepo, toolRef, g.options.NoMock); err != nil {
return errors.Wrap(err, "verifying repository state")
}
logrus.Infof("Running GCB with the following options: %+v", g.options)
g.options.NoSource = true
g.options.DiskSize = release.DefaultDiskSize
g.options.Async = true
if g.options.Stream {
g.options.Async = false
}
gcbSubs, gcbSubsErr := g.SetGCBSubstitutions(toolOrg, toolRepo, toolRef)
if gcbSubs == nil || gcbSubsErr != nil {
return gcbSubsErr
}
if g.options.NoMock {
// TODO: Consider a '--yes' flag so we can mock this
_, nomockSubmit, askErr := util.Ask(
fmt.Sprintf("Really submit a --nomock release job against the %s branch? (yes/no)", g.options.Branch),
"yes",
3,
)
if askErr != nil {
return askErr
}
if nomockSubmit {
gcbSubs["NOMOCK_TAG"] = "nomock"
gcbSubs["NOMOCK"] = fmt.Sprintf("--%s", gcbSubs["NOMOCK_TAG"])
}
} else {
// TODO: Remove once cloudbuild.yaml doesn't strictly require vars to be set.
gcbSubs["NOMOCK_TAG"] = ""
gcbSubs["NOMOCK"] = ""
bucketPrefix := release.BucketPrefix
userBucket := fmt.Sprintf("%s%s", bucketPrefix, gcbSubs["GCP_USER_TAG"])
userBucketSetErr := os.Setenv("USER_BUCKET", userBucket)
if userBucketSetErr != nil {
return userBucketSetErr
}
testBucket := fmt.Sprintf("%s%s", bucketPrefix, "gcb")
testBucketSetErr := os.Setenv("BUCKET", testBucket)
if testBucketSetErr != nil {
return testBucketSetErr
}
}
toolRoot, err := os.Getwd()
if err != nil {
return err
}
logrus.Info("Listing GCB substitutions prior to build submission...")
for k, v := range gcbSubs {
logrus.Infof("%s: %s", k, v)
}
var jobType string
switch {
// TODO: Consider a '--validate' flag to validate the GCB config without submitting
case g.options.Stage:
jobType = "stage"
case g.options.Release:
jobType = "release"
case g.options.FastForward:
jobType = "fast-forward"
default:
return g.listJobs(g.options.Project, g.options.LastJobs)
}
gcbSubs["LOG_LEVEL"] = g.options.LogLevel
g.options.ConfigDir = filepath.Join(toolRoot, "gcb", jobType)
prepareBuildErr := build.PrepareBuilds(&g.options.Options)
if prepareBuildErr != nil {
return prepareBuildErr
}
version, err := g.repoClient.GetTag()
if err != nil {
return errors.Wrap(err, "getting current tag")
}
return errors.Wrap(
build.RunSingleJob(&g.options.Options, "", "", version, gcbSubs),
"run GCB job",
)
}