From d69f7b6b5f05bb7e060ece688361b5458a376796 Mon Sep 17 00:00:00 2001 From: Vanshaj Singhania <8797467+itsvs@users.noreply.github.com> Date: Wed, 23 Dec 2020 15:14:28 -0800 Subject: [PATCH] [GitHubChecksStatus] Add commit check badge (#5973) * Add GH commit check badge * Fix class name, tests * Run prettier * Refactor to generic checks * Run prettier * Make keywords separate from title * Make commit failing tests actually fail * Resolve suggested edits * Sanitize imports * Follow import order requirements Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com> --- .../github/github-checks-status.service.js | 72 +++++++++++++++++++ .../github/github-checks-status.tester.js | 19 +++++ 2 files changed, 91 insertions(+) create mode 100644 services/github/github-checks-status.service.js create mode 100644 services/github/github-checks-status.tester.js diff --git a/services/github/github-checks-status.service.js b/services/github/github-checks-status.service.js new file mode 100644 index 0000000000000..79c68724c2066 --- /dev/null +++ b/services/github/github-checks-status.service.js @@ -0,0 +1,72 @@ +'use strict' + +const Joi = require('joi') +const { isBuildStatus, renderBuildStatusBadge } = require('../build-status') +const { GithubAuthV3Service } = require('./github-auth-service') +const { documentation, errorMessagesFor } = require('./github-helpers') + +const schema = Joi.object({ + state: isBuildStatus, +}).required() + +module.exports = class GithubChecksStatus extends GithubAuthV3Service { + static category = 'build' + static route = { + base: 'github/checks-status', + pattern: ':user/:repo/:ref', + } + + static examples = [ + { + title: 'GitHub branch checks state', + namedParams: { + user: 'badges', + repo: 'shields', + ref: 'master', + }, + staticPreview: renderBuildStatusBadge({ + status: 'success', + }), + keywords: ['status'], + documentation, + }, + { + title: 'GitHub commit checks state', + namedParams: { + user: 'badges', + repo: 'shields', + ref: '91b108d4b7359b2f8794a4614c11cb1157dc9fff', + }, + staticPreview: renderBuildStatusBadge({ + status: 'success', + }), + keywords: ['status'], + documentation, + }, + { + title: 'GitHub tag checks state', + namedParams: { + user: 'badges', + repo: 'shields', + ref: '3.3.0', + }, + staticPreview: renderBuildStatusBadge({ + status: 'success', + }), + keywords: ['status'], + documentation, + }, + ] + + static defaultBadgeData = { label: 'checks' } + + async handle({ user, repo, ref }) { + const { state } = await this._requestJson({ + url: `/repos/${user}/${repo}/commits/${ref}/status`, + errorMessages: errorMessagesFor('ref or repo not found'), + schema, + }) + + return renderBuildStatusBadge({ status: state }) + } +} diff --git a/services/github/github-checks-status.tester.js b/services/github/github-checks-status.tester.js new file mode 100644 index 0000000000000..5b6f6c9e6a0bc --- /dev/null +++ b/services/github/github-checks-status.tester.js @@ -0,0 +1,19 @@ +'use strict' + +const t = (module.exports = require('../tester').createServiceTester()) +const { isBuildStatus } = require('../build-status') + +t.create('branch checks (branch)') + .get('/badges/shields/master.json') + .expectBadge({ + label: 'checks', + message: isBuildStatus, + }) + +t.create('checks - nonexistent ref') + .get('/badges/shields/this-ref-does-not-exist.json') + .expectBadge({ + label: 'checks', + message: 'ref or repo not found', + color: 'red', + })