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 deliver from './deliver';
import processInbox from './process-inbox'; import processInbox from './process-inbox';
import reportGitHubFailure from './report-github-failure';
const handlers = { const handlers = {
deliver, deliver,
processInbox, processInbox,
reportGitHubFailure
}; };
export default (job, done) => { 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 EventEmitter from 'events';
import * as express from 'express'; import * as express from 'express';
//const crypto = require('crypto'); import * as request from 'request';
const crypto = require('crypto');
import User from '../../../models/user'; import User from '../../../models/user';
import createNote from '../../../services/note/create';
import config from '../../../config'; import config from '../../../config';
import { createHttp } from '../../../queue';
module.exports = async (app: express.Application) => { module.exports = async (app: express.Application) => {
if (config.github_bot == null) return; if (config.github_bot == null) return;
const bot = await User.findOne({ const bot = await User.findOne({
usernameLower: config.github_bot.username.toLowerCase(), username_lower: config.github_bot.username.toLowerCase()
host: null
}); });
if (bot == null) { if (bot == null) {
@ -18,7 +19,7 @@ module.exports = async (app: express.Application) => {
return; return;
} }
const post = text => require('../endpoints/notes/create')({ text }, bot); const post = text => createNote(bot, { text });
const handler = new EventEmitter(); const handler = new EventEmitter();
@ -26,12 +27,12 @@ module.exports = async (app: express.Application) => {
// req.headers['x-hub-signature'] および // req.headers['x-hub-signature'] および
// req.headers['x-github-event'] は常に string ですが、型定義の都合上 // req.headers['x-github-event'] は常に string ですが、型定義の都合上
// string | string[] になっているので 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); handler.emit(req.headers['x-github-event'] as string, req.body);
res.sendStatus(200); res.sendStatus(200);
// } else { } else {
// res.sendStatus(400); res.sendStatus(400);
// } }
}); });
handler.on('status', event => { handler.on('status', event => {
@ -42,13 +43,26 @@ module.exports = async (app: express.Application) => {
const commit = event.commit; const commit = event.commit;
const parent = commit.parents[0]; const parent = commit.parents[0];
createHttp({ // Fetch parent status
type: 'gitHubFailureReport', request({
userId: bot._id, url: `${parent.url}/statuses`,
parentUrl: parent.url, headers: {
htmlUrl: commit.html_url, 'User-Agent': 'misskey'
message: commit.commit.message, }
}).save(); }, (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; break;
} }
}); });