github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/jobserver/create_build.go (about) 1 package jobserver 2 3 import ( 4 "context" 5 "encoding/json" 6 "net/http" 7 8 "code.cloudfoundry.org/lager/lagerctx" 9 "github.com/pf-qiu/concourse/v6/atc/api/present" 10 "github.com/pf-qiu/concourse/v6/atc/db" 11 ) 12 13 func (s *Server) CreateJobBuild(pipeline db.Pipeline) http.Handler { 14 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 15 w.Header().Set("Content-Type", "application/json") 16 logger := s.logger.Session("create-job-build") 17 18 jobName := r.FormValue(":job_name") 19 20 job, found, err := pipeline.Job(jobName) 21 if err != nil { 22 logger.Error("failed-to-get-resource-types", err) 23 w.WriteHeader(http.StatusInternalServerError) 24 return 25 } 26 27 if !found { 28 w.WriteHeader(http.StatusNotFound) 29 return 30 } 31 32 if job.DisableManualTrigger() { 33 w.WriteHeader(http.StatusConflict) 34 return 35 } 36 37 build, err := job.CreateBuild() 38 if err != nil { 39 logger.Error("failed-to-create-job-build", err) 40 w.WriteHeader(http.StatusInternalServerError) 41 return 42 } 43 44 resources, err := pipeline.Resources() 45 if err != nil { 46 logger.Error("failed-to-get-resources", err) 47 w.WriteHeader(http.StatusInternalServerError) 48 return 49 } 50 51 resourceTypes, err := pipeline.ResourceTypes() 52 if err != nil { 53 logger.Error("failed-to-get-resource-types", err) 54 w.WriteHeader(http.StatusInternalServerError) 55 return 56 } 57 58 inputs, err := job.Inputs() 59 if err != nil { 60 logger.Error("failed-to-get-job-inputs", err) 61 w.WriteHeader(http.StatusInternalServerError) 62 return 63 } 64 65 for _, input := range inputs { 66 resource, found := resources.Lookup(input.Resource) 67 if found { 68 version := resource.CurrentPinnedVersion() 69 _, _, err := s.checkFactory.TryCreateCheck( 70 lagerctx.NewContext(context.Background(), logger), 71 resource, 72 resourceTypes, 73 version, 74 true, 75 ) 76 if err != nil { 77 logger.Error("failed-to-create-check", err) 78 } 79 } 80 } 81 82 err = json.NewEncoder(w).Encode(present.Build(build)) 83 if err != nil { 84 logger.Error("failed-to-encode-build", err) 85 w.WriteHeader(http.StatusInternalServerError) 86 } 87 }) 88 }