in cron-helper/appengine/appengine.go [46:91]
func submitBuild(ctx context.Context) (string, error) {
// Get build YAML from Datastore
k := datastore.NewKey(ctx, "YAMLWrapper", "ID", 0, nil)
y := new(YAMLWrapper)
if err := datastore.Get(ctx, k, y); err != nil {
log.Errorf(ctx, "Cannot get YAML from Datastore: %q", err)
return "", err
}
b := new(cloudbuild.Build)
err := yaml.Unmarshal([]byte(y.Value), &b)
if err != nil {
log.Errorf(ctx, "Value from Datastore is not valid YAML: %q", err)
return "", err
}
log.Infof(ctx, "Got build config from Datastore: %q", b)
b.Tags = []string{"cron-helper"}
//
transport := &oauth2.Transport{
Source: google.AppEngineTokenSource(ctx, cloudbuild.CloudPlatformScope),
Base: &urlfetch.Transport{Context: ctx},
}
client := &http.Client{Transport: transport}
svc, err := cloudbuild.New(client)
if err != nil {
log.Errorf(ctx, "Cannot initiate cloudbuild client: %q", err)
return "", err
}
projectID := appengine.AppID(ctx)
cr := svc.Projects.Builds.Create(projectID, b)
results, err := cr.Do()
if err != nil {
log.Errorf(ctx, "Create build failed: %q", err)
return "", err
}
resultString, err := results.MarshalJSON()
if err != nil {
log.Errorf(ctx, "Results Marshal JSON failed: %q", err)
return "", err
}
return fmt.Sprintf("Build results: %q", resultString), nil
}