From df2a7e4aa200ea9648d993241e75ef27e12fa103 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 Signed-off-by: Jonathan Druart --- plugins/plugins-home.pl | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index 0ef8f289dc..f9d72b885d 100755 --- a/plugins/plugins-home.pl +++ b/plugins/plugins-home.pl @@ -89,6 +89,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.39.2