From bbd385a17974e8af2e9cbfaa3aa52673c33c91e4 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 Sponsored-by: Theke Solutions Signed-off-by: Tomas Cohen Arazi Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize --- plugins/plugins-home.pl | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index 47d5262b32..3bed2e9dc6 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.20.1