Skip to content

Commit 5b93bca

Browse files
bbughshine2lay
andauthored
feat: Add team assignment to request_review action (#574)
* Add requesting review from teams * Update changelog Co-authored-by: Shine Lee <aungshine@gmail.com>
1 parent 2838241 commit 5b93bca

File tree

7 files changed

+66
-7
lines changed

7 files changed

+66
-7
lines changed

__fixtures__/e2e/pr.payload.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,20 @@
124124
}
125125
],
126126
"requested_teams": [
127-
127+
{
128+
"id": 1,
129+
"node_id": "MDQ6VGVhbTE=",
130+
"url": "https://api.github.com/teams/1",
131+
"html_url": "https://github.com/orgs/github/teams/justice-league",
132+
"name": "Justice League",
133+
"slug": "justice-league",
134+
"description": "A great team.",
135+
"privacy": "closed",
136+
"permission": "admin",
137+
"members_url": "https://api.github.com/teams/1/members{/member}",
138+
"repositories_url": "https://api.github.com/teams/1/repos",
139+
"parent": null
140+
}
128141
],
129142
"labels": [
130143
{

__fixtures__/unit/helper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ module.exports = {
4141
updated_at: options.updatedAt ? moment(options.updatedAt) : moment(),
4242
milestone: (options.milestone) ? options.milestone : null,
4343
requested_reviewers: options.requestedReviewers ? options.requestedReviewers : [],
44+
requested_teams: options.requestedTeams ? options.requestedTeams : [],
4445
base: {
4546
repo: {
4647
full_name: options.baseRepo ? options.baseRepo : 'owner/test',

__tests__/unit/actions/request_review.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,40 @@ test('that non collaborator is not requested reviews', async () => {
6767
expect(context.octokit.pulls.requestReviewers.mock.calls.length).toBe(0)
6868
})
6969

70+
test('that requested teams are not requested again', async () => {
71+
const requester = new RequestReview()
72+
const options = {
73+
requestedTeams: [{ slug: 'developers' }]
74+
}
75+
76+
const teamSettings = {
77+
teams: ['developers']
78+
}
79+
80+
const context = createMockContext(options)
81+
82+
await requester.afterValidate(context, teamSettings, result)
83+
expect(context.octokit.pulls.requestReviewers.mock.calls.length).toBe(0)
84+
})
85+
86+
test('that requested team reviewers are added', async () => {
87+
const requester = new RequestReview()
88+
const options = {
89+
requestedTeams: [{ slug: 'justice-league' }]
90+
}
91+
92+
const teamSettings = {
93+
reviewers: ['shine2lay'],
94+
teams: ['developers']
95+
}
96+
97+
const context = createMockContext(options)
98+
99+
await requester.afterValidate(context, teamSettings, result)
100+
expect(context.octokit.pulls.requestReviewers.mock.calls.length).toBe(1)
101+
expect(context.octokit.pulls.requestReviewers.mock.calls[0][0].team_reviewers[0]).toBe('developers')
102+
})
103+
70104
const createMockContext = (options) => {
71105
const context = Helper.mockContext(options)
72106

docs/actions/request_review.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
Request Review
22
^^^^^^^^^^^^^^^
33

4+
You can request specific reviews from specific reviewers, teams, or both
5+
46
::
57

68
- do: request_review
79
reviewers: ['name1', 'name2']
10+
teams: ['developers'] # team names without organization
811

912
Supported Events:
1013
::
1114

12-
'pull_request.*', 'issues.*'
15+
'pull_request.*', 'issues.*'

docs/changelog.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
CHANGELOG
22
=====================================
3+
| August 6, 2021 : feat: Add team assignment to request_review action `#574 <https://github.com/mergeability/mergeable/pull/574>`_
34
| August 6, 2021 : feat: Support must_include and must_exclude regex as an array `#575 <https://github.com/mergeability/mergeable/pull/575>`_
45
| July 19, 2021 : feat: Add ignore_drafts option to ignore drafts in stale validator `#565 <https://github.com/mergeability/mergeable/issues/565>`_
56
| July 12, 2021 : feat: Filter specific status of files in changeset `#550 <https://github.com/mergeability/mergeable/issues/550>`_

lib/actions/request_review.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RequestReview extends Action {
1717

1818
const requestedReviewer = payload.requested_reviewers.map(reviewer => reviewer.login)
1919

20-
let reviewers = settings.reviewers
20+
let reviewers = settings.reviewers || []
2121

2222
// remove author since they can not be requested for a review
2323
reviewers = reviewers.filter(reviewer => reviewer !== payload.user.login)
@@ -31,13 +31,20 @@ class RequestReview extends Action {
3131
// remove anyone in the array that is not a collaborator
3232
const collaboratorsToRequest = _.intersection(reviewerToRequest, collaborators)
3333

34-
if (collaboratorsToRequest.length === 0) {
34+
const requestedTeams = payload.requested_teams.map(team => team.slug)
35+
36+
const teams = settings.teams || []
37+
38+
const teamsToRequest = _.difference(teams, requestedTeams)
39+
40+
if (collaboratorsToRequest.length === 0 && teamsToRequest.length === 0) {
3541
return
3642
}
3743
return this.githubAPI.requestReviewers(
3844
context,
3945
prNumber,
40-
reviewerToRequest
46+
reviewerToRequest,
47+
teamsToRequest
4148
)
4249
}
4350
}

lib/github/api.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,13 +425,13 @@ class GithubAPI {
425425
}
426426
}
427427

428-
static async requestReviewers (context, pullNumber, reviewers) {
428+
static async requestReviewers (context, pullNumber, reviewers, teamReviewers) {
429429
const callFn = 'pulls.requestReview'
430430

431431
debugLog(context, callFn)
432432
try {
433433
return await context.octokit.pulls.requestReviewers(
434-
context.repo({ pull_number: pullNumber, reviewers })
434+
context.repo({ pull_number: pullNumber, reviewers, team_reviewers: teamReviewers })
435435
)
436436
} catch (err) {
437437
const errorLog = createLog(context, { callFn: callFn, errors: err.toString(), logType: logger.logTypes.REQUEST_REVIEW_FAIL_ERROR })

0 commit comments

Comments
 (0)