Added [Cirrus] CI badge support (#3502)
* add base (needs tweaking) * more work * updates / more work * fix minor thing * handle * add test * Fix * get rid of svg scraper * Fixed Cirrus badge Use JSON endpoint * Rename cirrus.test.js to cirrus.tester.js * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update cirrus.service.js * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright <calebcartwright@users.noreply.github.com> * Update services/cirrus/cirrus.service.js Co-Authored-By: Fedor Korotkov <fedor.korotkov@gmail.com>
This commit is contained in:
committed by
Caleb Cartwright
parent
703371dd78
commit
0808a70d6d
84
services/cirrus/cirrus.service.js
Normal file
84
services/cirrus/cirrus.service.js
Normal file
@@ -0,0 +1,84 @@
|
||||
'use strict'
|
||||
|
||||
const Joi = require('@hapi/joi')
|
||||
const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
|
||||
const { BaseJsonService } = require('..')
|
||||
|
||||
const schema = Joi.object({
|
||||
subject: Joi.string().required(),
|
||||
status: Joi.alternatives()
|
||||
.try(isBuildStatus, Joi.equal('unknown'))
|
||||
.required(),
|
||||
}).required()
|
||||
const queryParamSchema = Joi.object({
|
||||
task: Joi.string(),
|
||||
script: Joi.string(),
|
||||
}).required()
|
||||
|
||||
module.exports = class Cirrus extends BaseJsonService {
|
||||
static get category() {
|
||||
return 'build'
|
||||
}
|
||||
|
||||
static get route() {
|
||||
return {
|
||||
base: 'cirrus',
|
||||
pattern: 'github/:user/:repo/:branch*',
|
||||
queryParamSchema,
|
||||
}
|
||||
}
|
||||
|
||||
static get examples() {
|
||||
return [
|
||||
{
|
||||
title: 'Cirrus CI - Base Branch Build Status',
|
||||
namedParams: { user: 'flutter', repo: 'flutter' },
|
||||
pattern: 'github/:user/:repo',
|
||||
queryParams: { task: 'analyze', script: 'test' },
|
||||
staticPreview: this.render({ status: 'passing' }),
|
||||
},
|
||||
{
|
||||
title: 'Cirrus CI - Specific Branch Build Status',
|
||||
pattern: 'github/:user/:repo/:branch',
|
||||
namedParams: { user: 'flutter', repo: 'flutter', branch: 'master' },
|
||||
queryParams: { task: 'analyze', script: 'test' },
|
||||
staticPreview: this.render({ status: 'passing' }),
|
||||
},
|
||||
{
|
||||
title: 'Cirrus CI - Specific Task Build Status',
|
||||
pattern: 'github/:user/:repo',
|
||||
queryParams: { task: 'analyze' },
|
||||
namedParams: { user: 'flutter', repo: 'flutter' },
|
||||
staticPreview: this.render({ subject: 'analyze', status: 'passing' }),
|
||||
},
|
||||
{
|
||||
title: 'Cirrus CI - Task and Script Build Status',
|
||||
pattern: 'github/:user/:repo',
|
||||
queryParams: { task: 'analyze', script: 'test' },
|
||||
namedParams: {
|
||||
user: 'flutter',
|
||||
repo: 'flutter',
|
||||
},
|
||||
staticPreview: this.render({ subject: 'test', status: 'passing' }),
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
static get defaultBadgeData() {
|
||||
return { label: 'build' }
|
||||
}
|
||||
|
||||
static render({ subject, status }) {
|
||||
return renderBuildStatusBadge({ label: subject, status })
|
||||
}
|
||||
|
||||
async handle({ user, repo, branch }, { script, task }) {
|
||||
const json = await this._requestJson({
|
||||
schema,
|
||||
url: `https://api.cirrus-ci.com/github/${user}/${repo}.json`,
|
||||
options: { qs: { branch, script, task } },
|
||||
})
|
||||
|
||||
return this.constructor.render(json)
|
||||
}
|
||||
}
|
||||
16
services/cirrus/cirrus.tester.js
Normal file
16
services/cirrus/cirrus.tester.js
Normal file
@@ -0,0 +1,16 @@
|
||||
'use strict'
|
||||
|
||||
const Joi = require('joi')
|
||||
const { isBuildStatus } = require('../build-status')
|
||||
const t = (module.exports = require('../tester').createServiceTester())
|
||||
|
||||
t.create('cirrus bad repo')
|
||||
.get('/github/unknown-identifier/unknown-repo.json')
|
||||
.expectBadge({ label: 'build', message: 'unknown' })
|
||||
|
||||
t.create('cirrus fully.valid')
|
||||
.get('/github/flutter/flutter.json')
|
||||
.expectBadge({
|
||||
label: 'build',
|
||||
message: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')),
|
||||
})
|
||||
Reference in New Issue
Block a user