diff --git a/services/bitbucket/bitbucket-pipelines.service.js b/services/bitbucket/bitbucket-pipelines.service.js index 048d44788a..b2b60e3181 100644 --- a/services/bitbucket/bitbucket-pipelines.service.js +++ b/services/bitbucket/bitbucket-pipelines.service.js @@ -2,7 +2,7 @@ const Joi = require('@hapi/joi') const { renderBuildStatusBadge } = require('../build-status') -const { BaseJsonService } = require('..') +const { BaseJsonService, redirector } = require('..') const bitbucketPipelinesSchema = Joi.object({ values: Joi.array() @@ -25,7 +25,7 @@ const bitbucketPipelinesSchema = Joi.object({ .required(), }).required() -module.exports = class BitbucketPipelines extends BaseJsonService { +class BitbucketPipelines extends BaseJsonService { static get category() { return 'build' } @@ -33,7 +33,7 @@ module.exports = class BitbucketPipelines extends BaseJsonService { static get route() { return { base: 'bitbucket/pipelines', - pattern: ':user/:repo/:branch*', + pattern: ':user/:repo/:branch+', } } @@ -41,16 +41,6 @@ module.exports = class BitbucketPipelines extends BaseJsonService { return [ { title: 'Bitbucket Pipelines', - pattern: ':user/:repo', - namedParams: { - user: 'atlassian', - repo: 'adf-builder-javascript', - }, - staticPreview: this.render({ status: 'SUCCESSFUL' }), - }, - { - title: 'Bitbucket Pipelines branch', - pattern: ':user/:repo/:branch', namedParams: { user: 'atlassian', repo: 'adf-builder-javascript', @@ -99,7 +89,23 @@ module.exports = class BitbucketPipelines extends BaseJsonService { } async handle({ user, repo, branch }) { - const data = await this.fetch({ user, repo, branch: branch || 'master' }) + const data = await this.fetch({ user, repo, branch }) return this.constructor.render({ status: this.constructor.transform(data) }) } } + +const BitbucketPipelinesRedirector = redirector({ + category: 'build', + route: { + base: 'bitbucket/pipelines', + pattern: ':user/:repo', + }, + transformPath: ({ user, repo }) => + `/bitbucket/pipelines/${user}/${repo}/master`, + dateAdded: new Date('2020-07-12'), +}) + +module.exports = { + BitbucketPipelines, + BitbucketPipelinesRedirector, +} diff --git a/services/bitbucket/bitbucket-pipelines.tester.js b/services/bitbucket/bitbucket-pipelines.tester.js index 4230a2c562..2eeec523f9 100644 --- a/services/bitbucket/bitbucket-pipelines.tester.js +++ b/services/bitbucket/bitbucket-pipelines.tester.js @@ -1,7 +1,12 @@ 'use strict' const { isBuildStatus } = require('../build-status') -const t = (module.exports = require('../tester').createServiceTester()) +const { ServiceTester } = require('../tester') +const t = (module.exports = new ServiceTester({ + id: 'BitbucketPipelines', + title: 'Bitbucket Pipelines', + pathPrefix: '/bitbucket/pipelines', +})) function bitbucketApiResponse(status) { return JSON.stringify({ @@ -20,15 +25,8 @@ function bitbucketApiResponse(status) { }) } -t.create('master build result (valid)') - .get('/atlassian/adf-builder-javascript.json') - .expectBadge({ - label: 'build', - message: isBuildStatus, - }) - t.create('master build result (not found)') - .get('/atlassian/not-a-repo.json') + .get('/atlassian/not-a-repo/master.json') .expectBadge({ label: 'build', message: 'not found' }) t.create('branch build result (valid)') @@ -47,7 +45,7 @@ t.create('branch build result (never built)') .expectBadge({ label: 'build', message: 'never built' }) t.create('build result (passing)') - .get('/atlassian/adf-builder-javascript.json') + .get('/atlassian/adf-builder-javascript/master.json') .intercept(nock => nock('https://api.bitbucket.org') .get(/^\/2.0\/.*/) @@ -56,7 +54,7 @@ t.create('build result (passing)') .expectBadge({ label: 'build', message: 'passing' }) t.create('build result (failing)') - .get('/atlassian/adf-builder-javascript.json') + .get('/atlassian/adf-builder-javascript/master.json') .intercept(nock => nock('https://api.bitbucket.org') .get(/^\/2.0\/.*/) @@ -65,7 +63,7 @@ t.create('build result (failing)') .expectBadge({ label: 'build', message: 'failing' }) t.create('build result (error)') - .get('/atlassian/adf-builder-javascript.json') + .get('/atlassian/adf-builder-javascript/master.json') .intercept(nock => nock('https://api.bitbucket.org') .get(/^\/2.0\/.*/) @@ -74,7 +72,7 @@ t.create('build result (error)') .expectBadge({ label: 'build', message: 'error' }) t.create('build result (stopped)') - .get('/atlassian/adf-builder-javascript.json') + .get('/atlassian/adf-builder-javascript/master.json') .intercept(nock => nock('https://api.bitbucket.org') .get(/^\/2.0\/.*/) @@ -83,7 +81,7 @@ t.create('build result (stopped)') .expectBadge({ label: 'build', message: 'stopped' }) t.create('build result (expired)') - .get('/atlassian/adf-builder-javascript.json') + .get('/atlassian/adf-builder-javascript/master.json') .intercept(nock => nock('https://api.bitbucket.org') .get(/^\/2.0\/.*/) @@ -92,10 +90,16 @@ t.create('build result (expired)') .expectBadge({ label: 'build', message: 'expired' }) t.create('build result (unexpected status)') - .get('/atlassian/adf-builder-javascript.json') + .get('/atlassian/adf-builder-javascript/master.json') .intercept(nock => nock('https://api.bitbucket.org') .get(/^\/2.0\/.*/) .reply(200, bitbucketApiResponse('NEW_AND_UNEXPECTED')) ) .expectBadge({ label: 'build', message: 'invalid response data' }) + +t.create('build result no branch redirect') + .get('/atlassian/adf-builder-javascript.svg') + .expectRedirect( + '/bitbucket/pipelines/atlassian/adf-builder-javascript/master.svg' + ) diff --git a/services/gitlab/gitlab-pipeline-status.service.js b/services/gitlab/gitlab-pipeline-status.service.js index c5f16e3c72..dece21b18a 100644 --- a/services/gitlab/gitlab-pipeline-status.service.js +++ b/services/gitlab/gitlab-pipeline-status.service.js @@ -3,7 +3,7 @@ const Joi = require('@hapi/joi') const { isBuildStatus, renderBuildStatusBadge } = require('../build-status') const { optionalUrl } = require('../validators') -const { BaseSvgScrapingService, NotFound } = require('..') +const { BaseSvgScrapingService, NotFound, redirector } = require('..') const badgeSchema = Joi.object({ message: Joi.alternatives() @@ -34,7 +34,7 @@ const documentation = `

` -module.exports = class GitlabPipelineStatus extends BaseSvgScrapingService { +class GitlabPipelineStatus extends BaseSvgScrapingService { static get category() { return 'build' } @@ -42,7 +42,7 @@ module.exports = class GitlabPipelineStatus extends BaseSvgScrapingService { static get route() { return { base: 'gitlab/pipeline', - pattern: ':user/:repo/:branch*', + pattern: ':user/:repo/:branch+', queryParamSchema, } } @@ -51,14 +51,6 @@ module.exports = class GitlabPipelineStatus extends BaseSvgScrapingService { return [ { title: 'Gitlab pipeline status', - pattern: ':user/:repo', - namedParams: { user: 'gitlab-org', repo: 'gitlab' }, - staticPreview: this.render({ status: 'passed' }), - documentation, - }, - { - title: 'Gitlab pipeline status (branch)', - pattern: ':user/:repo/:branch', namedParams: { user: 'gitlab-org', repo: 'gitlab', @@ -69,8 +61,7 @@ module.exports = class GitlabPipelineStatus extends BaseSvgScrapingService { }, { title: 'Gitlab pipeline status (self-hosted)', - pattern: ':user/:repo', - namedParams: { user: 'GNOME', repo: 'pango' }, + namedParams: { user: 'GNOME', repo: 'pango', branch: 'master' }, queryParams: { gitlab_url: 'https://gitlab.gnome.org' }, staticPreview: this.render({ status: 'passed' }), documentation, @@ -83,7 +74,7 @@ module.exports = class GitlabPipelineStatus extends BaseSvgScrapingService { } async handle( - { user, repo, branch = 'master' }, + { user, repo, branch }, { gitlab_url: baseUrl = 'https://gitlab.com' } ) { const { message: status } = await this._requestSvg({ @@ -100,3 +91,18 @@ module.exports = class GitlabPipelineStatus extends BaseSvgScrapingService { return this.constructor.render({ status }) } } + +const GitlabPipelineStatusRedirector = redirector({ + category: 'build', + route: { + base: 'gitlab/pipeline', + pattern: ':user/:repo', + }, + transformPath: ({ user, repo }) => `/gitlab/pipeline/${user}/${repo}/master`, + dateAdded: new Date('2020-07-12'), +}) + +module.exports = { + GitlabPipelineStatus, + GitlabPipelineStatusRedirector, +} diff --git a/services/gitlab/gitlab-pipeline-status.tester.js b/services/gitlab/gitlab-pipeline-status.tester.js index 3831990c9f..49183c38e1 100644 --- a/services/gitlab/gitlab-pipeline-status.tester.js +++ b/services/gitlab/gitlab-pipeline-status.tester.js @@ -1,20 +1,18 @@ 'use strict' const { isBuildStatus } = require('../build-status') -const t = (module.exports = require('../tester').createServiceTester()) +const { ServiceTester } = require('../tester') +const t = (module.exports = new ServiceTester({ + id: 'GitlabPipeline', + title: 'Gitlab Pipeline', + pathPrefix: '/gitlab/pipeline', +})) -t.create('Pipeline status').get('/gitlab-org/gitlab.json').expectBadge({ +t.create('Pipeline status').get('/gitlab-org/gitlab/v10.7.6.json').expectBadge({ label: 'build', message: isBuildStatus, }) -t.create('Pipeline status (branch)') - .get('/gitlab-org/gitlab/v10.7.6.json') - .expectBadge({ - label: 'build', - message: isBuildStatus, - }) - t.create('Pipeline status (nonexistent branch)') .get('/gitlab-org/gitlab/nope-not-a-branch.json') .expectBadge({ @@ -23,15 +21,19 @@ t.create('Pipeline status (nonexistent branch)') }) t.create('Pipeline status (nonexistent repo)') - .get('/this-repo/does-not-exist.json') + .get('/this-repo/does-not-exist/master.json') .expectBadge({ label: 'build', message: 'repo not found', }) t.create('Pipeline status (custom gitlab URL)') - .get('/GNOME/pango.json?gitlab_url=https://gitlab.gnome.org') + .get('/GNOME/pango/master.json?gitlab_url=https://gitlab.gnome.org') .expectBadge({ label: 'build', message: isBuildStatus, }) + +t.create('Pipeline no branch redirect') + .get('/gitlab-org/gitlab.svg') + .expectRedirect('/gitlab/pipeline/gitlab-org/gitlab/master.svg') diff --git a/services/travis/travis-php-version-redirect.service.js b/services/travis/travis-php-version-redirect.service.js index ea0214fe42..3fc26b116d 100644 --- a/services/travis/travis-php-version-redirect.service.js +++ b/services/travis/travis-php-version-redirect.service.js @@ -2,7 +2,7 @@ const { redirector } = require('..') -module.exports = redirector({ +const ciRedirect = redirector({ category: 'platform-support', route: { base: 'travis-ci/php-v', @@ -11,6 +11,18 @@ module.exports = redirector({ transformPath: ({ user, repo, branch }) => branch ? `/travis/php-v/${user}/${repo}/${branch}` - : `/travis/php-v/${user}/${repo}`, + : `/travis/php-v/${user}/${repo}/master`, dateAdded: new Date('2019-04-22'), }) + +const branchRedirect = redirector({ + category: 'platform-support', + route: { + base: 'travis/php-v', + pattern: ':user/:repo', + }, + transformPath: ({ user, repo }) => `/travis/php-v/${user}/${repo}/master`, + dateAdded: new Date('2020-07-12'), +}) + +module.exports = { ciRedirect, branchRedirect } diff --git a/services/travis/travis-php-version-redirect.tester.js b/services/travis/travis-php-version-redirect.tester.js index 7ef6dfb235..adf9fb6669 100644 --- a/services/travis/travis-php-version-redirect.tester.js +++ b/services/travis/travis-php-version-redirect.tester.js @@ -5,13 +5,17 @@ const { ServiceTester } = require('../tester') const t = (module.exports = new ServiceTester({ id: 'TravisPhpVersionRedirect', title: 'TravisPhpVersionRedirect', - pathPrefix: '/travis-ci/php-v', + pathPrefix: '/', })) t.create('travis-ci no branch') - .get('/symfony/symfony.svg') - .expectRedirect('/travis/php-v/symfony/symfony.svg') + .get('travis-ci/php-v/symfony/symfony.svg') + .expectRedirect('/travis/php-v/symfony/symfony/master.svg') t.create('travis-ci branch') - .get('/symfony/symfony/2.8.svg') + .get('travis-ci/php-v/symfony/symfony/2.8.svg') .expectRedirect('/travis/php-v/symfony/symfony/2.8.svg') + +t.create('travis no branch') + .get('travis/php-v/symfony/symfony.svg') + .expectRedirect('/travis/php-v/symfony/symfony/master.svg') diff --git a/services/travis/travis-php-version.service.js b/services/travis/travis-php-version.service.js index 78a853707b..238746fc2b 100644 --- a/services/travis/travis-php-version.service.js +++ b/services/travis/travis-php-version.service.js @@ -31,15 +31,15 @@ module.exports = class TravisPhpVersion extends BaseJsonService { static get route() { return { base: 'travis/php-v', - pattern: ':user/:repo/:branch*', + pattern: ':user/:repo/:branch+', } } static get examples() { return [ { - title: 'PHP from Travis config', - namedParams: { user: 'symfony', repo: 'symfony' }, + title: 'PHP version from Travis config', + namedParams: { user: 'symfony', repo: 'symfony', branch: 'master' }, staticPreview: this.render({ reduction: ['^7.1.3'] }), }, ] @@ -96,7 +96,7 @@ module.exports = class TravisPhpVersion extends BaseJsonService { } } - async handle({ user, repo, branch = 'master' }) { + async handle({ user, repo, branch }) { const travisConfig = await this._requestJson({ schema, url: `https://api.travis-ci.org/repos/${user}/${repo}/branches/${branch}`, diff --git a/services/travis/travis-php-version.tester.js b/services/travis/travis-php-version.tester.js index 7686406e01..1e46dc3e33 100644 --- a/services/travis/travis-php-version.tester.js +++ b/services/travis/travis-php-version.tester.js @@ -4,7 +4,7 @@ const { isPhpVersionReduction } = require('../test-validators') const t = (module.exports = require('../tester').createServiceTester()) t.create('gets the package version of symfony') - .get('/symfony/symfony.json') + .get('/symfony/symfony/master.json') .expectBadge({ label: 'php', message: isPhpVersionReduction }) t.create('gets the package version of symfony 2.8') @@ -12,13 +12,13 @@ t.create('gets the package version of symfony 2.8') .expectBadge({ label: 'php', message: isPhpVersionReduction }) t.create('gets the package version of yii') - .get('/yiisoft/yii.json') + .get('/yiisoft/yii/master.json') .expectBadge({ label: 'php', message: isPhpVersionReduction }) t.create('gets the package version of pagination-bundle') - .get('/gpslab/pagination-bundle.json') + .get('/gpslab/pagination-bundle/master.json') .expectBadge({ label: 'php', message: isPhpVersionReduction }) t.create('invalid package name') - .get('/frodo/is-not-a-package.json') + .get('/frodo/is-not-a-package/master.json') .expectBadge({ label: 'php', message: 'repo not found' })