refactor create / find / delete end points for cards (#3159)
* refactor create / find / delete end points for cards
This commit is contained in:
parent
df2da1c646
commit
8a27f0f0e8
9 changed files with 64 additions and 17 deletions
|
@ -78,16 +78,16 @@ func InitializeApplication(config2 config.Config) (application, error) {
|
|||
reaper := provideReaper(repositoryStore, buildStore, stageStore, coreCanceler, config2)
|
||||
coreLicense := provideLicense(client, config2)
|
||||
datadog := provideDatadog(userStore, repositoryStore, buildStore, system, coreLicense, config2)
|
||||
cardStore := card.New(db)
|
||||
logStore := provideLogStore(db, config2)
|
||||
logStream := livelog.New(redisDB)
|
||||
netrcService := provideNetrcService(client, renewer, config2)
|
||||
secretStore := secret.New(db, encrypter)
|
||||
globalSecretStore := global.New(db, encrypter)
|
||||
buildManager := manager.New(buildStore, configService, convertService, corePubsub, logStore, logStream, netrcService, repositoryStore, scheduler, secretStore, globalSecretStore, statusService, stageStore, stepStore, system, userStore, webhookSender)
|
||||
buildManager := manager.New(buildStore, cardStore, configService, convertService, corePubsub, logStore, logStream, netrcService, repositoryStore, scheduler, secretStore, globalSecretStore, statusService, stageStore, stepStore, system, userStore, webhookSender)
|
||||
secretService := provideSecretPlugin(config2)
|
||||
registryService := provideRegistryPlugin(config2)
|
||||
runner := provideRunner(buildManager, secretService, registryService, config2)
|
||||
cardStore := card.New(db)
|
||||
hookService := provideHookService(client, renewer, config2)
|
||||
licenseService := license.NewService(userStore, repositoryStore, buildStore, coreLicense)
|
||||
organizationService := provideOrgService(client, renewer)
|
||||
|
|
|
@ -16,9 +16,15 @@ package core
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io"
|
||||
)
|
||||
|
||||
type CardInput struct {
|
||||
Schema string `json:"schema"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
// CardStore manages repository cards.
|
||||
type CardStore interface {
|
||||
// Find returns a card data stream from the datastore.
|
||||
|
|
2
go.mod
2
go.mod
|
@ -60,4 +60,4 @@ require (
|
|||
|
||||
replace github.com/h2non/gock => gopkg.in/h2non/gock.v1 v1.0.14
|
||||
|
||||
go 1.13
|
||||
go 1.13
|
5
go.sum
5
go.sum
|
@ -78,10 +78,6 @@ github.com/drone/drone-go v1.4.1-0.20201109202657-b9e58bbbcf27/go.mod h1:fxCf9jA
|
|||
github.com/drone/drone-runtime v1.0.7-0.20190729202838-87c84080f4a1/go.mod h1:+osgwGADc/nyl40J0fdsf8Z09bgcBZXvXXnLOY48zYs=
|
||||
github.com/drone/drone-runtime v1.1.1-0.20200623162453-61e33e2cab5d h1:P5HI/Y9hARTZ3F3EKs0kYijhjXZWQRQHYn1neTi0pWM=
|
||||
github.com/drone/drone-runtime v1.1.1-0.20200623162453-61e33e2cab5d/go.mod h1:4/2QToW5+HGD0y1sTw7X35W1f7YINS14UfDY4isggT8=
|
||||
github.com/drone/drone-ui v2.2.1+incompatible h1:j5Py26SOjyPHCp294qmVCASeCQ+Q8l/fBNw8UqBPyNU=
|
||||
github.com/drone/drone-ui v2.2.1+incompatible/go.mod h1:NBtVWW7NNJpD9+huMD/5TAE1db2nrEh0i35/9Rf1MPI=
|
||||
github.com/drone/drone-ui v2.3.0+incompatible h1:iFNrvqF/huhKCmGFH80FapiIF4JscNkCfT9lSnm4+Is=
|
||||
github.com/drone/drone-ui v2.3.0+incompatible/go.mod h1:NBtVWW7NNJpD9+huMD/5TAE1db2nrEh0i35/9Rf1MPI=
|
||||
github.com/drone/drone-ui v2.3.1+incompatible h1:JYOer5JRttNjXGJhJnH/ELksr3ORO/OWZS19VdlGtro=
|
||||
github.com/drone/drone-ui v2.3.1+incompatible/go.mod h1:NBtVWW7NNJpD9+huMD/5TAE1db2nrEh0i35/9Rf1MPI=
|
||||
github.com/drone/drone-yaml v1.2.4-0.20200326192514-6f4d6dfb39e4 h1:XsstoCeXC2t8lA9OLTdoFwckaptqahxwjCWsenySfX8=
|
||||
|
@ -350,7 +346,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
|
|||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
|
|
|
@ -19,11 +19,6 @@ import (
|
|||
"github.com/go-chi/chi"
|
||||
)
|
||||
|
||||
type cardInput struct {
|
||||
Schema string `json:"schema"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
// HandleCreate returns an http.HandlerFunc that processes http
|
||||
// requests to create a new card.
|
||||
func HandleCreate(
|
||||
|
@ -57,7 +52,7 @@ func HandleCreate(
|
|||
return
|
||||
}
|
||||
|
||||
in := new(cardInput)
|
||||
in := new(core.CardInput)
|
||||
err = json.NewDecoder(r.Body).Decode(in)
|
||||
if err != nil {
|
||||
render.BadRequest(w, err)
|
||||
|
|
|
@ -18,6 +18,7 @@ import (
|
|||
"bytes"
|
||||
"context"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"time"
|
||||
|
||||
"github.com/drone/drone-yaml/yaml/converter"
|
||||
|
@ -65,10 +66,10 @@ type (
|
|||
// After signals the build step is complete.
|
||||
After(ctx context.Context, step *core.Step) error
|
||||
|
||||
// Before signals the build stage is about to start.
|
||||
// BeforeAll signals the build stage is about to start.
|
||||
BeforeAll(ctx context.Context, stage *core.Stage) error
|
||||
|
||||
// After signals the build stage is complete.
|
||||
// AfterAll signals the build stage is complete.
|
||||
AfterAll(ctx context.Context, stage *core.Stage) error
|
||||
|
||||
// Watch watches for build cancellation requests.
|
||||
|
@ -82,6 +83,9 @@ type (
|
|||
|
||||
// UploadBytes uploads the full logs
|
||||
UploadBytes(ctx context.Context, step int64, b []byte) error
|
||||
|
||||
// UploadCard creates a new card
|
||||
UploadCard(ctx context.Context, step int64, input *core.CardInput) error
|
||||
}
|
||||
|
||||
// Request provides filters when requesting a pending
|
||||
|
@ -101,6 +105,7 @@ type (
|
|||
// New returns a new Manager.
|
||||
func New(
|
||||
builds core.BuildStore,
|
||||
cards core.CardStore,
|
||||
config core.ConfigService,
|
||||
converter core.ConvertService,
|
||||
events core.Pubsub,
|
||||
|
@ -120,6 +125,7 @@ func New(
|
|||
) BuildManager {
|
||||
return &Manager{
|
||||
Builds: builds,
|
||||
Cards: cards,
|
||||
Config: config,
|
||||
Converter: converter,
|
||||
Events: events,
|
||||
|
@ -143,6 +149,7 @@ func New(
|
|||
// can more easily interact with the server.
|
||||
type Manager struct {
|
||||
Builds core.BuildStore
|
||||
Cards core.CardStore
|
||||
Config core.ConfigService
|
||||
Converter core.ConvertService
|
||||
Events core.Pubsub
|
||||
|
@ -535,3 +542,16 @@ func (m *Manager) UploadBytes(ctx context.Context, step int64, data []byte) erro
|
|||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// UploadCard creates card for step.
|
||||
func (m *Manager) UploadCard(ctx context.Context, stepId int64, input *core.CardInput) error {
|
||||
data := ioutil.NopCloser(
|
||||
bytes.NewBuffer(input.Data),
|
||||
)
|
||||
err := m.Cards.Create(ctx, stepId, data)
|
||||
if err != nil {
|
||||
logger := logrus.WithError(err)
|
||||
logger.Warnln("manager: cannot create card")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ package rpc
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
|
@ -208,6 +209,10 @@ func (s *Client) UploadBytes(ctx context.Context, step int64, data []byte) error
|
|||
return s.upload(noContext, endpoint, data)
|
||||
}
|
||||
|
||||
func (s *Client) UploadCard(ctx context.Context, step int64, input *core.CardInput) error {
|
||||
return errors.New("rpc upload card not supported")
|
||||
}
|
||||
|
||||
func (s *Client) send(ctx context.Context, path string, in, out interface{}) error {
|
||||
// Source a buffer from a pool. The agent may generate a
|
||||
// large number of small requests for log entries. This will
|
||||
|
|
|
@ -29,6 +29,7 @@ import (
|
|||
"github.com/go-chi/chi"
|
||||
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/handler/api/render"
|
||||
"github.com/drone/drone/operator/manager"
|
||||
"github.com/drone/drone/store/shared/db"
|
||||
)
|
||||
|
@ -270,6 +271,31 @@ func HandleLogUpload(m manager.BuildManager) http.HandlerFunc {
|
|||
}
|
||||
}
|
||||
|
||||
// HandleCardUpload returns an http.HandlerFunc that accepts an
|
||||
// http.Request to upload and persist a card for a pipeline step.
|
||||
//
|
||||
// POST /rpc/v2/step/{step}/card
|
||||
func HandleCardUpload(m manager.BuildManager) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
step, _ := strconv.ParseInt(
|
||||
chi.URLParam(r, "step"), 10, 64)
|
||||
|
||||
in := new(core.CardInput)
|
||||
err := json.NewDecoder(r.Body).Decode(in)
|
||||
if err != nil {
|
||||
render.BadRequest(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
err = m.UploadCard(noContext, step, in)
|
||||
if err != nil {
|
||||
writeError(w, err)
|
||||
} else {
|
||||
writeOK(w)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// write a 200 Status OK to the response body.
|
||||
func writeJSON(w http.ResponseWriter, v interface{}) {
|
||||
json.NewEncoder(w).Encode(v)
|
||||
|
|
|
@ -37,6 +37,7 @@ func NewServer(manager manager.BuildManager, secret string) Server {
|
|||
r.Post("/build/{build}/watch", HandleWatch(manager))
|
||||
r.Post("/step/{step}/logs/batch", HandleLogBatch(manager))
|
||||
r.Post("/step/{step}/logs/upload", HandleLogUpload(manager))
|
||||
r.Post("/step/{step}/card", HandleCardUpload(manager))
|
||||
return Server(r)
|
||||
}
|
||||
|
||||
|
@ -55,4 +56,3 @@ func authorization(token string) func(http.Handler) http.Handler {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue