-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
59 lines (51 loc) · 1.79 KB
/
index.js
File metadata and controls
59 lines (51 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const core = require('@actions/core')
const { context } = require('@actions/github')
const { setLabel, closeIssue, getIssue, getRepo, lockSpamIssue, orgBlockUser } = require('./github-utils')
const { recognizeTitle } = require('./utils')
const { handleKeyringIssue } = require('./keyring')
const { handleRevokeIssue } = require('./revoke')
async function closeSpam (token, owner, repo, issueNo, username = '') {
await setLabel(token, owner, repo, issueNo, 'spam')
await closeIssue(token, owner, repo, issueNo)
await lockSpamIssue(token, owner, repo, issueNo)
if (username !== '') await orgBlockUser(token, owner, username)
}
async function run () {
try {
if (context.payload.sender.id === 244865617) return // ignore bot
const token = process.env.REPO_TOKEN
const { owner, repo } = getRepo()
const issue = await getIssue(token)
const { type: prefixTag } = recognizeTitle(issue.title)
const action = context.payload.action
const issueNo = issue.number
const username = issue.user.login
if (action === 'labeled') {
const newLabel = context.payload.label.name
if (newLabel === 'spam') {
await closeSpam(token, owner, repo, issueNo, username)
} else if (newLabel === 'approved') {
if (prefixTag === 'keyring') {
await handleKeyringIssue()
}
}
} else if (action === 'opened') {
// close missing tag issue
if (!prefixTag) {
await closeSpam(token, owner, repo, issueNo)
return
}
// handle keyring issue (auto-evaluation)
if (prefixTag === 'keyring') {
await handleKeyringIssue()
}
// handle revoke issue
if (prefixTag === 'revoke') {
await handleRevokeIssue()
}
}
} catch (error) {
core.setFailed(error.message)
}
}
run()