Testing Perl Projects on Travis Windows
A few months ago, Travis CI announced early access for a Windows build environment. In the last couple weeks, I spent some time to figure out how to test Perl projects there by installing Strawberry Perl from Chocolatey.
The result is the the sample project winperl-travis. It demonstrates three
.travis.yml
configurations to test Perl projects on Windows:
- Use Windows instead of Linux to test multiple versions of Perl. This is the simplest configuration, but useful only for projects that never expect to run on a Unix-style OS.
- Add a Windows build stage that runs the tests against the latest version of Strawberry Perl. This pattern is ideal for projects that already test against multiple versions of Perl on Linux, and just want to make sure things work on windows.
- Add a build stage that tests against multiple versions of Strawberry Perl in separate jobs.
See the results of each of the three approaches in the CI build. A peek:

The Travis CI-default “Test” stage is the default, and runs tests on two versions of Perl on Windows. The “Windows” stage tests on a single version of Windows Perl, independent of the “Test” stage. And the “Strawberry” stage tests on multiple versions of Windows Perl independent of the “Test” stage.
If, like me, you just want to validate that your Perl project builds and its
tests pass on Windows (option 2), I adopted the formula in text-markup
project. The complete .travis.yml
:
language: perl
perl:
- "5.28"
- "5.26"
- "5.24"
- "5.22"
- "5.20"
- "5.18"
- "5.16"
- "5.14"
- "5.12"
- "5.10"
- "5.8"
before_install:
- sudo pip install docutils
- sudo apt-get install asciidoc
- eval $(curl https://travis-perl.github.io/init) --auto
jobs:
include:
- stage: Windows
os: windows
language: shell
before_install:
- cinst -y strawberryperl
- export "PATH=/c/Strawberry/perl/site/bin:/c/Strawberry/perl/bin:/c/Strawberry/c/bin:$PATH"
install:
- cpanm --notest --installdeps .
script:
- cpanm -v --test-only .
The files starts with the typical Travis Perl configuration: select the
language (Perl) and the versions to test. The before_install
block installs a
couple of dependencies and executes the travis-perl helper for more flexible
Perl testing. This pattern practically serves as boilerplate for new Perl
projects.
The new bit is the jobs.include
section, which declares a new build stage
named “Windows”. This stage runs independent of the default phase, which runs on
Linux, and declares os: windows
to run on Windows.
The before_install
step uses the pre-installed Chocolatey package manager to
install the latest version of Strawberry Perl and update the $PATH
environment variable to include the paths to Perl and build tools. Note that the
Travis CI Window environment runs inside the Git Bash shell environment; hence
the Unix-style path configuration.
The install
phase installs all dependencies for the project via cpanminus, then
the script
phase runs the tests, again using cpanminus.
And with the stage set, the text-markup build has a nice new stage that ensures all tests pass on Windows.
The use of cpanminus, which ships with Strawberry Perl, keeps things simple,
and is essential for installing dependencies. But projects can also perform the
usual gmake test
1 or perl Build.PL && ./Build test
dance. Install Dist::Zilla via cpanminus to manage dzil
-based projects.
Sadly, prove
currently does not work under Git Bash.2
Perhaps Travis will add full Perl support and things will become even easier. In the meantime, I’m pleased that I no longer have to guess about Windows compatibility. The new Travis Windows environment enables a welcome increase in cross-platform confidence.
-
Although versions of Strawberry Perl prior to 5.26 have trouble installing
Makefile.PL
-based modules, including dependencies. I spent a fair bit of time trying to work out how to make it work, but ran out of steam. See issue #1 for details. ↩︎ -
I worked around this issue for Sqitch by simply adding a copy of
prove
to the repository. ↩︎