Bug 41319: Automate sponsor tracking from git trailers

This patch replaces the hardcoded "Contributing companies and
institutions" list on the about page with an automated system that
extracts sponsor information from git commit trailers.

Changes:

1. about.pl: Load sponsor data from docs/sponsors.yaml using YAML::XS
2. about.tt: Replace hardcoded list with dynamic rendering from
   sponsors.yaml, displaying sponsors with their locations
3. docs/sponsors.yaml: Generated sponsor data file containing 212
   unique sponsors with contribution counts, locations, and URLs

The sponsor data is generated at release time using the
koha-update-sponsors script from release-tools (see release-tools
commit a30b8a3). The script:

- Extracts Sponsored-by: trailers from git history
- Applies alias resolution to consolidate duplicate names
- Preserves historical sponsors without git trailers
- Merges location and URL data from sponsor_map.yaml

This replaces the manual process of updating the sponsor list with
a maintainable approach that automatically captures all Sponsored-by:
entries from the git history while preventing duplicate entries through
alias resolution.

The about page now displays sponsors in the format:
"Organization Name, Country" instead of showing contribution counts.

To update the sponsor list at release time:
1. Run koha-update-sponsors from the Koha source directory
2. Review and commit the updated docs/sponsors.yaml

See release-tools README.md for detailed documentation.

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit e47511f889)
Signed-off-by: Jacob O'Mara <Jacob.omara@openfifth.co.uk>
This commit is contained in:
Martin Renvoize 2025-11-27 15:50:38 +00:00 committed by Jacob O'Mara
parent 8c6e4fc9f7
commit 73027e718a
No known key found for this signature in database
3 changed files with 1058 additions and 105 deletions

View File

