func submitBuild()

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
}