kopia lustrzana https://github.com/badgen/badgen.net
live-fns: (lgtm) introduce lgtm service (#126)
* live-fns: (lgtm) introduce lgtm service * live-fns: (lgtm) split out to separate functions * fix: remove console.logpull/131/merge
rodzic
3c5f7c740f
commit
39b20008f1
|
@ -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'],
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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'
|
||||
}
|
Ładowanie…
Reference in New Issue