Make branch a required param on bb/gitlab/travis-php (#5318)

This commit is contained in:
chris48s
2020-07-15 21:00:43 +01:00
committed by GitHub
parent 5bc7c3e015
commit 810efb14f9
8 changed files with 102 additions and 68 deletions

View File

@@ -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,
}

View File

@@ -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'
)

View File

@@ -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 = `
</p>
`
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,
}

View File

@@ -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')

View File

@@ -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 }

View File

@@ -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')

View File

@@ -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}`,

View File

@@ -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' })