diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff20a46..036219d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,19 +6,16 @@ jobs: build: strategy: matrix: - os: [ubuntu-latest, macos-latest] - perl: [ '5.36', '5.34', '5.32', '5.30', '5.28', '5.26', '5.24', '5.22', '5.20', '5.18', '5.16', '5.14' ] + os: [ubuntu, macos] + perl: [ '5.38', '5.36', '5.34', '5.32', '5.30', '5.28', '5.26', '5.24', '5.22', '5.20', '5.18', '5.16', '5.14' ] name: đŸȘ Perl ${{ matrix.perl }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest steps: - uses: actions/checkout@v4 - - name: Setup perl + - name: Setup Perl ${{ matrix.perl }} uses: shogo82148/actions-setup-perl@v1 - with: - perl-version: ${{ matrix.perl }} - - run: perl -V - - run: |- - cpanm -qn Module::Build Software::License - perl Build.PL - PERL_MM_USE_DEFAULT=1 ./Build installdeps --cpan_client 'cpanm -qn' - ./Build test + with: { perl-version: "${{ matrix.perl }}" } + - name: Install Dependencies + run: cpanm -vn Module::Build && cpanm -vn --installdeps --with-recommends . + - name: Run Tests + run: perl Build.PL ./Build && ./Build test diff --git a/Build.PL b/Build.PL index a5d57cb..a98fb20 100644 --- a/Build.PL +++ b/Build.PL @@ -59,16 +59,10 @@ my $build = $class->new( module_name => 'PGXN::Site', license => 'postgresql', script_files => 'bin', - configure_requires => { 'Module::Build' => '0.30', }, + configure_requires => { 'Module::Build' => '0.4209' }, build_requires => { - 'HTTP::Message::PSGI' => 0, - 'Module::Build' => '0.30', - 'Plack::Test' => 0, - 'Software::License' => '0.102340', - 'Test::File::Contents' => '0.20', - 'Test::More' => '0.70', - 'Test::MockModule' => '0.05', - 'Text::MultiMarkdown' => '1.000033', + 'Module::Build' => '0.4209', + 'Text::MultiMarkdown' => 0, }, requires => { 'Carp' => 0, @@ -98,19 +92,32 @@ my $build = $class->new( 'Template::Declare::Tags' => '0.43', 'WWW::PGXN' => '0.12.0', }, - test_recommends => { - 'HTTP::Request::Common' => '5.824', - 'Test::Pod' => '1.41', - 'Test::Pod::Coverage' => '1.06', - 'Test::XML' => '0.08', - 'Test::XPath' => '0.13', - }, meta_merge => { + 'meta-spec' => { version => 2 }, resources => { homepage => 'https://www.pgxn.org/', bugtracker => 'https://github.com/pgxn/pgxn-site/issues/', repository => 'https://github.com/pgxn/pgxn-site/', }, + prereqs => { + test => { + requires => { + 'HTTP::Message::PSGI' => 0, + 'HTTP::Request::Common' => '5.824', + 'Plack::Test' => 0, + 'Test::File::Contents' => '0.20', + 'Test::More' => '0.70', + 'Test::MockModule' => '0.05', + }, + recommends => { + 'Test::Pod' => '1.41', + 'Test::Pod::Coverage' => '1.06', + 'Test::XML' => '0.08', + 'Test::XPath' => '0.13', + 'PGXN::API::Searcher' => '0.10.1', + }, + }, + }, }, ); diff --git a/Changes b/Changes index 8e92147..e0c2beb 100644 --- a/Changes +++ b/Changes @@ -1,12 +1,16 @@ Revision history for Perl extension PGXN::Site -0.22.3 - - Updated the donor links, removing or replacing dead URLs. +0.23.0 + - Updated links in the static pages, removing or replacing dead URLs. - Changed the default search index from "Documentation" to "Distributions". Few releases include documentation other than a README, which pgxn-api indexes in the distributions index and not the documentation index. So make distribution search the default to improve the default search experience. + - Updated the build metadata to comply with CPAN Meta spec v2. + - Changed the "Release It!" link in the footer to "Release on PGXN" to + make its intent clearer. + - Added a Python one-liner to serve a mirror to `mirroring.mmd`. 0.22.2 2023-02-18T23:25:58Z - Replaced Twitter link with Mastodon and added a rel link to Mastodon diff --git a/README.md b/README.md index af80a33..b6cd488 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ extensions that do exist. I’d like to solve that problem. Care to help? Copyright and License --------------------- -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the [PostgreSQL License]. diff --git a/bin/pgxn_site_server b/bin/pgxn_site_server index 49f9f64..27ab161 100755 --- a/bin/pgxn_site_server +++ b/bin/pgxn_site_server @@ -260,7 +260,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site.pm b/lib/PGXN/Site.pm index 5e39c80..65edb3b 100644 --- a/lib/PGXN/Site.pm +++ b/lib/PGXN/Site.pm @@ -2,7 +2,7 @@ package PGXN::Site; use 5.10.0; use utf8; -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; sub version_string { sprintf 'v%vd', $VERSION; @@ -90,7 +90,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site/Controller.pm b/lib/PGXN/Site/Controller.pm index dd8a4ca..623769a 100644 --- a/lib/PGXN/Site/Controller.pm +++ b/lib/PGXN/Site/Controller.pm @@ -11,7 +11,7 @@ use Encode; use WWW::PGXN; use List::MoreUtils qw(any); use namespace::autoclean; -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; Template::Declare->init( dispatch_to => ['PGXN::Site::Templates'] ); @@ -586,7 +586,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site/Locale.pm b/lib/PGXN/Site/Locale.pm index fb3cbc8..c088dfc 100644 --- a/lib/PGXN/Site/Locale.pm +++ b/lib/PGXN/Site/Locale.pm @@ -6,7 +6,7 @@ use parent 'Locale::Maketext'; use I18N::LangTags::Detect; use File::Spec; use Carp; -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; # Allow unknown phrases to just pass-through. our %Lexicon = ( @@ -33,8 +33,8 @@ our %Lexicon = ( 'PGXN Blog' => 'PGXN Blog', 'FAQ' => 'FAQ', 'Frequently Asked Questions' => 'Frequently Asked Questions', - 'Release It' => 'Release It', - 'Release it on PGXN' => 'Release it on PGXN', + 'Release on PGXN' => 'Release on PGXN', + 'How to release extensions on PGXN' => 'How to release extensions on PGXN', code => 'code', design => 'design', logo => 'logo', @@ -290,7 +290,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site/Locale/en.pm b/lib/PGXN/Site/Locale/en.pm index 563234c..3daea51 100644 --- a/lib/PGXN/Site/Locale/en.pm +++ b/lib/PGXN/Site/Locale/en.pm @@ -3,7 +3,7 @@ package PGXN::Site::Locale::en; use 5.10.0; use utf8; use parent 'PGXN::Site::Locale'; -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; our %Lexicon = ( ); @@ -29,7 +29,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site/Locale/en/about.mmd b/lib/PGXN/Site/Locale/en/about.mmd index 03d7424..17a5d14 100644 --- a/lib/PGXN/Site/Locale/en/about.mmd +++ b/lib/PGXN/Site/Locale/en/about.mmd @@ -30,11 +30,10 @@ The network currently consists of: One of the primary distinguishing features of [PostgreSQL]—and perhaps the number one reason to use it instead of another DBMS—is its extensibility and the large number of database extensions already available: [PostGIS], [ISN], -[hstore], [pgTAP], [BioPostgres], [PL/R], [PL/Proxy], [Golconde], [pgmemcache], -and more. Especially with the formal support for [extensions], PostgreSQL today -is not merely a database, it’s an application development platform. However, -many of these extensions are virtually unknown even among experienced users -because they are hard to find. +[hstore], [pgTAP], [PL/R], [PL/Proxy], and more. Especially with the formal +support for [extensions], PostgreSQL today is not merely a database, it’s an +application development platform. However, many of these extensions are +virtually unknown even among experienced users because they are hard to find. PGXN solves the “hard to find” issue by providing centralized listings and searchable documentation for PostgreSQL extensions. Here you can easily search @@ -73,14 +72,12 @@ This site eschews JavaScript, and uses no tracking or analytics services. [PGXN Search]: https://pgxn.org/ [PGXN Client]: https://pgxn.github.io/pgxnclient/ [PostgreSQL]: https://www.postgresql.org/ - [PostGIS]: https://postgis.refractions.net/ + [PostGIS]: https://postgis.net/ [ISN]: https://www.postgresql.org/docs/current/isn.html - [hstore]: https://www.postgresql.org/docs/curent/static/hstore.html + [hstore]: https://www.postgresql.org/docs/current/hstore.html [pgTAP]: https://pgtap.org/ - [BioPostgres]: https://sourceforge.net/projects/biopostgres/ [PL/R]: https://github.com/postgres-plr/plr [PL/Proxy]: https://plproxy.github.io - [Golconde]: https://code.google.com/archive/p/golconde/ [pgmemcache]: https://pgfoundry.org/projects/pgmemcache/ [extensions]: https://www.postgresql.org/docs/current/extend-extensions.html "PostgreSQL Documentation: “Packaging Related Objects into an Extension”" diff --git a/lib/PGXN/Site/Locale/en/art.mmd b/lib/PGXN/Site/Locale/en/art.mmd index 30a4bb1..64655ad 100644 --- a/lib/PGXN/Site/Locale/en/art.mmd +++ b/lib/PGXN/Site/Locale/en/art.mmd @@ -1,8 +1,10 @@ PGXN Graphic Identity ===================== +![Creative Commons License](https://licensebuttons.net/l/by/4.0/88x31.png) + - Creative Commons License + Creative Commons License
The PGXN Graphic Identity @@ -11,14 +13,14 @@ including the type treatments of the word "PGXN" and the phrase "PostgreSQL Extension Network", as well as the gear logo, is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Based on a work at pgxn.org. -Design by Strongrrl. +Design by Strongrrl. ### Logo Type ### * The text "PGXN" is composed in - [Bank Gothic BT](https://www.myfonts.com/fonts/bitstream/bank-gothic/) + [Bank Gothic BT](https://www.myfonts.com/collections/bank-gothic-font-bitstream) * The text "PostgreSQL Extension Network" is rendered in - [Myriad](https://www.myfonts.com/fonts/adobe/myriad/) 215 LT condensed + [Myriad](https://www.myfonts.com/collections/myriad-font-adobe) 215 LT condensed ### Logo Art ### diff --git a/lib/PGXN/Site/Locale/en/faq.mmd b/lib/PGXN/Site/Locale/en/faq.mmd index 5aba42c..db7e851 100644 --- a/lib/PGXN/Site/Locale/en/faq.mmd +++ b/lib/PGXN/Site/Locale/en/faq.mmd @@ -105,7 +105,7 @@ Is there a command-line client for installing extensions from PGXN? : Then you can install PGXN extensions with a simple command: :
pgxn install pair
: Run `pgxn help` to get a list of supported commands; or check out the - introductory [blog] [posts], the [complete documentation] or the [source + introductory [blog][] [posts], the [complete documentation] or the [source code]. @@ -185,18 +185,18 @@ Is the PGXN logo available for use? : Yes, see [identity] for the license details and downloadable artwork. - [citext]: https://www.postgresql.org/docs/current/static/citext.html - [hstore]: https://www.postgresql.org/docs/current/static/hstore.html - [dblink]: https://www.postgresql.org/docs/current/static/dblink.html + [citext]: https://www.postgresql.org/docs/current/citext.html + [hstore]: https://www.postgresql.org/docs/current/hstore.html + [dblink]: https://www.postgresql.org/docs/current/dblink.html [pgTAP]: https://pgxn.org/extension/pgtap - [PL/Perl]: https://www.postgresql.org/docs/current/static/plperl.html + [PL/Perl]: https://www.postgresql.org/docs/current/plperl.html [PL/R]: https://github.com/postgres-plr/plr [Extending SQL]: https://www.postgresql.org/docs/current/extend.html [How To]: https://manager.pgxn.org/howto [CPAN example]: https://www.cpan.org/misc/ZCAN.html [PGXN Manager]: https://manager.pgxn.org/ [Request Account]: https://manager.pgxn.org/account/register - [troll]: https://en.wikipedia.org/wiki/Internet_troll + [troll]: https://en.wikipedia.org/wiki/Troll_(slang) [KISS]: https://en.wikipedia.org/wiki/KISS_principle [META.json]: https://pgxn.org/spec/ [pgxn-tools]: https://github.com/pgxn/docker-pgxn-tools @@ -214,7 +214,7 @@ Is the PGXN logo available for use? [complete documentation]: https://pgxn.github.io/pgxnclient/ [source code]: https://github.com/pgxn/pgxnclient [PGXS]: https://www.postgresql.org/docs/current/extend-pgxs.html - [The PostgreSQL License]: https://www.postgresql.org/about/licence + [The PostgreSQL License]: https://www.postgresql.org/about/licence/ [mirroring]: https://pgxn.org/mirroring/ [depesz]: https://www.depesz.com [PostgreSQL Funds Group]: https://www.postgresql.org/about/policies/funds-group/ diff --git a/lib/PGXN/Site/Locale/en/mirroring.mmd b/lib/PGXN/Site/Locale/en/mirroring.mmd index 6d22dec..b467264 100644 --- a/lib/PGXN/Site/Locale/en/mirroring.mmd +++ b/lib/PGXN/Site/Locale/en/mirroring.mmd @@ -22,8 +22,13 @@ On Windows, use AT like so: Please do not sync more than once every hour. And realistically you only need to sync once or twice a day. Next, set up a web server to serve the mirror. If your rsync is already in the subdirectory of a web server root, you should be golden. -Otherwise, if you’re using [Apache], you can set up a virtual host like so -(assuming that you’re `rsync`ing to `/usr/local/pgxn`): +Otherwise you need a static file web server; perhaps the simplest is this [Python +one-liner] serving on port 8080: + + python -m http.server 8080 + +If you’re using [Apache], you can set up a virtual host like so (assuming that +you’re `rsync`ing to `/usr/local/pgxn`): DocumentRoot /usr/local/pgxn @@ -51,7 +56,8 @@ For [Nginx], you set set up a virtual host like this: If you’d like to register your mirror, [send us email] with all the details and we’ll get you registered. - [rsync]: https://rsync.samba.org/ - [Apache]: https://httpd.apache.org/ - [Nginx]: https://www.nginx.org/ + [rsync]: https://rsync.samba.org + [Python one-liner]: https://docs.python.org/3/library/http.server.html + [Apache]: https://httpd.apache.org + [Nginx]: https://nginx.org [send us email]: mailto:[_1] diff --git a/lib/PGXN/Site/Locale/fr.pm b/lib/PGXN/Site/Locale/fr.pm index 5ef516c..d506138 100644 --- a/lib/PGXN/Site/Locale/fr.pm +++ b/lib/PGXN/Site/Locale/fr.pm @@ -3,7 +3,7 @@ package PGXN::Site::Locale::fr; use 5.10.0; use utf8; use parent 'PGXN::Site::Locale'; -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; our %Lexicon = ( listcomma => ',', @@ -34,7 +34,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site/Router.pm b/lib/PGXN/Site/Router.pm index 558b857..ae42753 100644 --- a/lib/PGXN/Site/Router.pm +++ b/lib/PGXN/Site/Router.pm @@ -6,7 +6,7 @@ use PGXN::Site::Controller; use Router::Resource; use Plack::Builder; use Plack::App::File; -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; sub app { my $class = shift; @@ -195,7 +195,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/lib/PGXN/Site/Templates.pm b/lib/PGXN/Site/Templates.pm index 225e62b..eb394e1 100644 --- a/lib/PGXN/Site/Templates.pm +++ b/lib/PGXN/Site/Templates.pm @@ -14,7 +14,7 @@ use File::Basename qw(basename); use SemVer; use Gravatar::URL; #use namespace::autoclean; # Do not use; breaks sort {} -our $VERSION = v0.22.2; +our $VERSION = v0.23.0; my $l = PGXN::Site::Locale->get_handle('en'); sub T { $l->maketext(@_) } @@ -209,9 +209,9 @@ BEGIN { create_wrapper wrapper => sub { }; span { class is 'grey'; '|' }; a { - href is 'https://manager.pgxn.org/'; - title is T 'Release it on PGXN'; - T 'Release It'; + href is 'https://manager.pgxn.org/howto'; + title is T 'How to release extensions on PGXN'; + T 'Release on PGXN'; }; }; span { @@ -1687,7 +1687,7 @@ David E. Wheeler =head1 Copyright and License -Copyright (c) 2010-2021 David E. Wheeler. +Copyright (c) 2010-2024 David E. Wheeler. This module is free software; you can redistribute it and/or modify it under the L. diff --git a/t/templates.t b/t/templates.t index 3bebd9e..a12b462 100644 --- a/t/templates.t +++ b/t/templates.t @@ -5,12 +5,12 @@ use utf8; use Test::More; use HTML::TagCloud; use PGXN::Site; +use HTTP::Request::Common; BEGIN { for my $mod (qw( Test::XML Test::XPath - HTTP::Request::Common )) { eval "use $mod;"; plan skip_all => "$mod required for template testing" if $@; @@ -399,9 +399,9 @@ sub test_wrapper { }); $tx->is('./span[2][@class="grey"]', '|', 'Should have spacer span'); $tx->ok('./a[3]', 'Test third anchor', sub { - $tx->is('./@href', 'https://manager.pgxn.org/', 'Should link to manage.pgxn.org'); - $tx->is('./@title', $mt->maketext('Release it on PGXN'), 'Should have link title'); - $tx->is('./text()', $mt->maketext('Release It'), 'Should have text "Blog"'); + $tx->is('./@href', 'https://manager.pgxn.org/howto', 'Should link to the manager How To'); + $tx->is('./@title', $mt->maketext('How to release extensions on PGXN'), 'Should have link title'); + $tx->is('./text()', $mt->maketext('Release on PGXN'), 'Should have text "Release on PGXN"'); }); }); # /span.floatLeft