最近の Module::Install で Travis るときの注意ポイント

Travis は Github 連携の CI サービスで、結構前に Perl にも対応しているので最近更新したレポジトリには基本的に .travis.yml を置いて便利に使わせていただいていたのですが、 いままで使っていた設定だとtravis上でうまくテストが通らなくなってしまった。

今まで使っていた方法は、まず gfx 考案の Makefile.PL をベースに Makefile.PL をこんなかんじで書く:

use strict;
use warnings;

BEGIN {
    my @devmods = qw(
        Module::Install::AuthorTests
        Module::Install::ReadmeFromPod
        Module::Install::Repository
    );
    my @not_available;

    eval qq{use inc::Module::Install; 1;} or push @not_available, 'inc::Module::Install';
    for my $mod (@devmods) {
        eval qq{require $mod} or push @not_available, $mod;
    }
    if (@not_available) {
        print qq{# The following modules are not available.\n};
        print qq{# `$^X $0 | cpanm` will install them:\n};
        print $_, "\n" for @not_available;
        print "\n";
        exit -1;
    }
}

use inc::Module::Install;

name 'Test-RedisServer';
all_from 'lib/Test/RedisServer.pm';

test_requires 'Redis';
test_requires 'Test::More' => '0.86';
test_requires 'Test::TCP'  => '1.17';

requires 'perl'       => '5.008001';
requires 'File::Temp' => '0.19'; # newdir
requires 'Any::Moose' => '0.18';

readme_from 'lib/Test/RedisServer.pm';
author_tests 'xt';
auto_set_repository;

WriteAll;

こうすると perl Makefile.PL | cpanm で必要な Module::Install モジュールが入るので、.travis.yml

language: "perl"
before_install:
    - perl Makefile.PL | cpanm

こんな感じにするだけでOK。でした。前までは。

.travis.yml はこのままでいいんですが、最近の Module::Install は use inc::Module::Install したときに

include /Users/typester/dev/Test-RedisServer/inc/Module/Install.pm

みたいのを標準出力に出力するので、それが cpanm に渡ってしまいおかしなことになっている模様。

苦肉の策として

    {
        local *STDOUT;
        eval qq{use inc::Module::Install; 1;} or push @not_available, 'inc::Module::Install';
    }

みたいのを入れてしのいだ。

最終的な Makefile.PL はこちら。 Travis のときは author_tests 走らないようにとかもしてある。

by typester / at 2012-08-31T10:51:00 / perl · travis / Comment