From cc90c190f20dbff6e529befd084da0c82f85116f Mon Sep 17 00:00:00 2001 From: jNullj <15849761+jNullj@users.noreply.github.com> Date: Sun, 27 Oct 2024 15:35:03 +0200 Subject: [PATCH] Refactor - use renderVersionBadge - part 3 [luarocks gitlab nuget feedz] (#10630) * Refactor luarocks to use renderVersionBadge Loarocks does not appear to have version conventions and there are no issues in history that require usage of existing color usage. For better consistency use color scheme as the rest of the badges. Also add scm and cvs as preview in renderVersionBadge * add missing test for version color formatter * refactor nuget to use renderVersionBadge * Refactor GitlabTag to use renderVersionBadge * add comment about non-standard render of coljarsVersion * Refactor FeedzVersionService to use renderVersionBadge from version.js * Refactor nuget.tester.js to remove unnecessary version tests * add missing label in gitlab-tag.spec --- services/clojars/clojars-version.service.js | 4 +++ services/color-formatters.js | 5 ++- services/color-formatters.spec.js | 2 ++ services/feedz/feedz.service.js | 10 ++---- services/feedz/feedz.tester.js | 16 --------- services/gitlab/gitlab-tag.service.js | 13 ++------ services/gitlab/gitlab-tag.spec.js | 1 + services/luarocks/luarocks.service.js | 23 ++----------- services/luarocks/luarocks.spec.js | 12 ------- services/nuget/nuget-helpers.js | 20 +---------- services/nuget/nuget-helpers.spec.js | 19 ----------- services/nuget/nuget-v2-service-family.js | 13 ++------ services/nuget/nuget-v3-service-family.js | 8 ++--- services/nuget/nuget.tester.js | 37 --------------------- 14 files changed, 24 insertions(+), 159 deletions(-) delete mode 100644 services/luarocks/luarocks.spec.js diff --git a/services/clojars/clojars-version.service.js b/services/clojars/clojars-version.service.js index 2b030a09da..61133a604a 100644 --- a/services/clojars/clojars-version.service.js +++ b/services/clojars/clojars-version.service.js @@ -34,6 +34,10 @@ class ClojarsVersionService extends BaseClojarsService { static defaultBadgeData = { label: 'clojars' } static render({ clojar, version }) { + // clojars format is non standard to fit community style + // dont use renderVersionBadge + // see also https://github.com/badges/shields/pull/431 + // commit d0414c9 return { message: `[${clojar} "${version}"]`, color: versionColor(version), diff --git a/services/color-formatters.js b/services/color-formatters.js index f43b8a3f93..968aa2b2f9 100644 --- a/services/color-formatters.js +++ b/services/color-formatters.js @@ -23,7 +23,10 @@ function version(version) { if (first === 'v') { first = version[1] } - if (first === '0' || /alpha|beta|snapshot|dev|pre|rc/i.test(version)) { + if ( + first === '0' || + /alpha|beta|snapshot|dev|pre|rc|scm|cvs/i.test(version) + ) { return 'orange' } else { return 'blue' diff --git a/services/color-formatters.spec.js b/services/color-formatters.spec.js index 39348a4288..6921b0d908 100644 --- a/services/color-formatters.spec.js +++ b/services/color-formatters.spec.js @@ -105,6 +105,8 @@ describe('Color formatters', function () { given('1.0.1-dev'), given('2.1.6-prerelease'), given('2.1.6-RC1'), + given('cvs-1'), + given('scm-2'), ]).expect('orange') expect(() => version(null)).to.throw( diff --git a/services/feedz/feedz.service.js b/services/feedz/feedz.service.js index a24ad20ac2..2973b4bd3b 100644 --- a/services/feedz/feedz.service.js +++ b/services/feedz/feedz.service.js @@ -1,11 +1,11 @@ import Joi from 'joi' import { BaseJsonService, NotFound, pathParams } from '../index.js' import { - renderVersionBadge, searchServiceUrl, stripBuildMetadata, selectVersion, } from '../nuget/nuget-helpers.js' +import { renderVersionBadge } from '../version.js' const singlePageSchema = Joi.object({ '@id': Joi.string().required(), @@ -64,10 +64,6 @@ class FeedzVersionService extends BaseJsonService { label: 'feedz', } - static render(props) { - return renderVersionBadge(props) - } - apiUrl({ organization, repository }) { return `https://f.feedz.io/${organization}/${repository}/nuget` } @@ -122,9 +118,9 @@ class FeedzVersionService extends BaseJsonService { const json = await this.fetch({ baseUrl, packageName }) const fetchedJson = await this.fetchItems({ json }) const version = this.transform({ json: fetchedJson, includePrereleases }) - return this.constructor.render({ + return renderVersionBadge({ version, - feed: FeedzVersionService.defaultBadgeData.label, + defaultLabel: FeedzVersionService.defaultBadgeData.label, }) } } diff --git a/services/feedz/feedz.tester.js b/services/feedz/feedz.tester.js index 79ecaedb0c..d240b8b237 100644 --- a/services/feedz/feedz.tester.js +++ b/services/feedz/feedz.tester.js @@ -24,14 +24,6 @@ t.create('version (valid)') color: 'blue', }) -t.create('version (yellow badge)') - .get('/feedz/v/shieldstests/public/Shields.TestPreOnly.json') - .expectBadge({ - label: 'feedz', - message: 'v0.1.0-pre', - color: 'yellow', - }) - t.create('version (orange badge)') .get('/feedz/v/shieldstests/public/Shields.NoV1.json') .expectBadge({ @@ -77,14 +69,6 @@ t.create('version (pre) (valid)') color: 'blue', }) -t.create('version (pre) (yellow badge)') - .get('/feedz/vpre/shieldstests/public/Shields.TestPreOnly.json') - .expectBadge({ - label: 'feedz', - message: 'v0.1.0-pre', - color: 'yellow', - }) - t.create('version (pre) (orange badge)') .get('/feedz/vpre/shieldstests/public/Shields.NoV1.json') .expectBadge({ diff --git a/services/gitlab/gitlab-tag.service.js b/services/gitlab/gitlab-tag.service.js index 43fbd0dc0d..e013fb7763 100644 --- a/services/gitlab/gitlab-tag.service.js +++ b/services/gitlab/gitlab-tag.service.js @@ -1,8 +1,6 @@ import Joi from 'joi' -import { version as versionColor } from '../color-formatters.js' import { optionalUrl } from '../validators.js' -import { latest } from '../version.js' -import { addv } from '../text-formatters.js' +import { latest, renderVersionBadge } from '../version.js' import { NotFound, pathParam, queryParam } from '../index.js' import { description, httpErrorsFor } from './gitlab-helper.js' import GitLabBase from './gitlab-base.js' @@ -63,13 +61,6 @@ export default class GitlabTag extends GitLabBase { static defaultBadgeData = { label: 'tag' } - static render({ version, sort }) { - return { - message: addv(version), - color: sort === 'semver' ? versionColor(version) : 'blue', - } - } - async fetch({ project, baseUrl }) { // https://docs.gitlab.com/ee/api/tags.html // N.B. the documentation has contradictory information about default sort order. @@ -114,6 +105,6 @@ export default class GitlabTag extends GitLabBase { sort, includePrereleases: pre !== undefined, }) - return this.constructor.render({ version, sort }) + return renderVersionBadge({ version }) } } diff --git a/services/gitlab/gitlab-tag.spec.js b/services/gitlab/gitlab-tag.spec.js index dddc97a7ce..b0c1da012b 100644 --- a/services/gitlab/gitlab-tag.spec.js +++ b/services/gitlab/gitlab-tag.spec.js @@ -39,6 +39,7 @@ describe('GitLabTag', function () { ).to.deep.equal({ message: 'v1.9', color: 'blue', + label: undefined, }) scope.done() diff --git a/services/luarocks/luarocks.service.js b/services/luarocks/luarocks.service.js index 6bad664e23..37b8c361ae 100644 --- a/services/luarocks/luarocks.service.js +++ b/services/luarocks/luarocks.service.js @@ -1,6 +1,6 @@ import Joi from 'joi' -import { addv } from '../text-formatters.js' import { BaseJsonService, NotFound, pathParams } from '../index.js' +import { renderVersionBadge } from '../version.js' import { latestVersion } from './luarocks-version-helpers.js' const schema = Joi.object({ @@ -42,25 +42,6 @@ export default class Luarocks extends BaseJsonService { label: 'luarocks', } - static render({ version }) { - // The badge colors are following the heuristic rule where `scm < dev < - // stable` (e.g., `scm-1` < `dev-1` < `0.1.0-1`). - let color - switch (version.slice(0, 3).toLowerCase()) { - case 'dev': - color = 'yellow' - break - case 'scm': - case 'cvs': - color = 'orange' - break - default: - color = 'brightgreen' - } - - return { message: addv(version), color } - } - async fetch({ user, moduleName }) { const { repository } = await this._requestJson({ url: `https://luarocks.org/manifests/${encodeURIComponent( @@ -91,6 +72,6 @@ export default class Luarocks extends BaseJsonService { const versions = Object.keys(moduleInfo) version = latestVersion(versions) } - return this.constructor.render({ version }) + return renderVersionBadge({ version }) } } diff --git a/services/luarocks/luarocks.spec.js b/services/luarocks/luarocks.spec.js deleted file mode 100644 index 811ab73ccf..0000000000 --- a/services/luarocks/luarocks.spec.js +++ /dev/null @@ -1,12 +0,0 @@ -import { test, given } from 'sazerac' -import Luarocks from './luarocks.service.js' - -test(Luarocks.render, () => { - given({ version: 'dev-1' }).expect({ message: 'dev-1', color: 'yellow' }) - given({ version: 'scm-1' }).expect({ message: 'scm-1', color: 'orange' }) - given({ version: 'cvs-1' }).expect({ message: 'cvs-1', color: 'orange' }) - given({ version: '0.1-1' }).expect({ - message: 'v0.1-1', - color: 'brightgreen', - }) -}) diff --git a/services/nuget/nuget-helpers.js b/services/nuget/nuget-helpers.js index c3fa42b605..d24f59d310 100644 --- a/services/nuget/nuget-helpers.js +++ b/services/nuget/nuget-helpers.js @@ -1,25 +1,8 @@ import semver from 'semver' -import { metric, addv } from '../text-formatters.js' +import { metric } from '../text-formatters.js' import { downloadCount as downloadCountColor } from '../color-formatters.js' import { getCachedResource } from '../../core/base-service/resource-cache.js' -function renderVersionBadge({ version, feed }) { - let color - if (version.includes('-')) { - color = 'yellow' - } else if (version.startsWith('0')) { - color = 'orange' - } else { - color = 'blue' - } - - return { - message: addv(version), - color, - label: feed, - } -} - function renderDownloadBadge({ downloads }) { return { message: metric(downloads), @@ -100,7 +83,6 @@ function selectVersion(versions, includePrereleases) { } export { - renderVersionBadge, renderDownloadBadge, odataToObject, searchServiceUrl, diff --git a/services/nuget/nuget-helpers.spec.js b/services/nuget/nuget-helpers.spec.js index a5e316490d..9cc8ea5b4a 100644 --- a/services/nuget/nuget-helpers.spec.js +++ b/services/nuget/nuget-helpers.spec.js @@ -1,30 +1,11 @@ import { test, given } from 'sazerac' import { - renderVersionBadge, odataToObject, stripBuildMetadata, selectVersion, } from './nuget-helpers.js' describe('NuGet helpers', function () { - test(renderVersionBadge, () => { - given({ version: '1.2-beta' }).expect({ - label: undefined, - message: 'v1.2-beta', - color: 'yellow', - }) - given({ version: '0.35' }).expect({ - label: undefined, - message: 'v0.35', - color: 'orange', - }) - given({ version: '1.2.7' }).expect({ - label: undefined, - message: 'v1.2.7', - color: 'blue', - }) - }) - test(odataToObject, () => { given({ 'm:properties': { 'd:Version': '1.2.3' } }).expect({ Version: '1.2.3', diff --git a/services/nuget/nuget-v2-service-family.js b/services/nuget/nuget-v2-service-family.js index 2303c62502..eab42f5773 100644 --- a/services/nuget/nuget-v2-service-family.js +++ b/services/nuget/nuget-v2-service-family.js @@ -9,11 +9,8 @@ import { pathParam, queryParam, } from '../index.js' -import { - renderVersionBadge, - renderDownloadBadge, - odataToObject, -} from './nuget-helpers.js' +import { renderVersionBadge } from '../version.js' +import { renderDownloadBadge, odataToObject } from './nuget-helpers.js' function createFilter({ packageName, includePrereleases }) { const releaseTypeFilter = includePrereleases @@ -127,10 +124,6 @@ function createServiceFamily({ label: defaultLabel, } - static render(props) { - return renderVersionBadge(props) - } - async handle({ packageName }, queryParams) { const packageData = await fetch(this, { baseUrl: apiBaseUrl, @@ -138,7 +131,7 @@ function createServiceFamily({ includePrereleases: queryParams.include_prereleases !== undefined, }) const version = packageData.NormalizedVersion || `${packageData.Version}` - return this.constructor.render({ version }) + return renderVersionBadge({ version }) } } diff --git a/services/nuget/nuget-v3-service-family.js b/services/nuget/nuget-v3-service-family.js index a5c8fefd3c..1cc9f6dd92 100644 --- a/services/nuget/nuget-v3-service-family.js +++ b/services/nuget/nuget-v3-service-family.js @@ -1,8 +1,8 @@ import Joi from 'joi' import RouteBuilder from '../route-builder.js' import { BaseJsonService, NotFound } from '../index.js' +import { renderVersionBadge } from '../version.js' import { - renderVersionBadge, renderDownloadBadge, searchServiceUrl, stripBuildMetadata, @@ -127,10 +127,6 @@ function createServiceFamily({ label: defaultLabel, } - static render(props) { - return renderVersionBadge(props) - } - /* * Extract version information from the raw package info. */ @@ -158,7 +154,7 @@ function createServiceFamily({ }) const json = await fetch(this, { baseUrl, packageName }) const version = this.transform({ json, includePrereleases }) - return this.constructor.render({ version, feed }) + return renderVersionBadge({ version, defaultLabel: feed }) } } diff --git a/services/nuget/nuget.tester.js b/services/nuget/nuget.tester.js index db04852b1f..507b4e954e 100644 --- a/services/nuget/nuget.tester.js +++ b/services/nuget/nuget.tester.js @@ -6,7 +6,6 @@ import { } from '../test-validators.js' import { queryIndex, - nuGetV3VersionJsonWithDash, nuGetV3VersionJsonFirstCharZero, nuGetV3VersionJsonFirstCharNotZero, nuGetV3VersionJsonBuildMetadataWithDash, @@ -51,24 +50,6 @@ t.create('version (valid)') message: isVPlusDottedVersionNClauses, }) -t.create('version (yellow badge)') - .get('/v/Microsoft.AspNetCore.Mvc.json') - .intercept(nock => - nock('https://api.nuget.org').get('/v3/index.json').reply(200, queryIndex), - ) - .intercept(nock => - nock('https://api-v2v3search-0.nuget.org') - .get( - '/query?q=packageid%3Amicrosoft.aspnetcore.mvc&prerelease=true&semVerLevel=2', - ) - .reply(200, nuGetV3VersionJsonWithDash), - ) - .expectBadge({ - label: 'nuget', - message: 'v1.2-beta', - color: 'yellow', - }) - t.create('version (orange badge)') .get('/v/Microsoft.AspNetCore.Mvc.json') .intercept(nock => @@ -149,24 +130,6 @@ t.create('version (pre) (valid)') message: isVPlusDottedVersionNClausesWithOptionalSuffix, }) -t.create('version (pre) (yellow badge)') - .get('/vpre/Microsoft.AspNetCore.Mvc.json') - .intercept(nock => - nock('https://api.nuget.org').get('/v3/index.json').reply(200, queryIndex), - ) - .intercept(nock => - nock('https://api-v2v3search-0.nuget.org') - .get( - '/query?q=packageid%3Amicrosoft.aspnetcore.mvc&prerelease=true&semVerLevel=2', - ) - .reply(200, nuGetV3VersionJsonWithDash), - ) - .expectBadge({ - label: 'nuget', - message: 'v1.2-beta', - color: 'yellow', - }) - t.create('version (pre) (orange badge)') .get('/vpre/Microsoft.AspNetCore.Mvc.json') .intercept(nock =>