Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f12db3d94 |
@@ -28,12 +28,12 @@ func (t *PRMerge) Descriptor() registry.ToolDescriptor {
|
|||||||
"properties":{
|
"properties":{
|
||||||
"owner":{"type":"string"},
|
"owner":{"type":"string"},
|
||||||
"repo":{"type":"string"},
|
"repo":{"type":"string"},
|
||||||
"index":{"type":"integer","minimum":1},
|
"number":{"type":"integer","minimum":1},
|
||||||
"style":{"type":"string","enum":["merge","squash","rebase"]},
|
"style":{"type":"string","enum":["merge","squash","rebase"]},
|
||||||
"merge_message_title":{"type":"string"},
|
"merge_message_title":{"type":"string"},
|
||||||
"merge_message_field":{"type":"string"}
|
"merge_message_field":{"type":"string"}
|
||||||
},
|
},
|
||||||
"required":["owner","repo","index"]
|
"required":["owner","repo","number"]
|
||||||
}`),
|
}`),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ func (t *PRMerge) Descriptor() registry.ToolDescriptor {
|
|||||||
type prMergeArgs struct {
|
type prMergeArgs struct {
|
||||||
Owner string `json:"owner"`
|
Owner string `json:"owner"`
|
||||||
Repo string `json:"repo"`
|
Repo string `json:"repo"`
|
||||||
Index int `json:"index"`
|
Number int `json:"number"`
|
||||||
Style string `json:"style"`
|
Style string `json:"style"`
|
||||||
Title string `json:"merge_message_title"`
|
Title string `json:"merge_message_title"`
|
||||||
Body string `json:"merge_message_field"`
|
Body string `json:"merge_message_field"`
|
||||||
@@ -55,8 +55,8 @@ func (t *PRMerge) Call(ctx context.Context, raw json.RawMessage) (json.RawMessag
|
|||||||
if err := t.a.Check(args.Owner); err != nil {
|
if err := t.a.Check(args.Owner); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if args.Index < 1 {
|
if args.Number < 1 {
|
||||||
return nil, fmt.Errorf("index must be >= 1: %w", gitea.ErrValidation)
|
return nil, fmt.Errorf("number must be >= 1: %w", gitea.ErrValidation)
|
||||||
}
|
}
|
||||||
|
|
||||||
style := args.Style
|
style := args.Style
|
||||||
@@ -64,7 +64,7 @@ func (t *PRMerge) Call(ctx context.Context, raw json.RawMessage) (json.RawMessag
|
|||||||
style = "merge"
|
style = "merge"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := t.c.MergePullRequest(ctx, args.Owner, args.Repo, args.Index, gitea.MergePRArgs{
|
if err := t.c.MergePullRequest(ctx, args.Owner, args.Repo, args.Number, gitea.MergePRArgs{
|
||||||
Do: style,
|
Do: style,
|
||||||
Title: args.Title,
|
Title: args.Title,
|
||||||
Body: args.Body,
|
Body: args.Body,
|
||||||
|
|||||||
@@ -63,6 +63,30 @@ func TestPRMergeConflictReturnsError(t *testing.T) {
|
|||||||
assert.ErrorIs(t, err, gitea.ErrConflict)
|
assert.ErrorIs(t, err, gitea.ErrConflict)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #45: pr_merge advertises the canonical `number` (was `index`); `index` stays
|
||||||
|
// an accepted alias via the shim.
|
||||||
|
func TestPRMergeNumberCanonical(t *testing.T) {
|
||||||
|
sch := string(tools.NewPRMerge(gitea.NewClient("http://unused", ""), allowlist.New([]string{"owner"})).Descriptor().InputSchema)
|
||||||
|
assert.Contains(t, sch, `"number":`, "pr_merge must advertise number")
|
||||||
|
assert.NotContains(t, sch, `"index":`, "pr_merge must not advertise index")
|
||||||
|
|
||||||
|
for _, args := range []string{
|
||||||
|
`{"owner":"owner","repo":"repo","number":7}`,
|
||||||
|
`{"owner":"owner","repo":"repo","index":7}`,
|
||||||
|
} {
|
||||||
|
var gotPath string
|
||||||
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
gotPath = r.URL.Path
|
||||||
|
w.WriteHeader(http.StatusNoContent)
|
||||||
|
}))
|
||||||
|
tool := tools.NewPRMerge(gitea.NewClient(srv.URL, "tok"), allowlist.New([]string{"owner"}))
|
||||||
|
_, err := tool.Call(context.Background(), json.RawMessage(args))
|
||||||
|
require.NoError(t, err, args)
|
||||||
|
assert.Equal(t, "/api/v1/repos/owner/repo/pulls/7/merge", gotPath, args)
|
||||||
|
srv.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPRMergeAllowlistRejects(t *testing.T) {
|
func TestPRMergeAllowlistRejects(t *testing.T) {
|
||||||
tool := tools.NewPRMerge(gitea.NewClient("http://unused", ""), allowlist.New([]string{"allowed"}))
|
tool := tools.NewPRMerge(gitea.NewClient("http://unused", ""), allowlist.New([]string{"allowed"}))
|
||||||
_, err := tool.Call(context.Background(), json.RawMessage(`{"owner":"evil","name":"repo","index":1}`))
|
_, err := tool.Call(context.Background(), json.RawMessage(`{"owner":"evil","name":"repo","index":1}`))
|
||||||
|
|||||||
Reference in New Issue
Block a user