* move getLatestRelease logic from [GitHubRelease] to common-fetch - so that the sorting and prerelease logic can be used for other services too, like commits-since * add sort and prerelease query params to [GitHubCommitsSince] - they only work when using the 'latest' version of course - uses same logic as release service * reuse queryParamSchema from common-fetch for [GitHubTag] - as they were the exact same schema * refactor [GitHubCommitsSince] tests to use withRegex - and the same variable everywhere * split out release/tag logic from common-fetch to common-release (affects [GitHubCommitsSince], [GitHubRelease], [GitHubTag]) - this logic is only used for code related to releases & tags, so made sense as a split point Co-authored-by: Caleb Cartwright <calebcartwright@users.noreply.github.com>
141 lines
3.7 KiB
JavaScript
141 lines
3.7 KiB
JavaScript
'use strict'
|
|
|
|
const { addv } = require('../text-formatters')
|
|
const { version: versionColor } = require('../color-formatters')
|
|
const { GithubAuthV3Service } = require('./github-auth-service')
|
|
const {
|
|
fetchLatestRelease,
|
|
queryParamSchema,
|
|
} = require('./github-common-release')
|
|
const { documentation } = require('./github-helpers')
|
|
const { redirector } = require('..')
|
|
|
|
class GithubRelease extends GithubAuthV3Service {
|
|
static get category() {
|
|
return 'version'
|
|
}
|
|
|
|
static get route() {
|
|
return {
|
|
base: 'github/v/release',
|
|
pattern: ':user/:repo',
|
|
queryParamSchema,
|
|
}
|
|
}
|
|
|
|
static get examples() {
|
|
return [
|
|
{
|
|
title: 'GitHub release (latest by date)',
|
|
namedParams: { user: 'expressjs', repo: 'express' },
|
|
queryParams: {},
|
|
staticPreview: this.render({
|
|
version: 'v4.16.4',
|
|
sort: 'date',
|
|
isPrerelease: false,
|
|
}),
|
|
documentation,
|
|
},
|
|
{
|
|
title: 'GitHub release (latest by date including pre-releases)',
|
|
namedParams: { user: 'expressjs', repo: 'express' },
|
|
queryParams: { include_prereleases: null },
|
|
staticPreview: this.render({
|
|
version: 'v5.0.0-alpha.7',
|
|
sort: 'date',
|
|
isPrerelease: true,
|
|
}),
|
|
documentation,
|
|
},
|
|
{
|
|
title: 'GitHub release (latest SemVer)',
|
|
namedParams: { user: 'expressjs', repo: 'express' },
|
|
queryParams: { sort: 'semver' },
|
|
staticPreview: this.render({
|
|
version: 'v4.16.4',
|
|
sort: 'semver',
|
|
isPrerelease: false,
|
|
}),
|
|
documentation,
|
|
},
|
|
{
|
|
title: 'GitHub release (latest SemVer including pre-releases)',
|
|
namedParams: { user: 'expressjs', repo: 'express' },
|
|
queryParams: { sort: 'semver', include_prereleases: null },
|
|
staticPreview: this.render({
|
|
version: 'v5.0.0-alpha.7',
|
|
sort: 'semver',
|
|
isPrerelease: true,
|
|
}),
|
|
documentation,
|
|
},
|
|
]
|
|
}
|
|
|
|
static get defaultBadgeData() {
|
|
return {
|
|
label: 'release',
|
|
namedLogo: 'github',
|
|
}
|
|
}
|
|
|
|
static render({ version, sort, isPrerelease }) {
|
|
let color = 'blue'
|
|
color = sort === 'semver' ? versionColor(version) : color
|
|
color = isPrerelease ? 'orange' : color
|
|
return { message: addv(version), color }
|
|
}
|
|
|
|
async handle({ user, repo }, queryParams) {
|
|
const latestRelease = await fetchLatestRelease(
|
|
this,
|
|
{ user, repo },
|
|
queryParams
|
|
)
|
|
return this.constructor.render({
|
|
version: latestRelease.tag_name,
|
|
sort: queryParams.sort,
|
|
isPrerelease: latestRelease.prerelease,
|
|
})
|
|
}
|
|
}
|
|
|
|
const redirects = {
|
|
GithubReleaseRedirect: redirector({
|
|
name: 'GithubReleaseRedirect',
|
|
category: 'version',
|
|
route: {
|
|
base: 'github/release',
|
|
pattern: ':user/:repo',
|
|
},
|
|
transformPath: ({ user, repo }) => `/github/v/release/${user}/${repo}`,
|
|
dateAdded: new Date('2019-08-17'),
|
|
}),
|
|
GithubReleasePreRedirect: redirector({
|
|
category: 'version',
|
|
route: {
|
|
base: 'github/release-pre',
|
|
pattern: ':user/:repo',
|
|
},
|
|
transformPath: ({ user, repo }) => `/github/v/release/${user}/${repo}`,
|
|
transformQueryParams: params => ({ include_prereleases: null }),
|
|
dateAdded: new Date('2019-08-17'),
|
|
}),
|
|
GithubReleaseRedirectAll: redirector({
|
|
name: 'GithubReleaseRedirectAll',
|
|
category: 'version',
|
|
route: {
|
|
base: 'github/release',
|
|
pattern: ':user/:repo/all',
|
|
},
|
|
transformPath: ({ user, repo }) => `/github/v/release/${user}/${repo}`,
|
|
transformQueryParams: params => ({ include_prereleases: null }),
|
|
dateAdded: new Date('2019-08-17'),
|
|
}),
|
|
}
|
|
|
|
module.exports = {
|
|
GithubRelease,
|
|
...redirects,
|
|
}
|