Today I tried to set up CI on GitHub Actions for the RDF::KV Perl module
that I found on CPAN Digger to be lacking CI.
It wasn't supposed to be difficult but I encountered some issues and had to be pragmatic in the setup even if far from ideal.
IMHO it is better to have a working CI that already checks part of what can be checked than to have nothing.
I cloned the Git repository of the package and as it came with a Makefile.PL
I ran the usual
perl Makefile.PL
just to see a nasty error:
include /home/gabor/os/p5-rdf-kv/inc/Module/Install.pm
String found where operator expected at Makefile.PL line 5, near "readme_from 'lib/RDF/KV.pm'"
(Do you need to predeclare readme_from?)
syntax error at Makefile.PL line 5, near "readme_from 'lib/RDF/KV.pm'"
Execution of Makefile.PL aborted due to compilation errors.
I tried to understand the source of the problem, but I figured it is better to report it
maybe the author will point to something I am doing wrong or maybe the author will confirm the problem.
As I could not use the regular process, but I still wanted to see if the tests pass I installed the dependencies that were listed in the Makefile.PL
manually running cpanm
. As I saw that the tests pass after I installed all the dependencies I set up GitHub Actions.
From the results I learned that the author tests need some additional modules, however after installing those one of the author tests failed.
I think it is probably related to the same issue I already reported, so instead of trying to figure out what's going on I removed the test module that enabled
that specific test.
At this point I could send the pull-request.
We'll see how the author responds.
GitHub Action configuration file
name: CI
on:
push:
pull_request:
workflow_dispatch:
schedule:
- cron: '42 5 * * *'
jobs:
test:
strategy:
fail-fast: false
matrix:
runner: [ubuntu-latest, macos-latest, windows-latest]
perl: [ '5.30', '5.36' ]
exclude:
- runner: windows-latest
perl: '5.36'
- runner: windows-latest
perl: '5.34'
runs-on: ${{matrix.runner}}
name: OS ${{matrix.runner}} Perl ${{matrix.perl}}
steps:
- uses: actions/checkout@v3
- name: Set up perl
uses: shogo82148/actions-setup-perl@v1
with:
perl-version: ${{ matrix.perl }}
distribution: ${{ ( startsWith( matrix.runner, 'windows-' ) && 'strawberry' ) || 'default' }}
- name: Show Perl Version
run: |
perl -v
- name: Install Modules
run: |
cpanm -v
#cpanm --installdeps --notest .
cpanm --notest Moose URI::BNode RDF::Trine URI::NamespaceMap XML::RegExp Data::UUID::NCName Data::GUID::Any
cpanm --notest Test::Pod::Coverage Test::Pod
# The test using Test::CheckManifest fails without the Module::Install which now not used because of this issue:
# https://github.com/doriantaylor/p5-rdf-kv/issues/2
- name: Show Errors on Windows
if: ${{ failure() && startsWith( matrix.runner, 'windows-')}}
run: |
ls -l C:/Users/
ls -l C:/Users/RUNNER~1/
cat C:/Users/runneradmin/.cpanm/work/*/build.log
- name: Show Errors on Ubuntu
if: ${{ failure() && startsWith( matrix.runner, 'ubuntu-')}}
run: |
cat /home/runner/.cpanm/work/*/build.log
- name: Show Errors on OSX
if: ${{ failure() && startsWith( matrix.runner, 'macos-')}}
run: |
cat /Users/runner/.cpanm/work/*/build.log
- name: Run tests
env:
AUTHOR_TESTING: 1
RELEASE_TESTING: 1
run: |
prove -l
#perl Makefile.PL
#make
#make test
Conclusion
It is better to have a CI running and executing some of the tests in a less-than-ideal way than to have no CI.
A working CI can (and actually has to) be improved all the time.