Skip to content

Commit 5c394f6

Browse files
authored
Merge branch 'main' into dependabot/github_actions/docker/build-push-action-6.19.2
2 parents 8ba0cd6 + 67b8bf2 commit 5c394f6

File tree

12 files changed

+972
-109
lines changed

12 files changed

+972
-109
lines changed

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -983,9 +983,10 @@ The following sets of tools are available:
983983
- `fields`: Specific list of field IDs to include in the response when getting a project item (e.g. ["102589", "985201", "169875"]). If not provided, only the title field is included. Only used for 'get_project_item' method. (string[], optional)
984984
- `item_id`: The item's ID. Required for 'get_project_item' method. (number, optional)
985985
- `method`: The method to execute (string, required)
986-
- `owner`: The owner (user or organization login). The name is not case sensitive. (string, required)
986+
- `owner`: The owner (user or organization login). The name is not case sensitive. (string, optional)
987987
- `owner_type`: Owner type (user or org). If not provided, will be automatically detected. (string, optional)
988-
- `project_number`: The project's number. (number, required)
988+
- `project_number`: The project's number. (number, optional)
989+
- `status_update_id`: The node ID of the project status update. Required for 'get_project_status_update' method. (string, optional)
989990

990991
- **projects_list** - List GitHub Projects resources
991992
- **Required OAuth Scopes**: `read:project`
@@ -997,11 +998,12 @@ The following sets of tools are available:
997998
- `owner`: The owner (user or organization login). The name is not case sensitive. (string, required)
998999
- `owner_type`: Owner type (user or org). If not provided, will automatically try both. (string, optional)
9991000
- `per_page`: Results per page (max 50) (number, optional)
1000-
- `project_number`: The project's number. Required for 'list_project_fields' and 'list_project_items' methods. (number, optional)
1001+
- `project_number`: The project's number. Required for 'list_project_fields', 'list_project_items', and 'list_project_status_updates' methods. (number, optional)
10011002
- `query`: Filter/query string. For list_projects: filter by title text and state (e.g. "roadmap is:open"). For list_project_items: advanced filtering using GitHub's project filtering syntax. (string, optional)
10021003

10031004
- **projects_write** - Modify GitHub Project items
10041005
- **Required OAuth Scopes**: `project`
1006+
- `body`: The body of the status update (markdown). Used for 'create_project_status_update' method. (string, optional)
10051007
- `issue_number`: The issue number (use when item_type is 'issue' for 'add_project_item' method). Provide either issue_number or pull_request_number. (number, optional)
10061008
- `item_id`: The project item ID. Required for 'update_project_item' and 'delete_project_item' methods. (number, optional)
10071009
- `item_owner`: The owner (user or organization) of the repository containing the issue or pull request. Required for 'add_project_item' method. (string, optional)
@@ -1012,6 +1014,9 @@ The following sets of tools are available:
10121014
- `owner_type`: Owner type (user or org). If not provided, will be automatically detected. (string, optional)
10131015
- `project_number`: The project's number. (number, required)
10141016
- `pull_request_number`: The pull request number (use when item_type is 'pull_request' for 'add_project_item' method). Provide either issue_number or pull_request_number. (number, optional)
1017+
- `start_date`: The start date of the status update in YYYY-MM-DD format. Used for 'create_project_status_update' method. (string, optional)
1018+
- `status`: The status of the project. Used for 'create_project_status_update' method. (string, optional)
1019+
- `target_date`: The target date of the status update in YYYY-MM-DD format. Used for 'create_project_status_update' method. (string, optional)
10151020
- `updated_field`: Object consisting of the ID of the project field to update and the new value for the field. To clear the field, set value to null. Example: {"id": 123456, "value": "New Value"}. Required for 'update_project_item' method. (object, optional)
10161021

10171022
</details>

