github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/buildserver/create.go (about)

     1  package buildserver
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     7  	"code.cloudfoundry.org/lager"
     8  	"github.com/pf-qiu/concourse/v6/atc"
     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) CreateBuild(team db.Team) http.Handler {
    14  	hLog := s.logger.Session("create-build")
    15  
    16  	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    17  		var plan atc.Plan
    18  		err := json.NewDecoder(r.Body).Decode(&plan)
    19  		if err != nil {
    20  			hLog.Info("malformed-request", lager.Data{"error": err.Error()})
    21  			w.WriteHeader(http.StatusBadRequest)
    22  			return
    23  		}
    24  
    25  		build, err := team.CreateStartedBuild(plan)
    26  		if err != nil {
    27  			hLog.Error("failed-to-create-one-off-build", err)
    28  			w.WriteHeader(http.StatusInternalServerError)
    29  			return
    30  		}
    31  
    32  		w.Header().Set("Content-Type", "application/json")
    33  		w.WriteHeader(http.StatusCreated)
    34  
    35  		err = json.NewEncoder(w).Encode(present.Build(build))
    36  		if err != nil {
    37  			hLog.Error("failed-to-encode-build", err)
    38  			w.WriteHeader(http.StatusInternalServerError)
    39  		}
    40  	})
    41  }