summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrian d foy <brian.d.foy@gmail.com>2022-01-08 16:31:59 -0500
committerbrian d foy <brian.d.foy@gmail.com>2022-01-08 16:31:59 -0500
commit5cce8849c55a1e19ffb7315c5f6b0d72da1bdb90 (patch)
treec67793e1b7aeec6ef00ef6cf40f9b5b0771dcf5b
parent997c3eb0f87d9351e540151a4db07931197593af (diff)
Update GitHub workflows
-rw-r--r--.github/workflows/linux.yml69
-rw-r--r--.github/workflows/macos.yml70
-rw-r--r--.github/workflows/windows.yml59
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