@@ -124,34 +124,45 @@ export default class PullRequest {
124
124
125
125
if ( reviews . length < 1 ) return 'readyForReview' ;
126
126
127
- const latestReviewsObj : { [ key : number ] : { state : string ; time : number } } =
128
- { } ;
127
+ const pushUsers = (
128
+ await this . octokit . repos . listCollaborators ( {
129
+ owner : this . owner ,
130
+ repo : this . repo ,
131
+ permission : 'push' ,
132
+ } )
133
+ ) . data . map ( u => u . id ) ;
134
+
135
+ const latestReviewsObj : {
136
+ [ key : number ] : { state : string ; time : number } ;
137
+ } = { } ;
129
138
130
139
for ( const r of reviews ) {
131
140
if ( ! r ?. user ?. id || ! r . submitted_at ) continue ;
132
141
133
142
const user = r . user . id ;
134
143
const time = new Date ( r . submitted_at ) . getTime ( ) ;
135
144
136
- if ( ! latestReviewsObj [ user ] ) {
137
- latestReviewsObj [ user ] = {
138
- state : r . state ,
139
- time,
140
- } ;
145
+ if ( ! pushUsers . includes ( user ) ) continue ;
141
146
147
+ const review = {
148
+ state : r . state ,
149
+ time,
150
+ } ;
151
+
152
+ if ( ! latestReviewsObj [ user ] ) {
153
+ latestReviewsObj [ user ] = review ;
142
154
continue ;
143
155
}
144
156
145
157
if ( latestReviewsObj [ user ] . time < time ) {
146
- latestReviewsObj [ user ] = {
147
- state : r . state ,
148
- time,
149
- } ;
158
+ latestReviewsObj [ user ] = review ;
150
159
}
151
160
}
152
161
153
162
const latestReviews = Object . values ( latestReviewsObj ) ;
154
163
164
+ if ( ! latestReviews . length ) return 'readyForReview' ;
165
+
155
166
if ( latestReviews . filter ( r => r . state === 'CHANGES_REQUESTED' ) . length > 0 ) {
156
167
return 'changesRequested' ;
157
168
}
@@ -165,6 +176,10 @@ export default class PullRequest {
165
176
return 'needsMoreApprovals' ;
166
177
}
167
178
168
- return 'approved' ;
179
+ if ( approvingReviews > 0 ) {
180
+ return 'approved' ;
181
+ }
182
+
183
+ return 'readyForReview' ;
169
184
}
170
185
}
0 commit comments