Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion stovepipe/controller/build/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ func (c *Controller) Process(ctx context.Context, delivery consumer.Delivery) er
baseURI = request.BaseURI
}

buildID, err := buildRunner.Trigger(ctx, baseURI, request.URI, nil)
buildID, err := buildRunner.Trigger(ctx, baseURI, request.URI, entity.BuildMetadata{
entity.BuildMetadataKeyRequestID: request.ID,
})
if err != nil {
return fmt.Errorf("failed to trigger build for request %s: %w", request.ID, err)
}
Expand Down
18 changes: 11 additions & 7 deletions stovepipe/controller/build/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,10 @@ func processingRequest(strategy entity.BuildStrategy, baseURI string) entity.Req
}
}

func requestBuildMetadata() entity.BuildMetadata {
return entity.BuildMetadata{entity.BuildMetadataKeyRequestID: testID}
}

func TestProcess(t *testing.T) {
tests := []struct {
name string
Expand All @@ -213,7 +217,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyIncrementalSinceGreen, testBaseURI)
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), testBaseURI, testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{ID: testBuildID}, nil)
m.runner.EXPECT().Trigger(gomock.Any(), testBaseURI, testHeadURI, requestBuildMetadata()).Return(entity.BuildID{ID: testBuildID}, nil)
build := entity.Build{
ID: testBuildID,
RequestID: testID,
Expand All @@ -231,7 +235,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyFull, testBaseURI)
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{ID: testBuildID}, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, requestBuildMetadata()).Return(entity.BuildID{ID: testBuildID}, nil)
build := entity.Build{
ID: testBuildID,
RequestID: testID,
Expand Down Expand Up @@ -319,7 +323,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyFull, "")
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{}, errors.New("runner down"))
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, requestBuildMetadata()).Return(entity.BuildID{}, errors.New("runner down"))
},
},
{
Expand All @@ -329,7 +333,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyFull, "")
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{ID: testBuildID}, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, requestBuildMetadata()).Return(entity.BuildID{ID: testBuildID}, nil)
m.buildStore.EXPECT().Create(gomock.Any(), gomock.Any()).Return(storage.ErrAlreadyExists)
},
},
Expand All @@ -341,7 +345,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyFull, "")
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{ID: testBuildID}, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, requestBuildMetadata()).Return(entity.BuildID{ID: testBuildID}, nil)
m.buildStore.EXPECT().Create(gomock.Any(), gomock.Any()).Return(errors.New("db down"))
},
},
Expand All @@ -352,7 +356,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyFull, "")
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{ID: testBuildID}, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, requestBuildMetadata()).Return(entity.BuildID{ID: testBuildID}, nil)
createCall := m.buildStore.EXPECT().Create(gomock.Any(), gomock.Any()).Return(nil)
request := entity.Request{ID: testID, Queue: testQueue}
m.materializer.EXPECT().PersistLog(
Expand All @@ -375,7 +379,7 @@ func TestProcess(t *testing.T) {
req := processingRequest(entity.BuildStrategyFull, "")
m.reqStore.EXPECT().Get(gomock.Any(), testID).Return(req, nil)
m.runnerFactory.EXPECT().For(buildrunner.Config{QueueName: testQueue}).Return(m.runner, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, entity.BuildMetadata(nil)).Return(entity.BuildID{ID: testBuildID}, nil)
m.runner.EXPECT().Trigger(gomock.Any(), "", testHeadURI, requestBuildMetadata()).Return(entity.BuildID{ID: testBuildID}, nil)
createCall := m.buildStore.EXPECT().Create(gomock.Any(), gomock.Any()).Return(nil)
logCall := expectBuildTriggered(m).After(createCall)
m.publisher.EXPECT().Publish(gomock.Any(), "buildsignal", gomock.Any()).Return(errors.New("queue down")).After(logCall)
Expand Down
10 changes: 6 additions & 4 deletions stovepipe/entity/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@

package entity

const (
// BuildMetadataKeyRequestID identifies the Stovepipe request associated with a build.
BuildMetadataKeyRequestID = "request_id"
)

// BuildStatus defines the possible states of a build. Shaped the same as
// SubmitQueue's own BuildStatus (submitqueue/entity/build.go), but defined
// locally rather than shared — see build.md's "Alternatives considered for
Expand Down Expand Up @@ -80,8 +85,5 @@ type BuildID struct {
}

// BuildMetadata carries caller-supplied, provider-echoed free-form metadata
// about a build. The runner must not depend on its contents. Empty today;
// expected to carry real data eventually (e.g. conflict-graph info, or other
// upstream decisions relevant to the build) once a concrete need lands in
// either domain — the shape is deferred until then, not decided here.
// about a build. The runner must not require any key to trigger a build.
type BuildMetadata map[string]string
Loading