Skip to content

Commit 12f7f11

Browse files
committed
refactor(changeprovider): accept entity.Request, resolve change internally
Change ChangeProvider.Get to take the orchestrator's request identity (entity.Request) instead of a controller-pre-resolved entity.Change, per the extension contract. The GitHub implementation and the fake read request.Change themselves; the validate controller hands over the request it already loaded. Output is unchanged: one entity.ChangeInfo per URI, each self-identifying by URI. The provider is the external resolver, so it needs no injected dependency — the factory and Config are unchanged.
1 parent 97090a1 commit 12f7f11

8 files changed

Lines changed: 27 additions & 23 deletions

File tree

submitqueue/extension/changeprovider/change_provider.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ import (
2929
// entity.Author, entity.ChangedFile — live in the entity package so the same typed
3030
// facts can be persisted (entity.ChangeRecord) and scored without re-declaration.
3131
type ChangeProvider interface {
32-
// Get retrieves change information for the provided Change.
32+
// Get retrieves change information for the provided request.
33+
// It is handed the request identity and reads request.Change itself.
3334
// For a Change with multiple URIs (e.g., stacked PRs), returns one ChangeInfo per URI.
3435
// Returns a slice of ChangeInfo, one for each change in the stack.
35-
Get(ctx context.Context, change entity.Change) ([]entity.ChangeInfo, error)
36+
Get(ctx context.Context, request entity.Request) ([]entity.ChangeInfo, error)
3637
}
3738

3839
// Config carries the per-queue identity handed to a Factory. The system knows

submitqueue/extension/changeprovider/fake/fake.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@ func New() changeprovider.ChangeProvider {
4747
return provider{}
4848
}
4949

50-
// Get returns one ChangeInfo per URI in the change, unless a recognized marker
51-
// token requests a failure. The "one ChangeInfo per URI" contract is preserved.
52-
func (provider) Get(_ context.Context, change entity.Change) ([]entity.ChangeInfo, error) {
50+
// Get returns one ChangeInfo per URI in the request's change, unless a recognized
51+
// marker token requests a failure. The "one ChangeInfo per URI" contract is preserved.
52+
func (provider) Get(_ context.Context, request entity.Request) ([]entity.ChangeInfo, error) {
53+
change := request.Change
5354
if fakemarker.Token(change.URIs) == tokenError {
5455
return nil, fmt.Errorf("fake: marked provider error")
5556
}

submitqueue/extension/changeprovider/fake/fake_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestProvider_Get_OnePerURI(t *testing.T) {
4747
p := New()
4848
for _, tt := range tests {
4949
t.Run(tt.name, func(t *testing.T) {
50-
infos, err := p.Get(context.Background(), entity.Change{URIs: tt.uris})
50+
infos, err := p.Get(context.Background(), entity.Request{Change: entity.Change{URIs: tt.uris}})
5151
require.NoError(t, err)
5252
require.Len(t, infos, len(tt.uris))
5353
for i, uri := range tt.uris {
@@ -59,8 +59,8 @@ func TestProvider_Get_OnePerURI(t *testing.T) {
5959

6060
func TestProvider_Get_ErrorMarker(t *testing.T) {
6161
p := New()
62-
_, err := p.Get(context.Background(), entity.Change{
62+
_, err := p.Get(context.Background(), entity.Request{Change: entity.Change{
6363
URIs: []string{"github://owner/repo/pull/1/abc?sq-fake=provider-error"},
64-
})
64+
}})
6565
require.Error(t, err)
6666
}

submitqueue/extension/changeprovider/github/provider.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,14 @@ func NewProvider(params Params) changeprovider.ChangeProvider {
4242
}
4343
}
4444

45-
// Get retrieves change information from GitHub for the provided Change.
45+
// Get retrieves change information from GitHub for the request's change.
4646
// Returns one ChangeInfo per URI (one per PR in stacked changes).
47-
func (p *provider) Get(ctx context.Context, change entity.Change) (_ []entity.ChangeInfo, retErr error) {
47+
func (p *provider) Get(ctx context.Context, request entity.Request) (_ []entity.ChangeInfo, retErr error) {
4848
op := coremetrics.Begin(p.metricsScope, "get")
4949
defer func() { op.Complete(retErr) }()
5050

51+
change := request.Change
52+
5153
// Parse all change IDs
5254
changeIDs := make([]entitygithub.ChangeID, 0, len(change.URIs))
5355
for _, uri := range change.URIs {

submitqueue/extension/changeprovider/github/provider_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func TestProvider_Get(t *testing.T) {
106106
}
107107

108108
p := newTestProvider(t, serverURL)
109-
infos, err := p.Get(context.Background(), entity.Change{URIs: tt.uris})
109+
infos, err := p.Get(context.Background(), entity.Request{Change: entity.Change{URIs: tt.uris}})
110110

111111
if tt.wantErr {
112112
require.Error(t, err)
@@ -147,9 +147,9 @@ func TestProvider_Get_Pagination(t *testing.T) {
147147
defer server.Close()
148148

149149
p := newTestProvider(t, server.URL)
150-
infos, err := p.Get(context.Background(), entity.Change{
150+
infos, err := p.Get(context.Background(), entity.Request{Change: entity.Change{
151151
URIs: []string{"github://uber/submitqueue/pull/456/" + shaXYZ},
152-
})
152+
}})
153153

154154
require.NoError(t, err)
155155
assert.Equal(t, 2, callCount)
@@ -170,12 +170,12 @@ func TestProvider_Get_MultiplePRs(t *testing.T) {
170170
defer server.Close()
171171

172172
p := newTestProvider(t, server.URL)
173-
infos, err := p.Get(context.Background(), entity.Change{
173+
infos, err := p.Get(context.Background(), entity.Request{Change: entity.Change{
174174
URIs: []string{
175175
"github://uber/submitqueue/pull/123/" + shaA,
176176
"github://uber/submitqueue/pull/456/" + shaB,
177177
},
178-
})
178+
}})
179179

180180
require.NoError(t, err)
181181
assert.Equal(t, 2, callCount)
@@ -202,12 +202,12 @@ func TestProvider_Get_FetchError_StopsOnFirstFailure(t *testing.T) {
202202
defer server.Close()
203203

204204
p := newTestProvider(t, server.URL)
205-
_, err := p.Get(context.Background(), entity.Change{
205+
_, err := p.Get(context.Background(), entity.Request{Change: entity.Change{
206206
URIs: []string{
207207
"github://uber/submitqueue/pull/123/" + shaA,
208208
"github://uber/submitqueue/pull/456/" + shaB,
209209
},
210-
})
210+
}})
211211

212212
require.Error(t, err)
213213
assert.Equal(t, 2, callCount)

submitqueue/extension/changeprovider/mock/change_provider_mock.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

submitqueue/orchestrator/controller/validate/validate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func (c *Controller) Process(ctx context.Context, delivery consumer.Delivery) (r
161161
coremetrics.NamedCounter(c.metricsScope, "process", "change_provider_errors", 1)
162162
return fmt.Errorf("failed to build change provider for queue %s: %w", request.Queue, err)
163163
}
164-
changeInfos, err := changeProvider.Get(ctx, request.Change)
164+
changeInfos, err := changeProvider.Get(ctx, request)
165165
if err != nil {
166166
coremetrics.NamedCounter(c.metricsScope, "process", "change_provider_errors", 1)
167167
return fmt.Errorf("failed to fetch change information for request %s: %w", request.ID, err)

submitqueue/orchestrator/controller/validate/validate_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func requestIDPayload(t *testing.T, id string) []byte {
4646
// mockChangeProvider is a simple mock that returns test data.
4747
type mockChangeProvider struct{}
4848

49-
func (m *mockChangeProvider) Get(ctx context.Context, change entity.Change) ([]entity.ChangeInfo, error) {
49+
func (m *mockChangeProvider) Get(ctx context.Context, request entity.Request) ([]entity.ChangeInfo, error) {
5050
return []entity.ChangeInfo{
5151
{
5252
URI: "github://org/repo/pull/123/abcdef0123456789abcdef0123456789abcdef01",

0 commit comments

Comments
 (0)