Skip to content

Commit a06fbe4

Browse files
committed
feat: check issue is outdated or not
1 parent 30a862a commit a06fbe4

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

src/issue.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export async function findCreatedIssueWithBodyPrefix(
1717
nodes {
1818
id
1919
body
20+
updatedAt
2021
}
2122
}
2223
}

src/main.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {Condition, GhContext, IssueInfo, RecordBody} from './type'
1313
import {getViewerName} from './user'
1414
import {
1515
createIssueBody,
16+
isIssueOutdated,
1617
isPendingMergePr,
1718
isStatusCheckPassPr,
1819
issueBodyPrefix,
@@ -66,7 +67,10 @@ async function run(): Promise<void> {
6667

6768
const viewerName = await getViewerName(ctx)
6869
const {recordIssue, recordBody} = await getRecordIssue(ctx, viewerName)
69-
if (recordBody.editing) {
70+
const recordIssueOutdated = isIssueOutdated(recordIssue)
71+
// Sometimes unknown errors may occur, and issue body editing keeps true.
72+
// We ignore the editing field if the issue is outdated.
73+
if (recordBody.editing && !recordIssueOutdated) {
7074
core.info('Other actions are editing record. Exit.')
7175
return
7276
}

src/type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export interface PullRequestInfo {
7878
export interface IssueInfo {
7979
id: string
8080
body: string
81+
updatedAt?: string
8182
}
8283

8384
export interface CommitInfo {

src/utils.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import minimatch from 'minimatch'
2-
import {Condition, PullRequestInfo, RecordBody} from './type'
2+
import {Condition, IssueInfo, PullRequestInfo, RecordBody} from './type'
33

44
export function isPendingMergePr(
55
pr: PullRequestInfo,
@@ -68,6 +68,12 @@ function isStatusChecksSuccess(
6868
}
6969
}
7070

71+
export function isIssueOutdated(issue: IssueInfo): boolean {
72+
const outdatedMillis = 5 * 60 * 1000 // 5 minutes
73+
const updatedAt = issue.updatedAt ? Date.parse(issue.updatedAt) : 0
74+
return Date.now() - updatedAt > outdatedMillis
75+
}
76+
7177
export function parseIssueBody(body: string): RecordBody {
7278
try {
7379
const json = body

0 commit comments

Comments
 (0)