Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add configuration run environment #48

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,28 @@
]
},
"github-bot": {
"labelToAuthor": {
"bug": "xuexb",
"enhancement": "xuexb",
"question": "xuexb"
"xuexb/github-bot": {
"issue/replyNeedDemo": {
"enabled": true,
"data": {
"need demo": "您好,请填写相关 Demo 链接。",
"need update package": "请更新版本号。"
}
},
"issue/autoAssign": {
"enabled": true,
"data": {
"bug": "xuexb",
"enhancement": "xuexb",
"question": "xuexb"
}
},
"pullRequest/autoReviewRequest": {
"enabled": true,
"data": {
"bug": "xuexb"
}
}
}
}
},
Expand Down
18 changes: 4 additions & 14 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,15 @@
*/

require('dotenv').config()
require('./register')

const EventEmitter = require('events')
const event = require('./event')
const Koa = require('koa')
const bodyParser = require('koa-bodyparser')
const requireDir = require('require-dir')
const { verifySignature } = require('./utils')
const issueActions = requireDir('./modules/issues')
const pullRequestActions = requireDir('./modules/pull_request')
const releasesActions = requireDir('./modules/releases')
const app = new Koa()
const githubEvent = new EventEmitter()
const { appLog, accessLog } = require('./logger')
const port = 8000

app.use(bodyParser())

