Browse Source

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:

 <plugin_repos>
     <repo>
         <name>ByWater Solutions</name>
         <org_name>bywatersolutions</org_name>
         <service>github</service>
     </repo-
     <repo>
         <name>Theke Solutions</name>
         <org_name>thekesolutions</org_name>
         <service>gitlab</service>
     </repo>
     <repo>
         <name>PTFS Europe</name>
         <org_name>ptfs-europe</org_name>
         <service>github</service>
     </repo>
  </plugin_repos>

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 <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
20.11.x
Tomas Cohen Arazi 1 year ago
committed by Jonathan Druart
parent
commit
df2a7e4aa2
  1. 32
      plugins/plugins-home.pl

32
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(

Loading…
Cancel
Save