DEV Community

Gabor Szabo
Gabor Szabo

Posted on • Originally published at code-maven.com

Day 7: Be pragmatic setting up CI for the RDF::KV

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
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)