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  }