Files
shields/services/obs/obs.service.js
T
Florian "sp1ritGitHubCaleb Cartwrightrepo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
8a9efb2fc9 [OBS] add Open Build Service service-badge (#6993)
* 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>
2021-09-25 17:44:56 +00:00

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'],
})
}
}