live-fns: (lgtm) introduce lgtm service (#126)

* live-fns: (lgtm) introduce lgtm service

* live-fns: (lgtm) split out to separate functions

* fix: remove console.log
pull/131/merge
Sam Lanning 2018-08-30 19:09:42 -07:00 zatwierdzone przez Amio /
rodzic 3c5f7c740f
commit 39b20008f1
3 zmienionych plików z 61 dodań i 0 usunięć

Wyświetl plik

@ -247,6 +247,11 @@ Advanced usage (for badge makers):
['coverage', '/codeclimate/coverage/jekyll/jekyll'],
['coverage (letter)', '/codeclimate/coverage-letter/jekyll/jekyll']
],
'lgtm': [
['number of alerts', '/lgtm/alerts/g/apache/cloudstack'],
['java code quality', '/lgtm/grade/java/g/apache/cloudstack'],
['C/C++ code quality', '/lgtm/grade/cpp/g/systemd/systemd'],
],
'uptime robot': [
['status', '/uptime-robot/status/m780862024-50db2c44c703e5c68d6b1ebb'],
['(24 hours) uptime', '/uptime-robot/day/m780862024-50db2c44c703e5c68d6b1ebb'],

Wyświetl plik

@ -17,6 +17,7 @@ module.exports = {
hackage: require('./hackage.js'),
homebrew: require('./homebrew.js'),
https: require('./https.js'),
lgtm: require('./lgtm.js'),
npm: require('./npm.js'),
nuget: require('./nuget.js'),
opencollective: require('./opencollective.js'),

Wyświetl plik

@ -0,0 +1,55 @@
const millify = require('millify')
// Use axios directly as the default Accept header breaks lgtm API
const axios = require('axios')
module.exports = async (topic, ...args) => {
const lang = topic === 'grade' ? args.shift() : undefined
const projectId = args.join('/')
const endpoint = `https://lgtm.com/api/v0.1/project/${projectId}/details`
const data = await axios.create({
timeout: 3200
}).get(endpoint).then(res => res.data)
switch (topic) {
case 'alerts':
return alertsBadge(data)
case 'grade':
return gradeBadge(data, lang)
}
}
const alertsBadge = (data) => (
{
subject: 'lgtm',
status: `${millify(data.alerts)} alert${(data.alerts === 1 ? '' : 's')}`,
color: data.alerts === 0 ? 'green' : 'yellow'
}
)
const gradeBadge = (data, lang) => {
for (const languageData of data.languages) {
if (languageData.lang === lang && 'grade' in languageData) {
const langLabel = langLabelOverrides[lang] || lang
return {
subject: `code quality: ${langLabel}`,
status: languageData.grade,
color: gradeColors[languageData.grade] || 'red'
}
}
}
}
const langLabelOverrides = {
cpp: 'c/c++',
csharp: 'c#',
javascript: 'js/ts'
}
const gradeColors = {
'A+': 'green',
'A': '9C0',
'B': 'A4A61D',
'C': 'yellow',
'D': 'orange'
}