From 5cce8849c55a1e19ffb7315c5f6b0d72da1bdb90 Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sat, 8 Jan 2022 16:31:59 -0500 Subject: Update GitHub workflows --- .github/workflows/linux.yml | 69 ++++++++++++++++++++++++++++++++++++++---- .github/workflows/macos.yml | 70 +++++++++++++++++++++++++++++++++++++++---- .github/workflows/windows.yml | 59 ++++++++++++++++++++++++++++++++---- 3 files changed, 183 insertions(+), 15 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 74be5bb..d917e3f 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -1,11 +1,29 @@ +# brian's standard GitHub Actions Ubuntu config for Perl 5 modules +# https://github.com/briandfoy/github_actions +# https://github.com/features/actions +# This file is licensed under the Artistic License 2.0 name: ubuntu on: push: branches: - - '*' + - '**' + - '!**windows**' + - '!**macos**' tags-ignore: - - '*' + # I tag release pushes but those should have already been tested + - 'release-*' + paths-ignore: + # list all the files which are irrelevant to the tests + # non-code, support files, docs, etc + - '.appveyor.yml' + - '.github/workflows/macos.yml' + - '.github/workflows/windows.yml' + - '.gitignore' + - '.releaserc' + - 'Changes' + - 'LICENSE' + - 'README.pod' pull_request: jobs: @@ -39,13 +57,27 @@ jobs: - name: Platform check run: uname -a - name: Perl version check - run: perl -V + run: | + perl -V + perl -v | perl -0777 -ne 'm/(v5\.\d+)/ && print "PERL_VERSION=$1"' >> $GITHUB_ENV +# Some older versions of Perl have trouble with hostnames in certs. I +# haven't figured out why. + - name: Setup environment + run: | + echo "PERL_LWP_SSL_VERIFY_HOSTNAME=0" >> $GITHUB_ENV +# I had some problems with openssl on Ubuntu, so I punted by installing +# cpanm first, which is easy. I can install IO::Socket::SSL with that, +# then switch back to cpan. I didn't explore this further, but what you +# see here hasn't caused problems for me. +# Need HTTP::Tiny 0.055 or later. - name: Install cpanm and multiple modules run: | curl -L https://cpanmin.us | perl - App::cpanminus - cpanm --notest IO::Socket::SSL - cpanm --notest App::Cpan + cpanm --notest IO::Socket::SSL App::Cpan ExtUtils::MakeMaker HTTP::Tiny cpan -M https://www.cpan.org -T ExtUtils::MakeMaker +# Install the dependencies, again not testing them. This installs the +# module in the current directory, so we end up installing the module, +# but that's not a big deal. - name: Install dependencies run: | cpan -M https://www.cpan.org -T . @@ -53,3 +85,30 @@ jobs: run: | perl Makefile.PL make test +# Running tests in parallel should be faster, but it's also more +# tricky in cases where different tests share a feature, such as a +# file they want to write to. Parallel tests can stomp on each other. +# Test in parallel to catch that, because other people will test your +# stuff in parallel. + - name: Run tests in parallel + run: | + perl Makefile.PL + HARNESS_OPTIONS=j10 make test +# The disttest target creates the distribution, unwraps it, changes +# into the dist dir, then runs the tests there. That checks that +# everything that should be in the dist is in the dist. If you forget +# to update MANIFEST with new modules, data files, and so on, you +# should notice the error. + - name: Run distribution tests + run: | + perl Makefile.PL + make disttest +# And, coverage reports, but only under 5.10 and later since modern +# Devel::Cover instances don't work with 5.8 + - name: Run coverage tests + if: env.PERL_VERSION != 'v5.8' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + cpan -M https://www.cpan.org -T Devel::Cover Devel::Cover::Report::Coveralls + cover -test -report coveralls diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 5583e8e..7c2062c 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -1,29 +1,62 @@ +# brian's standard GitHub Actions macOS config for Perl 5 modules +# https://github.com/briandfoy/github_actions +# https://github.com/features/actions +# This file is licensed under the Artistic License 2.0 name: macos on: push: branches: - - '*' + - '**' + - '!**windows**' + - '!**linux**' tags-ignore: - - '*' + # I tag release pushes but those should have already been tested + - 'release-*' + paths-ignore: + # list all the files which are irrelevant to the tests + # non-code, support files, docs, etc + - '.appveyor.yml' + - '.github/workflows/ubuntu.yml' + - '.github/workflows/windows.yml' + - '.gitignore' + - '.releaserc' + - 'Changes' + - 'LICENSE' + - 'README.pod' pull_request: jobs: perl: runs-on: macOS-latest - steps: - uses: actions/checkout@v2 - name: Platform check run: uname -a - name: Set up Perl - run: brew install perl + run: | + brew install perl + ls -d /usr/local/Cellar/perl/*/bin | head -1 >> $GITHUB_PATH + perl -v | perl -0777 -ne 'm/(v5\.\d+)/ && print "PERL_VERSION=$1"' >> $GITHUB_ENV - name: Perl version check run: perl -V +# cpan can operate with https, but we need IO::SSL::Socket, which +# does not come with Perl. +# +# When using cpan, use -M to specify the CDN-backed www.cpan.org +# mirror. I've noticed that letting CPAN.pm auto-choose mirrors +# sometimes selects things that the action can't reach. +# +# Also, use the -T option to not test the dependencies. Assume these +# mainline modules are good and save lots of CI minutes. - name: Prepare cpan run: | openssl version - cpan -M https://www.cpan.org -T Net::SSLeay IO::Socket::SSL ExtUtils::MakeMaker + cpan -M http://www.cpan.org -T IO::Socket::SSL LWP::Protocol::https + cpan -M https://www.cpan.org -T ExtUtils::MakeMaker +# Install the dependencies, again not testing them. This installs the +# module in the current directory, so we end up installing the module, +# but that's not a big deal. - name: Install dependencies run: | cpan -M https://www.cpan.org -T . @@ -31,3 +64,30 @@ jobs: run: | perl Makefile.PL make test +# Running tests in parallel should be faster, but it's also more +# tricky in cases where different tests share a feature, such as a +# file they want to write to. Parallel tests can stomp on each other. +# Test in parallel to catch that, because other people will test your +# stuff in parallel. + - name: Run tests in parallel + run: | + perl Makefile.PL + HARNESS_OPTIONS=j10 make test +# The disttest target creates the distribution, unwraps it, changes +# into the dist dir, then runs the tests there. That checks that +# everything that should be in the dist is in the dist. If you forget +# to update MANIFEST with new modules, data files, and so on, you +# should notice the error. + - name: Run distribution tests + run: | + perl Makefile.PL + make disttest +# And, coverage reports, but only under 5.10 and later since modern +# Devel::Cover instances don't work with 5.8 + - name: Run coverage tests + if: env.PERL_VERSION != 'v5.8' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + cpan -M https://www.cpan.org -T Devel::Cover Devel::Cover::Report::Coveralls + cover -test -report coveralls diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4015145..c6b1d09 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -1,22 +1,40 @@ +# brian's standard GitHub Actions Windows config for Perl 5 modules +# https://github.com/briandfoy/github_actions +# https://github.com/features/actions +# This file is licensed under the Artistic License 2.0 name: windows on: push: branches: - - '*' + - '**' + - '!**linux**' + - '!**macos**' tags-ignore: - - '*' + # I tag release pushes but those should have already been tested + - 'release-*' + paths-ignore: + # list all the files which are irrelevant to the tests + # non-code, support files, docs, etc + - '.appveyor.yml' + - '.github/workflows/macos.yml' + - '.github/workflows/ubuntu.yml' + - '.gitignore' + - '.releaserc' + - 'Changes' + - 'LICENSE' + - 'README.pod' pull_request: jobs: perl: runs-on: ${{ matrix.os }} + # store any secrets in an environment named "testing" strategy: matrix: os: - - windows-2019 - windows-2016 - + - windows-2019 steps: - uses: actions/checkout@v2 - name: Set up Perl @@ -27,9 +45,40 @@ jobs: echo "C:\strawberry\perl\bin" >> $GITHUB_PATH - name: Perl version run: perl -V +# Install the dependencies, again not testing them. This installs the +# module in the current directory, so we end up installing the module, +# but that's not a big deal. - name: Install dependencies - run: cpan -M https://www.cpan.org -T . + run: | + cpan -M https://www.cpan.org -T . - name: Run tests run: | perl Makefile.PL make test +# Running tests in parallel should be faster, but it's also more +# tricky in cases where different tests share a feature, such as a +# file they want to write to. Parallel tests can stomp on each other. +# Test in parallel to catch that, because other people will test your +# stuff in parallel. + - name: Run tests in parallel + env: + HARNESS_OPTIONS: j10 + run: | + perl Makefile.PL + make test +# The disttest target creates the distribution, unwraps it, changes +# into the dist dir, then runs the tests there. That checks that +# everything that should be in the dist is in the dist. If you forget +# to update MANIFEST with new modules, data files, and so on, you +# should notice the error. + - name: Run distribution tests + run: | + perl Makefile.PL + make disttest +# And, coverage reports + - name: Run coverage tests + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + cpan -M https://www.cpan.org -T Devel::Cover Devel::Cover::Report::Coveralls + cover -test -report coveralls -- cgit v1.2.3