Help us understand the problem. What is going on with this article?

travis CI の仕様変更によりPerlの古いバージョンの自動テストがうまくいかない件を解決する

症状

  • Travis.CIにてPerl5.20以下のビルドに失敗する。
  • githubに上げてる.travis.ymlはいじってない。

解決策

.travis.ymlの冒頭にdist: trustyと添えるだけで直る。

原因その1

travisが初期状態で持ってるperlbrewのバージョンが古い?
perlbrewでソースを読みに行くURLが404 not foundcurlに失敗している。
よって、perlbrew use 5.xxに失敗。初期状態でperlbrew listに入っている5.22以上だと影響がない。

原因その2

Module::Build::Tiny のバージョンが古い?

cpanfile

on configure => sub {
    requires 'Module::Build::Tiny', '0.039';
};

とわざわざ最新のバージョンを指定しているのにも関わらず、

Can't locate Module/Build/Tiny.pm in @INC (you may need to install the Module::Build::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at Build.PL line 9.

と、怒られる。この事象だけなら.travis.yml

before_install:
  - 'cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)'
  - 'cpanm Module::Build::Tiny'

と明示的なインストールをすることで解決するが、そもそもdist: trustyと指定した場合、この記載はいらないことを確認したし、そうでない場合はperlbrew use 5.xxに失敗してもテストが止まらず、指定していないバージョンでテストを走らせてpassしてしまうという謎の大暴走を起こすので全くお勧めできない。

結論

.travis.ymldist: trustyと入れれば従来通り後方互換性を自動確認しながらモジュールを更新できる。

dist: trusty
language: perl
sudo: false

perl:
- '5.8'
- '5.10'
- '5.12'
- '5.14'
- '5.16'
- '5.18'
- '5.20'
- '5.22'
- '5.24'
- '5.26'
- '5.28'
- '5.30'
...

なぜ?

わかりません。curlの先が404 not foundになっている時点で参照元のデータベースが古いか、バグかを疑うところなんですが、travis CIのサポートにメールで問い合わせた結果としてdist: trusty使えばええねん、という回答しか来なかったので。

この件を深掘りできる方のコメントおよび編集リクエストお待ちしております

worthmine
ニッチな記事しか書かへんで
https://twitter.com/worthmine
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away