This commit is contained in:
syuilo 2018-04-09 17:38:22 +09:00
parent 64547965b4
commit 2a5016865a
3 changed files with 30 additions and 42 deletions

View File

@ -1,11 +1,9 @@
import deliver from './deliver';
import processInbox from './process-inbox';
import reportGitHubFailure from './report-github-failure';
const handlers = {
deliver,
processInbox,
reportGitHubFailure
};
export default (job, done) => {

View File

@ -1,24 +0,0 @@
import * as request from 'request-promise-native';
import User from '../../../models/user';
import createNote from '../../../services/note/create';
export default async ({ data }) => {
const asyncBot = User.findOne({ _id: data.userId });
// Fetch parent status
const parentStatuses = await request({
url: `${data.parentUrl}/statuses`,
headers: {
'User-Agent': 'misskey'
},
json: true
});
const parentState = parentStatuses[0].state;
const stillFailed = parentState == 'failure' || parentState == 'error';
const text = stillFailed ?
`**⚠BUILD STILL FAILED⚠**: ?[${data.message}](${data.htmlUrl})` :
`**🚨BUILD FAILED🚨**: →→→?[${data.message}](${data.htmlUrl})←←←`;
createNote(await asyncBot, { text });
};

View File

@ -1,16 +1,17 @@
import * as EventEmitter from 'events';
import * as express from 'express';
//const crypto = require('crypto');
import * as request from 'request';
const crypto = require('crypto');
import User from '../../../models/user';
import createNote from '../../../services/note/create';
import config from '../../../config';
import { createHttp } from '../../../queue';
module.exports = async (app: express.Application) => {
if (config.github_bot == null) return;
const bot = await User.findOne({
usernameLower: config.github_bot.username.toLowerCase(),
host: null
username_lower: config.github_bot.username.toLowerCase()
});
if (bot == null) {
@ -18,7 +19,7 @@ module.exports = async (app: express.Application) => {
return;
}
const post = text => require('../endpoints/notes/create')({ text }, bot);
const post = text => createNote(bot, { text });
const handler = new EventEmitter();
@ -26,12 +27,12 @@ module.exports = async (app: express.Application) => {
// req.headers['x-hub-signature'] および
// req.headers['x-github-event'] は常に string ですが、型定義の都合上
// string | string[] になっているので string を明示しています
// if ((new Buffer(req.headers['x-hub-signature'] as string)).equals(new Buffer(`sha1=${crypto.createHmac('sha1', config.github_bot.hook_secret).update(JSON.stringify(req.body)).digest('hex')}`))) {
if ((new Buffer(req.headers['x-hub-signature'] as string)).equals(new Buffer(`sha1=${crypto.createHmac('sha1', config.github_bot.hook_secret).update(JSON.stringify(req.body)).digest('hex')}`))) {
handler.emit(req.headers['x-github-event'] as string, req.body);
res.sendStatus(200);
// } else {
// res.sendStatus(400);
// }
} else {
res.sendStatus(400);
}
});
handler.on('status', event => {
@ -42,13 +43,26 @@ module.exports = async (app: express.Application) => {
const commit = event.commit;
const parent = commit.parents[0];
createHttp({
type: 'gitHubFailureReport',
userId: bot._id,
parentUrl: parent.url,
htmlUrl: commit.html_url,
message: commit.commit.message,
}).save();
// Fetch parent status
request({
url: `${parent.url}/statuses`,
headers: {
'User-Agent': 'misskey'
}
}, (err, res, body) => {
if (err) {
console.error(err);
return;
}
const parentStatuses = JSON.parse(body);
const parentState = parentStatuses[0].state;
const stillFailed = parentState == 'failure' || parentState == 'error';
if (stillFailed) {
post(`**⚠BUILD STILL FAILED⚠**: ?[${commit.commit.message}](${commit.html_url})`);
} else {
post(`**🚨BUILD FAILED🚨**: →→→?[${commit.commit.message}](${commit.html_url})←←←`);
}
});
break;
}
});