* service: add obs service * service: obs: replaced replaceAll with replace and global regex * service: obs: added space between class members * service: obs: support for multiple instances * service: obs: removed user prefix from auth vars obs_userName is now called obs_user and obs_userPass is called obs_pass Co-authored-by: Caleb Cartwright <calebcartwright@users.noreply.github.com> * service: obs: removed constructor hack in favour of serviceKey * service: obs: apply suggestions from @calebcartwright * service: obs: remove unneccesary http status mappings Co-authored-by: Caleb Cartwright <calebcartwright@users.noreply.github.com> Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
82 lines
1.9 KiB
JavaScript
82 lines
1.9 KiB
JavaScript
import Joi from 'joi'
|
|
import { BaseXmlService } from '../index.js'
|
|
import { optionalUrl } from '../validators.js'
|
|
import { isBuildStatus, renderBuildStatusBadge } from './obs-build-status.js'
|
|
|
|
const schema = Joi.object({
|
|
status: Joi.object({
|
|
'@_code': isBuildStatus,
|
|
}).required(),
|
|
}).required()
|
|
|
|
export default class ObsService extends BaseXmlService {
|
|
static category = 'build'
|
|
static route = {
|
|
base: 'obs',
|
|
pattern: ':project/:packageName/:repository/:arch',
|
|
queryParamSchema: Joi.object({
|
|
instance: optionalUrl,
|
|
}).required(),
|
|
}
|
|
|
|
static auth = {
|
|
userKey: 'obs_user',
|
|
passKey: 'obs_pass',
|
|
serviceKey: 'obs',
|
|
isRequired: true,
|
|
}
|
|
|
|
static examples = [
|
|
{
|
|
title: 'OBS package build status',
|
|
namedParams: {
|
|
project: 'openSUSE:Tools',
|
|
packageName: 'osc',
|
|
repository: 'Debian_11',
|
|
arch: 'x86_64',
|
|
},
|
|
queryParams: { instance: 'https://api.opensuse.org' },
|
|
staticPreview: this.render({
|
|
repository: 'Debian_11',
|
|
status: 'succeeded',
|
|
}),
|
|
keywords: ['open build service'],
|
|
},
|
|
]
|
|
|
|
static defaultBadgeData = { label: 'build' }
|
|
|
|
static render({ repository, status }) {
|
|
return renderBuildStatusBadge({ repository, status })
|
|
}
|
|
|
|
async fetch({ instance, project, packageName, repository, arch }) {
|
|
return this._requestXml(
|
|
this.authHelper.withBasicAuth({
|
|
schema,
|
|
url: `${instance}/build/${project}/${repository}/${arch}/${packageName}/_status`,
|
|
parserOptions: {
|
|
ignoreAttributes: false,
|
|
},
|
|
})
|
|
)
|
|
}
|
|
|
|
async handle(
|
|
{ project, packageName, repository, arch },
|
|
{ instance = 'https://api.opensuse.org' }
|
|
) {
|
|
const resp = await this.fetch({
|
|
instance,
|
|
project,
|
|
packageName,
|
|
repository,
|
|
arch,
|
|
})
|
|
return this.constructor.render({
|
|
repository,
|
|
status: resp.status['@_code'],
|
|
})
|
|
}
|
|
}
|