pkg/github/__toolsnaps__/projects_get.snap

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"enum": [
2727
"get_project",
2828
"get_project_field",
29-
"get_project_item"
29+
"get_project_item",
30+
"get_project_status_update"
3031
],
3132
"type": "string"
3233
},
@@ -45,12 +46,14 @@
4546
"project_number": {
4647
"description": "The project's number.",
4748
"type": "number"
49+
},
50+
"status_update_id": {
51+
"description": "The node ID of the project status update. Required for 'get_project_status_update' method.",
52+
"type": "string"
4853
}
4954
},
5055
"required": [
51-
"method",
52-
"owner",
53-
"project_number"
56+
"method"
5457
],
5558
"type": "object"
5659
},

pkg/github/__toolsnaps__/projects_list.snap

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"enum": [
2727
"list_projects",
2828
"list_project_fields",
29-
"list_project_items"
29+
"list_project_items",
30+
"list_project_status_updates"
3031
],
3132
"type": "string"
3233
},
@@ -47,7 +48,7 @@
4748
"type": "number"
4849
},
4950
"project_number": {
50-
"description": "The project's number. Required for 'list_project_fields' and 'list_project_items' methods.",
51+
"description": "The project's number. Required for 'list_project_fields', 'list_project_items', and 'list_project_status_updates' methods.",
5152
"type": "number"
5253
},
5354
"query": {

pkg/github/__toolsnaps__/projects_write.snap

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33
"destructiveHint": true,
44
"title": "Modify GitHub Project items"
55
},
6-
"description": "Add, update, or delete project items in a GitHub Project.",
6+
"description": "Add, update, or delete project items, or create status updates in a GitHub Project.",
77
"inputSchema": {
88
"properties": {
9+
"body": {
10+
"description": "The body of the status update (markdown). Used for 'create_project_status_update' method.",
11+
"type": "string"
12+
},
913
"issue_number": {
1014
"description": "The issue number (use when item_type is 'issue' for 'add_project_item' method). Provide either issue_number or pull_request_number.",
1115
"type": "number"
@@ -35,7 +39,8 @@
3539
"enum": [
3640
"add_project_item",
3741
"update_project_item",
38-
"delete_project_item"
42+
"delete_project_item",
43+
"create_project_status_update"
3944
],
4045
"type": "string"
4146
},
@@ -59,6 +64,25 @@
5964
"description": "The pull request number (use when item_type is 'pull_request' for 'add_project_item' method). Provide either issue_number or pull_request_number.",
6065
"type": "number"
6166
},
67+
"start_date": {
68+
"description": "The start date of the status update in YYYY-MM-DD format. Used for 'create_project_status_update' method.",
69+
"type": "string"
70+
},
71+
"status": {
72+
"description": "The status of the project. Used for 'create_project_status_update' method.",
73+
"enum": [
74+
"INACTIVE",
75+
"ON_TRACK",
76+
"AT_RISK",
77+
"OFF_TRACK",
78+
"COMPLETE"
79+
],
80+
"type": "string"
81+
},
82+
"target_date": {
83+
"description": "The target date of the status update in YYYY-MM-DD format. Used for 'create_project_status_update' method.",
84+
"type": "string"
85+
},
6286
"updated_field": {
6387
"description": "Object consisting of the ID of the project field to update and the new value for the field. To clear the field, set value to null. Example: {\"id\": 123456, \"value\": \"New Value\"}. Required for 'update_project_item' method.",
6488
"type": "object"

pkg/github/issues.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -376,12 +376,9 @@ func GetIssue(ctx context.Context, client *github.Client, deps ToolDependencies,
376376
}
377377
}
378378

379-
r, err := json.Marshal(issue)
380-
if err != nil {
381-
return nil, fmt.Errorf("failed to marshal issue: %w", err)
382-
}
379+
minimalIssue := convertToMinimalIssue(issue)
383380

384-
return utils.NewToolResultText(string(r)), nil
381+
return MarshalledTextResult(minimalIssue), nil
385382
}
386383

