github.com/drone/runner-go@v1.12.0/pipeline/uploader/upload.go (about) 1 package uploader 2 3 import ( 4 "context" 5 "encoding/json" 6 7 "github.com/drone/drone-go/drone" 8 "github.com/drone/runner-go/client" 9 "github.com/drone/runner-go/internal" 10 "github.com/drone/runner-go/pipeline" 11 ) 12 13 var _ pipeline.Uploader = (*Upload)(nil) 14 15 type Upload struct { 16 client client.Client 17 } 18 19 func New(client client.Client) *Upload { 20 return &Upload{ 21 client: client, 22 } 23 } 24 25 func (s *Upload) UploadCard(ctx context.Context, bytes []byte, state *pipeline.State, stepName string) error { 26 src := state.Find(stepName) 27 card := drone.CardInput{} 28 err := json.Unmarshal(bytes, &card) 29 if err != nil { 30 return err 31 } 32 err = s.client.UploadCard(ctx, src.ID, &card) 33 if err != nil { 34 return err 35 } 36 // update step schema 37 state.Lock() 38 src.Schema = card.Schema 39 cpy := internal.CloneStep(src) 40 state.Unlock() 41 err = s.client.UpdateStep(ctx, cpy) 42 if err == nil { 43 state.Lock() 44 internal.MergeStep(cpy, src) 45 state.Unlock() 46 } 47 return nil 48 }