@ -704,6 +704,12 @@ if ( $tab eq 'team' ) {
? YAML::XS::LoadFile( "$docdir" . "/contributors.yaml" )
: {};
delete $contributors->{_others_};
## Sponsors
my $sponsors =
-e "$docdir" . "/sponsors.yaml"
? eval { YAML::XS::LoadFile( "$docdir" . "/sponsors.yaml" ) } // {}
: {};
for my $version ( sort { $a <=> $b } keys %{ $teams->{team} } ) {
for my $role ( keys %{ $teams->{team}->{$version} } ) {
my $detail = $teams->{team}->{$version}->{$role};
@ -776,6 +782,7 @@ if ( $tab eq 'team' ) {
$template->param( kohaCodename => $codename );
$template->param( contributors => \@people );
$template->param( sponsors => $sponsors );
$template->param( maintenance_team => $teams->{team}->{$dev_team} );
$template->param( release_team => $teams->{team}->{$short_version} );

1037
docs/sponsors.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -902,111 +902,20 @@
<hr />
<h2>Contributing companies and institutions</h2>
<ul class="columns-4">
<li>Allen Ginsberg Library, USA</li>
<li>Alingsås Public Library, Sweden</li>
<li>American Numismatic Society, USA</li>
<li>Arcadia Public Library, USA</li>
<li>Athens County Public Libraries, USA</li>
<li>BdP de la Meuse, France</li>
<li>BibLibre, France</li>
<li>Biblioteca Provincial Fr. Mamerto Esquiú (Provincia Franciscana de la Asunción), Argentina</li>
<li>Bibliotheksservice-Zentrum Baden-Württemberg (BSZ), Germany</li>
<li>Briar Cliff University, USA</li>
<li>Brimbank City Council, Australia</li>
<li>Brooklyn Law School Library, USA</li>
<li>Bibliothèque Universitaire des Langues et Civilisations (<a href="https://www.bulac.fr">BULAC</a>), France</li>
<li>ByWater Solutions, USA</li>
<li>California College of the Arts, USA</li>
<li>Calyx, Australia</li>
<li>Camden County, USA</li>
<li>Cape Libraries Automated Materials Sharing (CLAMS), USA</li>
<li>Carnegie Stout Library, USA</li>
<li>Catalyst IT, New Zealand</li>
<li>Central Kansas Library System (CKLS), USA</li>
<li>Centre collégial des services regroupés (CCSR), Canada</li>
<li>Cheshire Libraries, United Kingdom</li>
<li>Coeur d'Alene Public Library, USA</li>
<li>Corpus Christi Public Libraries, USA</li>
<li>C &amp; P Bibliography Services, USA</li>
<li>Dataly Tech, Greece</li>
<li>Devinim, Turkey</li>
<li>Do Space, USA</li>
<li>DoverNet, USA</li>
<li>doXulting</li>
<li>Duchesne County Library, USA</li>
<li>Escuela de Orientacion Lacaniana, Argentina</li>
<li>Fenway Library Organization, USA</li>
<li>Fargo Public Library, USA</li>
<li>Farmington Public Library, USA</li>
<li>FIT</li>
<li>Foundations Bible College &amp; Seminary, USA</li>
<li>Goethe-Institut, Germany</li>
<li>Gothenburg University Library, Sweden</li>
<li>Halland County Library, Sweden</li>
<li>Harrison Carmel Public Library, USA</li>
<li>Hauraki District Libraries, New Zealand</li>
<li>Higher Education Libraries of Massachusetts, USA</li>
<li>Hochschule für Gesundheit (hsg), Germany</li>
<li>Hotchkiss School, USA</li>
<li>Karlsruhe Institute of Technology (KIT), Germany</li>
<li>Katipo Communications, New Zealand</li>
<li>KEEP SOLUTIONS, Portugal</li>
<li>KohaAloha, New Zealand</li>
<li>Koha-Suomi Oy, Finland</li>
<li>LibLime, USA</li>
<li>Library of the Józef Piłsudski Institute of America, USA</li>
<li>Libriotech, Norway</li>
<li>Los Gatos Public Library, USA</li>
<li>Lund University Library, Sweden</li>
<li>MassCat, USA</li>
<li>Middletown Township Public Library, USA</li>
<li>National Library of Finland, Finland</li>
<li>Newcastle City Council, United Kingdom</li>
<li>New Zealand Central Agencies Library, New Zealand</li>
<li>New Zealand Ministry of Education Library, New Zealand</li>
<li>North Central Regional Library (NCRL), USA</li>
<li>Northeast Kansas Library System (NEKLS), USA</li>
<li>OPUS</li>
<li>Orex Digital, Spain</li>
<li>Oslo Public Library, Norway</li>
<li>Plano Independent School, USA</li>
<li>Plant and Food Research Limited, New Zealand</li>
<li>Prosentient Systems, Australia</li>
<li>PTFS, Maryland, USA</li>
<li>PTFS Europe Ltd, United Kingdom</li>
<li>Rijksmuseum, Amsterdam, The Netherlands</li>
<li>Rolling Hills Consolidated Libraries, USA</li>
<li>Round Rock Public Library, USA</li>
<li>SAN-Ouest Provence, France</li>
<li>Sefton Council, United Kingdom</li>
<li>software.coop, United Kingdom</li>
<li>South-East Kansas Library System (SEKLS), USA</li>
<li>South Taranaki District Council, New Zealand</li>
<li>Stockholm University Library, Sweden</li>
<li>SWITCH Library Consortium, USA</li>
<li>Talking Tech, Global</li>
<li>Tamil, France</li>
<li>Theke Solutions, Argentina</li>
<li>Tulong Aklatan, Philippines</li>
<li>Uintah Library System, USA</li>
<li>Universidad de El Salvador, El Salvador</li>
<li>Universidad Empresarial Siglo 21, Argentina</li>
<li>Universidad Nacional de Córdoba, Argentina</li>
<li>Universidad ORT Uruguay</li>
<li>Université d'Aix-Marseille, France</li>
<li>Université de Lyon 3, France</li>
<li>Université de Rennes 2, France</li>
<li>Université de St Etienne, France</li>
<li>University of the Arts London, United Kingdom</li>
<li>Vaara-kirjastot, Finland</li>
<li>Vanier College, Canada</li>
<li>Vermont Organization of Koha Automated Libraries (VOKAL), USA</li>
<li>Ville de Victoriaville, Canada</li>
<li>Virginia Tech, USA</li>
<li>Washoe County Library System, USA</li>
<li>Xercode, Spain</li>
</ul>
[% IF sponsors.keys.size %]
<ul class="columns-4">
[% FOREACH sponsor IN sponsors.keys.sort %]
<li>
[% IF sponsors.$sponsor.url && sponsors.$sponsor.url != '~' %]
<a href="[% sponsors.$sponsor.url | url %]">[% sponsor | html %]</a>
[% ELSE %]
[% sponsor | html %]
[% END %]
[% IF sponsors.$sponsor.location %], [% sponsors.$sponsor.location | html %][% END %]
</li>
[% END %]
</ul>
[% END %]
<h2>Additional thanks to...</h2>
<ul>