From 64c07439feb44a6579d5b39f95f402ce91597f2e 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 Sponsored-by: Theke Solutions --- 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