|
3 | 3 |
|
4 | 4 | package OpenQA::VcsProvider; |
5 | 5 |
|
6 | | -use Mojo::Base -base, -signatures; |
7 | | -use Mojo::JSON qw(encode_json); |
8 | | -use Mojo::URL; |
9 | | - |
10 | | -has 'app'; |
11 | | -has 'base_url'; |
12 | | -has 'statuses_url'; |
13 | | - |
14 | | -sub read_settings ($self, $settings) { |
15 | | - $self->statuses_url($settings->{GITHUB_STATUSES_URL}); |
16 | | - $self->base_url($settings->{CI_TARGET_URL}); |
17 | | - return undef unless $self->statuses_url; |
18 | | - return 1; |
19 | | -} |
20 | | - |
21 | | -sub add_params ($self, $params, $scheduled_product_id) { |
22 | | - $params->{context} //= 'openqa'; |
23 | | - $params->{description} //= 'openQA test run'; |
24 | | - my $base_url = $self->base_url; |
25 | | - $params->{target_url} //= "$base_url/admin/productlog?id=$scheduled_product_id" |
26 | | - if $scheduled_product_id && $base_url; |
27 | | -} |
28 | | - |
29 | | -sub create_request ($self, $params) { |
30 | | - my $app = $self->app; |
31 | | - my $ua = $app->ua; |
32 | | - my $url = Mojo::URL->new($self->statuses_url); |
33 | | - my $tx = $ua->build_tx(POST => $url); |
34 | | - my $req = $tx->req; |
35 | | - my $json = encode_json($params); |
36 | | - $req->body($json); |
37 | | - my $headers = $req->headers; |
38 | | - $headers->content_type('application/json'); |
39 | | - $headers->content_length(length $json); |
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); |
49 | | - return $tx; |
| 6 | +use Mojo::Base -signatures; |
| 7 | +use OpenQA::VcsProvider::GitHub; |
| 8 | +use OpenQA::VcsProvider::Gitea; |
| 9 | + |
| 10 | +sub new ($class, %args) { |
| 11 | + my $type = delete $args{type}; |
| 12 | + my ($provider) = split m/:/, $type; |
| 13 | + $class = {gh => 'GitHub', gitea => 'Gitea'}->{$provider} or return undef; |
| 14 | + return "OpenQA::VcsProvider::$class"->new(%args); |
50 | 15 | } |
51 | 16 |
|
52 | 17 | 1; |
0 commit comments