func BuildCreate(rw http.ResponseWriter, r *http.Request) *httperr.Error { vars := mux.Vars(r) app := vars["app"] cache := !(r.FormValue("cache") == "false") manifest := r.FormValue("manifest") description := r.FormValue("description") repo := r.FormValue("repo") index := r.FormValue("index") source, _, err := r.FormFile("source") if err != nil && err != http.ErrMissingFile && err != http.ErrNotMultipart { helpers.TrackError("build", err, map[string]interface{}{"at": "FormFile"}) return httperr.Server(err) } // Log into private registries that we might pull from // TODO: move to prodiver BuildCreate err = models.LoginPrivateRegistries() if err != nil { return httperr.Server(err) } a, err := models.GetApp(app) if err != nil { return httperr.Server(err) } // Log into registry that we will push to _, err = models.AppDockerLogin(*a) if err != nil { return httperr.Server(err) } var b *structs.Build // if source file was posted, build from tar if source != nil { b, err = models.Provider().BuildCreateTar(app, source, r.FormValue("manifest"), r.FormValue("description"), cache) } else if repo != "" { b, err = models.Provider().BuildCreateRepo(app, repo, r.FormValue("manifest"), r.FormValue("description"), cache) } else if index != "" { var i structs.Index err := json.Unmarshal([]byte(index), &i) if err != nil { return httperr.Server(err) } b, err = models.Provider().BuildCreateIndex(app, i, manifest, description, cache) } else { return httperr.Errorf(403, "no source, repo or index") } if err != nil { return httperr.Server(err) } return RenderJson(rw, b) }
func main() { // prime the API and instance for builds by logging into private registries // and pulling down latest app images go func() { models.LoginPrivateRegistries() models.PullAppImages() }() startWeb() }