387384
func GetIssueComments(ctx context.Context, client *github.Client, deps ToolDependencies, owner string, repo string, issueNumber int, pagination PaginationParams) (*mcp.CallToolResult, error) {
@@ -436,12 +433,12 @@ func GetIssueComments(ctx context.Context, client *github.Client, deps ToolDepen
436433
comments = filteredComments
437434
}
438435

439-
r, err := json.Marshal(comments)
440-
if err != nil {
441-
return nil, fmt.Errorf("failed to marshal response: %w", err)
436+
minimalComments := make([]MinimalIssueComment, 0, len(comments))
437+
for _, comment := range comments {
438+
minimalComments = append(minimalComments, convertToMinimalIssueComment(comment))
442439
}
443440

444-
return utils.NewToolResultText(string(r)), nil
441+
return MarshalledTextResult(minimalComments), nil
445442
}
446443

447444
func GetSubIssues(ctx context.Context, client *github.Client, deps ToolDependencies, owner string, repo string, issueNumber int, pagination PaginationParams) (*mcp.CallToolResult, error) {

pkg/github/issues_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -345,15 +345,15 @@ func Test_GetIssue(t *testing.T) {
345345

346346
textContent := getTextResult(t, result)
347347

348-
var returnedIssue github.Issue
348+
var returnedIssue MinimalIssue
349349
err = json.Unmarshal([]byte(textContent.Text), &returnedIssue)
350350
require.NoError(t, err)
351-
assert.Equal(t, *tc.expectedIssue.Number, *returnedIssue.Number)
352-
assert.Equal(t, *tc.expectedIssue.Title, *returnedIssue.Title)
353-
assert.Equal(t, *tc.expectedIssue.Body, *returnedIssue.Body)
354-
assert.Equal(t, *tc.expectedIssue.State, *returnedIssue.State)
355-
assert.Equal(t, *tc.expectedIssue.HTMLURL, *returnedIssue.HTMLURL)
356-
assert.Equal(t, *tc.expectedIssue.User.Login, *returnedIssue.User.Login)
351+
assert.Equal(t, tc.expectedIssue.GetNumber(), returnedIssue.Number)
352+
assert.Equal(t, tc.expectedIssue.GetTitle(), returnedIssue.Title)
353+
assert.Equal(t, tc.expectedIssue.GetBody(), returnedIssue.Body)
354+
assert.Equal(t, tc.expectedIssue.GetState(), returnedIssue.State)
355+
assert.Equal(t, tc.expectedIssue.GetHTMLURL(), returnedIssue.HTMLURL)
356+
assert.Equal(t, tc.expectedIssue.GetUser().GetLogin(), returnedIssue.User.Login)
357357
})
358358
}
359359
}
@@ -2020,16 +2020,16 @@ func Test_GetIssueComments(t *testing.T) {
20202020
textContent := getTextResult(t, result)
20212021

20222022
// Unmarshal and verify the result
2023-
var returnedComments []*github.IssueComment
2023+
var returnedComments []MinimalIssueComment
20242024
err = json.Unmarshal([]byte(textContent.Text), &returnedComments)
20252025
require.NoError(t, err)
20262026
assert.Equal(t, len(tc.expectedComments), len(returnedComments))
20272027
for i := range tc.expectedComments {
20282028
require.NotNil(t, tc.expectedComments[i].User)
20292029
require.NotNil(t, returnedComments[i].User)
2030-
assert.Equal(t, tc.expectedComments[i].GetID(), returnedComments[i].GetID())
2031-
assert.Equal(t, tc.expectedComments[i].GetBody(), returnedComments[i].GetBody())
2032-
assert.Equal(t, tc.expectedComments[i].GetUser().GetLogin(), returnedComments[i].GetUser().GetLogin())
2030+
assert.Equal(t, tc.expectedComments[i].GetID(), returnedComments[i].ID)
2031+
assert.Equal(t, tc.expectedComments[i].GetBody(), returnedComments[i].Body)
2032+
assert.Equal(t, tc.expectedComments[i].GetUser().GetLogin(), returnedComments[i].User.Login)
20332033
}
20342034
})
20352035
}

0 commit comments

Comments
 (0)