From 0808a70d6db0a16ed7987c71db588a61a7041a25 Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Sat, 15 Jun 2019 15:30:47 -0400 Subject: [PATCH] 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 * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update cirrus.service.js * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.tester.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Caleb Cartwright * Update services/cirrus/cirrus.service.js Co-Authored-By: Fedor Korotkov --- services/cirrus/cirrus.service.js | 84 +++++++++++++++++++++++++++++++ services/cirrus/cirrus.tester.js | 16 ++++++ 2 files changed, 100 insertions(+) create mode 100644 services/cirrus/cirrus.service.js create mode 100644 services/cirrus/cirrus.tester.js diff --git a/services/cirrus/cirrus.service.js b/services/cirrus/cirrus.service.js new file mode 100644 index 0000000000..a773d9809d --- /dev/null +++ b/services/cirrus/cirrus.service.js @@ -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) + } +} diff --git a/services/cirrus/cirrus.tester.js b/services/cirrus/cirrus.tester.js new file mode 100644 index 0000000000..a23d9cc8ce --- /dev/null +++ b/services/cirrus/cirrus.tester.js @@ -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')), + })