From b001c1c26e00706435d55d5685b9298f73bc267e Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 20 Oct 2020 14:29:38 -0300 Subject: [PATCH] Bug 24633: Add support for gitlab searching of plugins This patch adds the option to add Gitlab repositories to look for Koha plugins. As with Github, plugin projects need to be named koha-plugin-* and the release file needs to be named with the .kpz extension. To test: 1. Apply this patchset 2. Check either koha-conf.xml or koha-conf.site.xml.in for sample configurations of gitlab targets. 3. Tweak your koha-conf.xml accordingly. You could have: ByWater Solutions bywatersolutions github Theke Solutions thekesolutions gitlab PTFS Europe ptfs-europe github 4. Flush memcached and restart plack: $ flush_memcached $ koha-plack --restart kohadev 5. Open the plugins page, search for anything, like 'gobi' or 'a' => SUCCESS: You get Theke results! 6. Pick a gitlab plugin for install => SUCCESS: It is installed! 7. Sign off :-D Signed-off-by: Tomas Cohen Arazi --- plugins/plugins-home.pl | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index 47d5262b324..3bed2e9dc6f 100755 --- a/plugins/plugins-home.pl +++ b/plugins/plugins-home.pl @@ -86,6 +86,38 @@ if ($plugins_enabled) { push( @results, { repo => $r, result => $result } ); } } + elsif ( $r->{service} eq 'gitlab' ) { + my $org_name = $r->{org_name}; + my $url = "https://gitlab.com/api/v4/groups/$org_name/projects?with_issues_enabled=no\&with_merge_requests_enabled=no\&with_shared=no\&include_subgroups=yes\&search=koha-plugin+$plugin_search"; + my $response = from_json( get($url) ); + foreach my $result ( @{ $response } ) { + next unless $result->{name} =~ /^koha-plugin-/; + my $project_id = $result->{id}; + my $description = $result->{description} // ''; + my $web_url = $result->{web_url}; + my $releases_url = "https://gitlab.com/api/v4/projects/$project_id/releases"; + my @releases = @{ from_json( get($releases_url) ) }; + + if ( scalar @releases > 0 ) { + # Pick the first one, the latest release + my $latest = $releases[0]; + my $name = $latest->{name}; + my @links = @{$latest->{assets}->{links}}; + my $url = $links[0]->{direct_asset_url}; + my @parts = split( '/', $url); + my $filename = $parts[-1]; + next unless $url =~ m/\.kpz$/; + my $result = { + description => $description, + install_name => $filename, + install_url => $url, + html_url => $web_url, + name => $name, + }; + push @results, { repo => $r, result => $result }; + } + } + } } $template->param( -- 2.28.0