From 4ae393565a3b00366ef1f63ec460aa2ebbb825c4 Mon Sep 17 00:00:00 2001 From: Caleb Cartwright Date: Thu, 18 Apr 2019 21:05:38 -0500 Subject: [PATCH] refactor: deprecated php-eye/hhvm badges (#3335) --- services/php-eye/php-eye-hhvm.service.js | 131 ++--------------- services/php-eye/php-eye-hhvm.tester.js | 39 +----- .../php-eye/php-eye-php-version.service.js | 132 ++---------------- .../php-eye/php-eye-php-version.tester.js | 28 ++-- 4 files changed, 41 insertions(+), 289 deletions(-) diff --git a/services/php-eye/php-eye-hhvm.service.js b/services/php-eye/php-eye-hhvm.service.js index 4aface7b30..f157de1eeb 100644 --- a/services/php-eye/php-eye-hhvm.service.js +++ b/services/php-eye/php-eye-hhvm.service.js @@ -1,124 +1,15 @@ 'use strict' -const LegacyService = require('../legacy-service') -const { makeBadgeData: getBadgeData } = require('../../lib/badge-data') -const { checkErrorResponse } = require('../../lib/error-helper') -const { omitv } = require('../text-formatters') +const { deprecatedService } = require('..') -const keywords = ['php', 'runtime'] - -// This legacy service should be rewritten to use e.g. BaseJsonService. -// -// Tips for rewriting: -// https://github.com/badges/shields/blob/master/doc/rewriting-services.md -// -// Do not base new services on this code. -module.exports = class PhpeyeHhvm extends LegacyService { - static get category() { - return 'platform-support' - } - - static get route() { - return { +module.exports = [ + deprecatedService({ + category: 'platform-support', + label: 'hhvm', + route: { base: 'hhvm', - pattern: '', - } - } - - static get examples() { - return [ - { - title: 'HHVM', - pattern: ':user/:packageName', - namedParams: { user: 'symfony', packageName: 'symfony' }, - staticPreview: { - label: 'hhvm', - message: 'not tested', - color: 'red', - }, - keywords, - }, - { - title: 'HHVM (branch)', - pattern: ':user/:packageName/:branch', - namedParams: { - user: 'symfony', - packageName: 'symfony', - branch: 'master', - }, - staticPreview: { - label: 'hhvm', - message: 'not tested', - color: 'red', - }, - keywords, - }, - ] - } - - static registerLegacyRouteHandler({ camp, cache }) { - camp.route( - /^\/hhvm\/([^/]+\/[^/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/, - cache((data, match, sendBadge, request) => { - const user = match[1] // eg, `symfony/symfony`. - let branch = match[2] ? omitv(match[2]) : 'dev-master' - const format = match[3] - const apiUrl = `https://php-eye.com/api/v1/package/${user}.json` - const badgeData = getBadgeData('hhvm', data) - if (branch === 'master') { - branch = 'dev-master' - } - request(apiUrl, (err, res, buffer) => { - if ( - checkErrorResponse(badgeData, err, res, { 404: 'repo not found' }) - ) { - sendBadge(format, badgeData) - return - } - try { - const data = JSON.parse(buffer) - let verInfo = {} - if (!data.versions) { - throw Error('Unexpected response.') - } - badgeData.text[1] = 'branch not found' - for (let i = 0, count = data.versions.length; i < count; i++) { - verInfo = data.versions[i] - if (verInfo.name === branch) { - if (!verInfo.travis.runtime_status) { - throw Error('Unexpected response.') - } - switch (verInfo.travis.runtime_status.hhvm) { - case 3: - // tested` - badgeData.colorscheme = 'brightgreen' - badgeData.text[1] = 'tested' - break - case 2: - // allowed failure - badgeData.colorscheme = 'yellow' - badgeData.text[1] = 'partially tested' - break - case 1: - // not tested - badgeData.colorscheme = 'red' - badgeData.text[1] = 'not tested' - break - case 0: - // unknown/no config file - badgeData.text[1] = 'maybe untested' - break - } - break - } - } - sendBadge(format, badgeData) - } catch (e) { - badgeData.text[1] = 'invalid' - sendBadge(format, badgeData) - } - }) - }) - ) - } -} + pattern: ':various*', + }, + dateAdded: new Date('2018-04-20'), + }), +] diff --git a/services/php-eye/php-eye-hhvm.tester.js b/services/php-eye/php-eye-hhvm.tester.js index a16a95b69b..ad4e58852d 100644 --- a/services/php-eye/php-eye-hhvm.tester.js +++ b/services/php-eye/php-eye-hhvm.tester.js @@ -1,50 +1,23 @@ 'use strict' -const Joi = require('joi') const { ServiceTester } = require('../tester') -const { invalidJSON } = require('../response-fixtures') - -const isAllowedStatus = Joi.string().regex( - /^(tested|partially tested|not tested|maybe untested)$/ -) const t = (module.exports = new ServiceTester({ id: 'hhvm', - title: 'hhvm status', + title: 'hhvm', + pathPrefix: '/hhvm', })) -t.create('get default branch') +t.create('no longer available (previously default branch)') .get('/symfony/symfony.json') .expectBadge({ label: 'hhvm', - message: isAllowedStatus, + message: 'no longer available', }) -t.create('get specific branch') +t.create('no longer available (get specific branch)') .get('/yiisoft/yii/1.1.19.json') .expectBadge({ label: 'hhvm', - message: isAllowedStatus, + message: 'no longer available', }) - -t.create('invalid repo') - .get('/frodo/is-not-a-package.json') - .expectBadge({ label: 'hhvm', message: 'repo not found' }) - -t.create('invalid branch') - .get('/yiisoft/yii/1.1.666.json') - .expectBadge({ label: 'hhvm', message: 'branch not found' }) - -t.create('connection error') - .get('/symfony/symfony.json') - .networkOff() - .expectBadge({ label: 'hhvm', message: 'inaccessible' }) - -t.create('unexpected response') - .get('/symfony/symfony.json') - .intercept(nock => - nock('https://php-eye.com') - .get('/api/v1/package/symfony/symfony.json') - .reply(invalidJSON) - ) - .expectBadge({ label: 'hhvm', message: 'invalid' }) diff --git a/services/php-eye/php-eye-php-version.service.js b/services/php-eye/php-eye-php-version.service.js index ed6a1b1cc5..e7f13fb857 100644 --- a/services/php-eye/php-eye-php-version.service.js +++ b/services/php-eye/php-eye-php-version.service.js @@ -1,125 +1,15 @@ 'use strict' -const LegacyService = require('../legacy-service') -const { makeBadgeData: getBadgeData } = require('../../lib/badge-data') -const log = require('../../core/server/log') -const { - versionReduction: phpVersionReduction, - getPhpReleases, -} = require('../php-version') +const { deprecatedService } = require('..') -// This legacy service should be rewritten to use e.g. BaseJsonService. -// -// Tips for rewriting: -// https://github.com/badges/shields/blob/master/doc/rewriting-services.md -// -// Do not base new services on this code. -module.exports = class PhpEyePhpVersion extends LegacyService { - static get category() { - return 'platform-support' - } - - static get route() { - return { +module.exports = [ + deprecatedService({ + category: 'platform-support', + label: 'php tested', + route: { base: 'php-eye', - pattern: ':user/:repo', - } - } - - static get examples() { - return [ - { - title: 'PHP version from PHP-Eye', - namedParams: { - user: 'symfony', - repo: 'symfony', - }, - staticPreview: { - label: 'php tested', - message: '7.1', - color: 'brightgreen', - }, - }, - ] - } - - static registerLegacyRouteHandler({ camp, cache, githubApiProvider }) { - camp.route( - /^\/php-eye\/([^/]+\/[^/]+)(?:\/([^/]+))?\.(svg|png|gif|jpg|json)$/, - cache((data, match, sendBadge, request) => { - const userRepo = match[1] // eg, espadrine/sc - const version = match[2] || 'dev-master' - const format = match[3] - const options = { - method: 'GET', - uri: `https://php-eye.com/api/v1/package/${userRepo}.json`, - } - const badgeData = getBadgeData('php tested', data) - getPhpReleases(githubApiProvider) - // Switch to async/await when this is refactored. - // eslint-disable-next-line promise/prefer-await-to-then - .then(phpReleases => { - request(options, (err, res, buffer) => { - if (err !== null) { - log.error(`PHP-Eye error: ${err.stack}`) - if (res) { - log.error(`${res}`) - } - badgeData.text[1] = 'invalid' - sendBadge(format, badgeData) - return - } - - try { - const data = JSON.parse(buffer) - const travis = data.versions.filter( - release => release.name === version - )[0].travis - - if (!travis.config_exists) { - badgeData.colorscheme = 'red' - badgeData.text[1] = 'not tested' - sendBadge(format, badgeData) - return - } - - const versions = [] - for (const index in travis.runtime_status) { - if ( - travis.runtime_status[index] === 3 && - index.match(/^php\d\d$/) !== null - ) { - versions.push(index.replace(/^php(\d)(\d)$/, '$1.$2')) - } - } - - let reduction = phpVersionReduction(versions, phpReleases) - - if (travis.runtime_status.hhvm === 3) { - reduction += reduction ? ', ' : '' - reduction += 'HHVM' - } - - if (reduction) { - badgeData.colorscheme = 'brightgreen' - badgeData.text[1] = reduction - } else if (!versions.length) { - badgeData.colorscheme = 'red' - badgeData.text[1] = 'not tested' - } else { - badgeData.text[1] = 'invalid' - } - } catch (e) { - badgeData.text[1] = 'invalid' - } - sendBadge(format, badgeData) - }) - }) - .catch(() => { - badgeData.text[1] = 'invalid' - sendBadge(format, badgeData) - }) - }) - ) - } -} + pattern: ':various*', + }, + dateAdded: new Date('2018-04-20'), + }), +] diff --git a/services/php-eye/php-eye-php-version.tester.js b/services/php-eye/php-eye-php-version.tester.js index 5f2bdd3b8d..ddf754cf48 100644 --- a/services/php-eye/php-eye-php-version.tester.js +++ b/services/php-eye/php-eye-php-version.tester.js @@ -1,25 +1,23 @@ 'use strict' const { ServiceTester } = require('../tester') -const { isPhpVersionReduction } = require('../test-validators') const t = (module.exports = new ServiceTester({ id: 'php-eye', - title: 'PHP version from PHP-Eye', + title: 'php-eye', + pathPrefix: '/php-eye', })) -t.create('gets the package version of symfony') +t.create('no longer available (previously default branch)') .get('/symfony/symfony.json') - .expectBadge({ label: 'php tested', message: isPhpVersionReduction }) + .expectBadge({ + label: 'php tested', + message: 'no longer available', + }) -t.create('gets the package version of symfony 2.8') - .get('/symfony/symfony/v2.8.0.json') - .expectBadge({ label: 'php tested', message: '5.3 - 7.0, HHVM' }) - -t.create('gets the package version of yii') - .get('/yiisoft/yii.json') - .expectBadge({ label: 'php tested', message: '5.3 - 7.1' }) - -t.create('invalid package name') - .get('/frodo/is-not-a-package.json') - .expectBadge({ label: 'php tested', message: 'invalid' }) +t.create('no longer available (get specific branch)') + .get('/yiisoft/yii/1.1.19.json') + .expectBadge({ + label: 'php tested', + message: 'no longer available', + })