Add endpoint to generate a shields.io badge

This commit is contained in:
Jelle Besseling 2020-12-24 15:44:54 +01:00
parent bde8d81876
commit f64230b45e
No known key found for this signature in database
GPG key ID: 9712452E8BE3372E
2 changed files with 69 additions and 0 deletions

View file

@ -384,6 +384,41 @@ paths:
schema:
$ref: '#/components/schemas/Error'
/job/{project-id}/{jobset-id}/{job-id}/shield:
get:
summary: Generate data for a shields.io badge
parameters:
- name: project-id
in: path
description: project identifier
required: true
schema:
type: string
- name: jobset-id
in: path
description: jobset identifier
required: true
schema:
type: string
- name: job-id
in: path
description: job identifier
required: true
schema:
type: string
responses:
'200':
description: see <a href="https://shields.io/endpoint">https://shields.io/endpoint</a> on how to use this
content:
application/json:
examples:
shield-success:
value:
color: green
schemaVersion: 1
label: hydra build
message: passing
/build/{build-id}:
get:
summary: Retrieves a single build of a jobset by id

View file

@ -28,6 +28,40 @@ sub job : Chained('/') PathPart('job') CaptureArgs(3) {
$c->stash->{project} = $c->stash->{jobset}->project;
}
sub shield :Chained('job') PathPart('shield') Args(0) {
my ($self, $c) = @_;
my $job = $c->stash->{job};
my $lastBuild = $c->stash->{jobset}->builds->find(
{ job => $job, finished => 1 },
{ order_by => 'id DESC', rows => 1, columns => [@buildListColumns] }
);
notFound($c, "No latest build for job $job.") unless defined $lastBuild;
my $color =
$lastBuild->buildstatus == 0 ? "green" :
$lastBuild->buildstatus == 4 ? "yellow" :
"red";
my $message =
$lastBuild->buildstatus == 0 ? "passing" :
$lastBuild->buildstatus == 4 ? "cancelled" :
"failing";
$c->response->content_type('application/json');
$c->stash->{'plain'} = {
data => scalar (JSON::Any->objToJson(
{
schemaVersion => 1,
label => "hydra build",
color => $color,
message => $message,
}))
};
$c->forward('Hydra::View::Plain');
}
sub prometheus : Chained('job') PathPart('prometheus') Args(0) {
my ($self, $c) = @_;
my $prometheus = Net::Prometheus->new;