Skip to content

Commit 015d8d0

Browse files
committed
Add OpenQA::VcsProvider::{GitHUb,Gitea}
1 parent ae8a9f4 commit 015d8d0

File tree

7 files changed

+67
-15
lines changed

7 files changed

+67
-15
lines changed

lib/OpenQA/Schema/Result/ScheduledProducts.pm

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ use OpenQA::JobSettings;
1818
use OpenQA::Jobs::Constants;
1919
use OpenQA::JobDependencies::Constants;
2020
use OpenQA::Scheduler::Client;
21-
use OpenQA::VcsProvider;
21+
use OpenQA::VcsProvider::GitHub;
22+
use OpenQA::VcsProvider::Gitea;
2223
use Mojo::JSON qw(encode_json decode_json);
2324
use OpenQA::YAML 'load_yaml';
2425
use Carp;
@@ -935,7 +936,10 @@ sub _format_check_description ($verb, $count, $total) {
935936
sub report_status_to_git ($self, $callback = undef) {
936937
my $id = $self->id;
937938
my $settings = $self->{_settings} // $self->settings;
938-
my $vcs = OpenQA::VcsProvider->new(app => OpenQA::App->singleton);
939+
return undef unless $self->webhook_id;
940+
my ($type) = split m/:/, $self->webhook_id;
941+
my $class = {gh => 'GitHub', gitea => 'Gitea'}->{$type} or return undef;
942+
my $vcs = "OpenQA::VcsProvider::$class"->new(app => OpenQA::App->singleton);
939943
$vcs->read_settings($settings) or return undef;
940944
my ($state, $verb, $count, $total) = $self->state_for_ci_status;
941945
return undef unless $state;

lib/OpenQA/VcsProvider.pm

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,34 @@ sub read_settings ($self, $settings) {
1818
return 1;
1919
}
2020

21-
sub report_status_to_git ($self, $params, $scheduled_product_id, $callback = undef) {
21+
sub add_params ($self, $params, $scheduled_product_id) {
2222
$params->{context} //= 'openqa';
2323
$params->{description} //= 'openQA test run';
2424
my $base_url = $self->base_url;
2525
$params->{target_url} //= "$base_url/admin/productlog?id=$scheduled_product_id"
2626
if $scheduled_product_id && $base_url;
27+
}
2728

28-
my $url = Mojo::URL->new($self->statuses_url);
29+
sub create_request ($self, $params) {
2930
my $app = $self->app;
3031
my $ua = $app->ua;
32+
my $url = Mojo::URL->new($self->statuses_url);
3133
my $tx = $ua->build_tx(POST => $url);
3234
my $req = $tx->req;
33-
my $headers = $req->headers;
34-
my $github_token = $app->config->{secrets}->{github_token};
3535
my $json = encode_json($params);
3636
$req->body($json);
37+
my $headers = $req->headers;
3738
$headers->content_type('application/json');
3839
$headers->content_length(length $json);
39-
$headers->header(Accept => 'application/vnd.github+json');
40-
$headers->header(Authorization => "Bearer $github_token");
41-
$headers->header('X-GitHub-Api-Version' => '2022-11-28');
42-
$ua->start($tx, $callback);
40+
41+
return $tx;
42+
}
43+
44+
sub report_status_to_git ($self, $params, $scheduled_product_id, $callback = undef) {
45+
$self->add_params($params, $scheduled_product_id);
46+
47+
my $tx = $self->create_request($params);
48+
$self->app->ua->start($tx, $callback);
4349
return $tx;
4450
}
4551

lib/OpenQA/VcsProvider/GitHub.pm

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Copyright SUSE LLC
2+
# SPDX-License-Identifier: GPL-2.0-or-later
3+
4+
package OpenQA::VcsProvider::GitHub;
5+
6+
use Mojo::Base 'OpenQA::VcsProvider', -signatures;
7+
use Mojo::URL;
8+
9+
sub create_request ($self, $params) {
10+
my $tx = $self->SUPER::create_request($params);
11+
my $headers = $tx->req->headers;
12+
13+
my $github_token = $self->app->config->{secrets}->{github_token};
14+
$headers->header(Accept => 'application/vnd.github+json');
15+
$headers->header(Authorization => "Bearer $github_token");
16+
$headers->header('X-GitHub-Api-Version' => '2022-11-28');
17+
18+
return $tx;
19+
}
20+
21+
1;

lib/OpenQA/VcsProvider/Gitea.pm

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Copyright SUSE LLC
2+
# SPDX-License-Identifier: GPL-2.0-or-later
3+
4+
package OpenQA::VcsProvider::Gitea;
5+
6+
use Mojo::Base 'OpenQA::VcsProvider', -signatures;
7+
use Mojo::URL;
8+
9+
sub create_request ($self, $params) {
10+
my $tx = $self->SUPER::create_request($params);
11+
my $headers = $tx->req->headers;
12+
13+
# my $github_token = $self->app->config->{secrets}->{github_token};
14+
# $headers->header(Accept => 'application/vnd.github+json');
15+
# $headers->header(Authorization => "Bearer $github_token");
16+
# $headers->header('X-GitHub-Api-Version' => '2022-11-28');
17+
18+
return $tx;
19+
}
20+
21+
1;

lib/OpenQA/WebAPI/Controller/API/V1/Webhook.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use OpenQA::Utils;
1010
use DBIx::Class::Timestamps 'now';
1111
use OpenQA::Schema::Result::JobDependencies;
1212
use OpenQA::Utils 'format_tx_error';
13-
use OpenQA::VcsProvider;
13+
use OpenQA::VcsProvider::GitHub;
1414
use Mojo::Util 'secure_compare';
1515

1616
my %SUPPORTED_PR_ACTIONS = (opened => 'opened', synchronize => 'updated', closed => 'closed');
@@ -144,7 +144,7 @@ sub product ($self) {
144144

145145
# create scheduled product and enqueue minion job with parameter
146146
my $scheduled_product = $scheduled_products->create_with_event(\%params, $self->current_user, $webhook_id);
147-
my $vcs = OpenQA::VcsProvider->new(app => $app);
147+
my $vcs = OpenQA::VcsProvider::GitHub->new(app => $app);
148148
my $cb = sub ($ua, $tx, @) {
149149
if (my $err = $tx->error) {
150150
$scheduled_product->delete;

t/16-utils-vcs-provider.t

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use FindBin;
88
use lib "$FindBin::Bin/lib", "$FindBin::Bin/../external/os-autoinst-common/lib";
99
require OpenQA::Test::Database;
1010
use OpenQA::Test::TimeLimit '5';
11-
use OpenQA::VcsProvider;
11+
use OpenQA::VcsProvider::GitHub;
1212
use Test::Mojo;
1313
use Test::Warnings ':report_warnings';
1414

@@ -20,7 +20,7 @@ subtest 'reporting status to GitHub' => sub {
2020
my $app = $t->app;
2121
$app->config->{secrets}->{github_token} = 'some-token';
2222

23-
my $git = OpenQA::VcsProvider->new(app => $app);
23+
my $git = OpenQA::VcsProvider::GitHub->new(app => $app);
2424
my $url = 'http://127.0.0.1/repos/some/repo/statuses/some-sha';
2525
$git->read_settings({GITHUB_STATUSES_URL => $url, CI_TARGET_URL => 'https://openqa.opensuse.org'});
2626
my $tx = $git->report_status_to_git({state => 'pending'}, '42');

t/api/16-webhooks.t

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ subtest 'failure when reporting status to GitHub' => sub {
9090
};
9191

9292
# mock reporting back to GitHub
93-
my $vcs_mock = Test::MockModule->new('OpenQA::VcsProvider');
93+
my $vcs_mock = Test::MockModule->new('OpenQA::VcsProvider::GitHub');
9494
my $minion_job_id;
9595
my $status_reports = 0;
9696
my $expected_sha = '04a3f669ea13a4aa7cbd4569f578a66f7403c43d';

0 commit comments

Comments
 (0)