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)
|
reaper := provideReaper(repositoryStore, buildStore, stageStore, coreCanceler, config2)
|
||||||
coreLicense := provideLicense(client, config2)
|
coreLicense := provideLicense(client, config2)
|
||||||
datadog := provideDatadog(userStore, repositoryStore, buildStore, system, coreLicense, config2)
|
datadog := provideDatadog(userStore, repositoryStore, buildStore, system, coreLicense, config2)
|
||||||
|
cardStore := card.New(db)
|
||||||
logStore := provideLogStore(db, config2)
|
logStore := provideLogStore(db, config2)
|
||||||
logStream := livelog.New(redisDB)
|
logStream := livelog.New(redisDB)
|
||||||
netrcService := provideNetrcService(client, renewer, config2)
|
netrcService := provideNetrcService(client, renewer, config2)
|
||||||
secretStore := secret.New(db, encrypter)
|
secretStore := secret.New(db, encrypter)
|
||||||
globalSecretStore := global.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)
|
secretService := provideSecretPlugin(config2)
|
||||||
registryService := provideRegistryPlugin(config2)
|
registryService := provideRegistryPlugin(config2)
|
||||||
runner := provideRunner(buildManager, secretService, registryService, config2)
|
runner := provideRunner(buildManager, secretService, registryService, config2)
|
||||||
cardStore := card.New(db)
|
|
||||||
hookService := provideHookService(client, renewer, config2)
|
hookService := provideHookService(client, renewer, config2)
|
||||||
licenseService := license.NewService(userStore, repositoryStore, buildStore, coreLicense)
|
licenseService := license.NewService(userStore, repositoryStore, buildStore, coreLicense)
|
||||||
organizationService := provideOrgService(client, renewer)
|
organizationService := provideOrgService(client, renewer)
|
||||||
|
|
|
@ -16,9 +16,15 @@ package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type CardInput struct {
|
||||||
|
Schema string `json:"schema"`
|
||||||
|
Data json.RawMessage `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
// CardStore manages repository cards.
|
// CardStore manages repository cards.
|
||||||
type CardStore interface {
|
type CardStore interface {
|
||||||
// Find returns a card data stream from the datastore.
|
// 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
|
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.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 h1:P5HI/Y9hARTZ3F3EKs0kYijhjXZWQRQHYn1neTi0pWM=
|
||||||
github.com/drone/drone-runtime v1.1.1-0.20200623162453-61e33e2cab5d/go.mod h1:4/2QToW5+HGD0y1sTw7X35W1f7YINS14UfDY4isggT8=
|
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 h1:JYOer5JRttNjXGJhJnH/ELksr3ORO/OWZS19VdlGtro=
|
||||||
github.com/drone/drone-ui v2.3.1+incompatible/go.mod h1:NBtVWW7NNJpD9+huMD/5TAE1db2nrEh0i35/9Rf1MPI=
|
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=
|
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-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-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-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-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-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
|
|
|
@ -19,11 +19,6 @@ import (
|
||||||
"github.com/go-chi/chi"
|
"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
|
// HandleCreate returns an http.HandlerFunc that processes http
|
||||||
// requests to create a new card.
|
// requests to create a new card.
|
||||||
func HandleCreate(
|
func HandleCreate(
|
||||||
|
@ -57,7 +52,7 @@ func HandleCreate(
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
in := new(cardInput)
|
in := new(core.CardInput)
|
||||||
err = json.NewDecoder(r.Body).Decode(in)
|
err = json.NewDecoder(r.Body).Decode(in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
render.BadRequest(w, err)
|
render.BadRequest(w, err)
|
||||||
|
|
|
@ -18,6 +18,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/drone/drone-yaml/yaml/converter"
|
"github.com/drone/drone-yaml/yaml/converter"
|
||||||
|
@ -65,10 +66,10 @@ type (
|
||||||
// After signals the build step is complete.
|
// After signals the build step is complete.
|
||||||
After(ctx context.Context, step *core.Step) error
|
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
|
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
|
AfterAll(ctx context.Context, stage *core.Stage) error
|
||||||
|
|
||||||
// Watch watches for build cancellation requests.
|
// Watch watches for build cancellation requests.
|
||||||
|
@ -82,6 +83,9 @@ type (
|
||||||
|
|
||||||
// UploadBytes uploads the full logs
|
// UploadBytes uploads the full logs
|
||||||
UploadBytes(ctx context.Context, step int64, b []byte) error
|
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
|
// Request provides filters when requesting a pending
|
||||||
|
@ -101,6 +105,7 @@ type (
|
||||||
// New returns a new Manager.
|
// New returns a new Manager.
|
||||||
func New(
|
func New(
|
||||||
builds core.BuildStore,
|
builds core.BuildStore,
|
||||||
|
cards core.CardStore,
|
||||||
config core.ConfigService,
|
config core.ConfigService,
|
||||||
converter core.ConvertService,
|
converter core.ConvertService,
|
||||||
events core.Pubsub,
|
events core.Pubsub,
|
||||||
|
@ -120,6 +125,7 @@ func New(
|
||||||
) BuildManager {
|
) BuildManager {
|
||||||
return &Manager{
|
return &Manager{
|
||||||
Builds: builds,
|
Builds: builds,
|
||||||
|
Cards: cards,
|
||||||
Config: config,
|
Config: config,
|
||||||
Converter: converter,
|
Converter: converter,
|
||||||
Events: events,
|
Events: events,
|
||||||
|
@ -143,6 +149,7 @@ func New(
|
||||||
// can more easily interact with the server.
|
// can more easily interact with the server.
|
||||||
type Manager struct {
|
type Manager struct {
|
||||||
Builds core.BuildStore
|
Builds core.BuildStore
|
||||||
|
Cards core.CardStore
|
||||||
Config core.ConfigService
|
Config core.ConfigService
|
||||||
Converter core.ConvertService
|
Converter core.ConvertService
|
||||||
Events core.Pubsub
|
Events core.Pubsub
|
||||||
|
@ -535,3 +542,16 @@ func (m *Manager) UploadBytes(ctx context.Context, step int64, data []byte) erro
|
||||||
}
|
}
|
||||||
return err
|
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 (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -208,6 +209,10 @@ func (s *Client) UploadBytes(ctx context.Context, step int64, data []byte) error
|
||||||
return s.upload(noContext, endpoint, data)
|
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 {
|
func (s *Client) send(ctx context.Context, path string, in, out interface{}) error {
|
||||||
// Source a buffer from a pool. The agent may generate a
|
// Source a buffer from a pool. The agent may generate a
|
||||||
// large number of small requests for log entries. This will
|
// large number of small requests for log entries. This will
|
||||||
|
|
|
@ -29,6 +29,7 @@ import (
|
||||||
"github.com/go-chi/chi"
|
"github.com/go-chi/chi"
|
||||||
|
|
||||||
"github.com/drone/drone/core"
|
"github.com/drone/drone/core"
|
||||||
|
"github.com/drone/drone/handler/api/render"
|
||||||
"github.com/drone/drone/operator/manager"
|
"github.com/drone/drone/operator/manager"
|
||||||
"github.com/drone/drone/store/shared/db"
|
"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.
|
// write a 200 Status OK to the response body.
|
||||||
func writeJSON(w http.ResponseWriter, v interface{}) {
|
func writeJSON(w http.ResponseWriter, v interface{}) {
|
||||||
json.NewEncoder(w).Encode(v)
|
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("/build/{build}/watch", HandleWatch(manager))
|
||||||
r.Post("/step/{step}/logs/batch", HandleLogBatch(manager))
|
r.Post("/step/{step}/logs/batch", HandleLogBatch(manager))
|
||||||
r.Post("/step/{step}/logs/upload", HandleLogUpload(manager))
|
r.Post("/step/{step}/logs/upload", HandleLogUpload(manager))
|
||||||
|
r.Post("/step/{step}/card", HandleCardUpload(manager))
|
||||||
return Server(r)
|
return Server(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,4 +56,3 @@ func authorization(token string) func(http.Handler) http.Handler {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue