harness-drone/handler/api/repos/builds/latest.go
2019-02-19 15:56:41 -08:00

50 lines
1.2 KiB
Go

// Copyright 2019 Drone.IO Inc. All rights reserved.
// Use of this source code is governed by the Drone Non-Commercial License
// that can be found in the LICENSE file.
package builds
import (
"fmt"
"net/http"
"github.com/drone/drone/handler/api/render"
"github.com/drone/drone/core"
"github.com/go-chi/chi"
)
// HandleLast returns an http.HandlerFunc that writes json-encoded
// build details to the the response body for the latest build.
func HandleLast(
repos core.RepositoryStore,
builds core.BuildStore,
stages core.StageStore,
) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var (
namespace = chi.URLParam(r, "owner")
name = chi.URLParam(r, "name")
ref = r.FormValue("ref")
)
repo, err := repos.FindName(r.Context(), namespace, name)
if err != nil {
render.NotFound(w, err)
return
}
if ref == "" {
ref = fmt.Sprintf("refs/heads/%s", repo.Branch)
}
build, err := builds.FindRef(r.Context(), repo.ID, ref)
if err != nil {
render.NotFound(w, err)
return
}
stages, err := stages.ListSteps(r.Context(), build.ID)
if err != nil {
render.InternalError(w, err)
return
}
render.JSON(w, &buildWithStages{build, stages}, 200)
}
}