Expand All @@ -31,7 +28,7 @@ app.use(ctx => {

accessLog.info(`receive event: ${eventName}`)

githubEvent.emit(eventName, {
event.emit(`${payload.repository.full_name}@${eventName}`, {
repo: payload.repository.name,
payload
})
Expand All @@ -42,12 +39,5 @@ app.use(ctx => {
}
})

const actions = Object.assign({}, issueActions, pullRequestActions, releasesActions)
Object.keys(actions).forEach((key) => {
actions[key](githubEvent.on.bind(githubEvent))
appLog.info(`bind ${key} success!`)
})

const port = 8000
app.listen(port)
appLog.info('Listening on http://0.0.0.0:', port)
7 changes: 7 additions & 0 deletions src/event.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/**
* @file 事件管理
* @author xuexb <[email protected]>
*/

const Events = require('events')
module.exports = new Events()
23 changes: 12 additions & 11 deletions src/modules/issues/autoAssign.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ const { addAssigneesToIssue } = require('../../github')
const config = getPkgConfig()
const assignMap = config.labelToAuthor || {}

function autoAssign (on) {
on('issues_labeled', ({ payload, repo }) => {
if (assignMap[payload.label.name]) {
addAssigneesToIssue(
payload,
assignMap[payload.label.name]
)
}
})
module.exports = {
name: 'issue/autoAssign',
register (on) {
on('issues_labeled', ({ payload, repo }) => {
if (assignMap[payload.label.name]) {
addAssigneesToIssue(
payload,
assignMap[payload.label.name]
)
}
})
}
}

module.exports = autoAssign
19 changes: 10 additions & 9 deletions src/modules/issues/autoLabel.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@

const { addLabelsToIssue } = require('../../github')

function autoAssign (on) {
on('issues_opened', ({ payload, repo }) => {
const label = (payload.issue.body.match(/<!--\s*label:\s*(.+?)\s*-->/) || [])[1]
if (label) {
addLabelsToIssue(payload, label)
}
})
module.exports = {
name: 'issue/autoLabel',
register (on) {
on('issues_opened', ({ payload, repo }) => {
const label = (payload.issue.body.match(/<!--\s*label:\s*(.+?)\s*-->/) || [])[1]
if (label) {
addLabelsToIssue(payload, label)
}
})
}
}

module.exports = autoAssign
35 changes: 18 additions & 17 deletions src/modules/issues/replyInvalid.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,24 @@ const comment = [
'但是由于您没有使用 [创建 issue](https://xuexb.github.io/github-bot/create-issue.html) 页面提交, 将直接被关闭, 谢谢!'
].join('')

function replyInvalid (on) {
on('issues_opened', ({ payload }) => {
const issue = payload.issue
const opener = issue.user.login
module.exports = {
name: 'issue/replyInvalid',
register (on) {
on('issues_opened', ({ payload }) => {
const issue = payload.issue
const opener = issue.user.login

if (issue.body.indexOf('<!-- by create-issue -->') === -1) {
commentIssue(
payload,
format(comment, {
user: opener
})
)
if (issue.body.indexOf('<!-- by create-issue -->') === -1) {
commentIssue(
payload,
format(comment, {
user: opener
})
)

closeIssue(payload)
addLabelsToIssue(payload, 'invalid')
}
})
closeIssue(payload)
addLabelsToIssue(payload, 'invalid')
}
})
}
}

module.exports = replyInvalid
27 changes: 14 additions & 13 deletions src/modules/issues/replyNeedDemo.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,18 @@ const { commentIssue } = require('../../github')

const comment = 'hi @{user},请提供一个可预览的链接,如: <https://codepen.io/pen?template=KgPZrE&editors=0010>'

function replyNeedDemo (on) {
on('issues_labeled', ({ payload, repo }) => {
if (payload.label.name === 'need demo') {
commentIssue(
payload,
format(comment, {
user: payload.issue.user.login
})
)
}
})
module.exports = {
name: 'issue/replyNeedDemo',
register (on) {
on('issues_labeled', ({ payload, repo }) => {
if (payload.label.name === 'need demo') {
commentIssue(
payload,
format(comment, {
user: payload.issue.user.login
})
)
}
})
}
}

module.exports = replyNeedDemo
26 changes: 26 additions & 0 deletions src/modules/pullRequest/autoReviewRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* @file PR 自动根据 tag 去添加 reviewer
* @author xuexb <[email protected]>
*/

const { getPkgConfig } = require('../../utils')
const { createReviewRequest } = require('../../github')

const config = getPkgConfig()
const assignMap = config.labelToAuthor || {}

module.exports = {
name: 'pullRequest/autoReviewRequest',
register (on) {
on('pull_request_labeled', ({payload}) => {
if (assignMap[payload.label.name]) {
createReviewRequest(
payload,
{
reviewers: assignMap[payload.label.name]
}
)
}
})
}
}
61 changes: 61 additions & 0 deletions src/modules/pullRequest/replyInvalidTitle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* @file PR 提示标题正确性
* @author xuexb <[email protected]>
*/

const format = require('string-template')
const { getPkgCommitPrefix } = require('../../utils')
const {
commentPullRequest,
addLabelsToPullRequest,
removeLabelsToPullRequest,
pullRequestHasLabel
} = require('../../github')

const actions = getPkgCommitPrefix()
const match = title => {
return actions.some(action => title.indexOf(`${action}:`) === 0)
}

const commentSuccess = [
'hi @{user},非常感谢您及时修正标题格式,祝您玩的开心!'
].join('')

const commentError = [
'hi @{user},非常感谢您的 PR ,',
'但是您没有使用 [PR 标题规则](https://github.com/xuexb/github-bot#commit-log-和-pr-标题规则) 格式,',
'请及时修改, 谢谢!'
].join('')

module.exports = {
name: 'pullRequest/replyInvaidTitle',
register (on) {
if (actions.length) {
on('pull_request_opened', ({ payload, repo }) => {
if (!match(payload.pull_request.title)) {
commentPullRequest(
payload,
format(commentError, {
user: payload.pull_request.user.login
})
)

addLabelsToPullRequest(payload, 'invalid')
}
})

on('pull_request_edited', async ({ payload, repo }) => {
if (match(payload.pull_request.title) && await pullRequestHasLabel(payload, 'invalid')) {
commentPullRequest(
payload,
format(commentSuccess, {
user: payload.pull_request.user.login
})
)

removeLabelsToPullRequest(payload, 'invalid')
}
})
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ const handle = async ({ payload, repo }) => {
}
}

module.exports = on => {
on('pull_request_edited', handle)
on('pull_request_opened', handle)
module.exports = {
name: 'pullRequest/titlePrefixToLabel',
register (on) {
on('pull_request_edited', handle)
on('pull_request_opened', handle)
}
}
23 changes: 0 additions & 23 deletions src/modules/pull_request/autoReviewRequest.js

This file was deleted.

58 changes: 0 additions & 58 deletions src/modules/pull_request/replyInvalidTitle.js

This file was deleted.

Loading