github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/jobserver/rerun_build.go (about) 1 package jobserver 2 3 import ( 4 "encoding/json" 5 "errors" 6 "net/http" 7 8 "github.com/pf-qiu/concourse/v6/atc/api/present" 9 "github.com/pf-qiu/concourse/v6/atc/db" 10 ) 11 12 func (s *Server) RerunJobBuild(pipeline db.Pipeline) http.Handler { 13 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 14 w.Header().Set("Content-Type", "application/json") 15 logger := s.logger.Session("rerun-build") 16 17 jobName := r.FormValue(":job_name") 18 buildName := r.FormValue(":build_name") 19 20 job, found, err := pipeline.Job(jobName) 21 if err != nil { 22 logger.Error("failed-to-get-job", err) 23 w.WriteHeader(http.StatusInternalServerError) 24 return 25 } 26 27 if !found { 28 w.WriteHeader(http.StatusNotFound) 29 return 30 } 31 32 buildToRerun, found, err := job.Build(buildName) 33 if err != nil { 34 logger.Error("failed-to-get-build-to-rerun", err) 35 w.WriteHeader(http.StatusInternalServerError) 36 return 37 } 38 39 if !found { 40 w.WriteHeader(http.StatusNotFound) 41 return 42 } 43 44 if !buildToRerun.InputsReady() { 45 logger.Error("build-to-rerun-has-no-inputs", errors.New("build has no inputs")) 46 w.WriteHeader(http.StatusInternalServerError) 47 return 48 } 49 50 build, err := job.RerunBuild(buildToRerun) 51 if err != nil { 52 logger.Error("failed-to-retrigger-build", err) 53 w.WriteHeader(http.StatusInternalServerError) 54 return 55 } 56 57 err = json.NewEncoder(w).Encode(present.Build(build)) 58 if err != nil { 59 logger.Error("failed-to-encode-build", err) 60 w.WriteHeader(http.StatusInternalServerError) 61 } 62 }) 63 }