Версии Perl которые доступны в Travis CI

Travis CI — это великолепная система для прогона тестов в open source проектах. Travis CI умеет работать с языком программирования Perl, но к сожалению в документации нет полного списка версий с которыми может работать Travis CI.

Я провел несколько экспериментов и выяснил какие версии Perl поддерживает Travis CI.

Вот .travis.yml со списком всех доступных версий языка Perl:

language: perl

install: 'echo "Nothing to install"'

script: prove -v t

perl:
  - "5.8"
  - "5.10"
  - "5.12"
  - "5.14"
  - "5.16"
  - "5.18"
  - "5.20"
  - "5.22"
  - "5.24"

И это прекрасный список версий. Perl 5.8 вышел в 2002 году. Travis CI поддерживает версию языка пятнадцатилетней давности. Версия 5.24 — это последняя доступная версия. То что в этом списке нет версий 5.9, 5.11 и других нечетных версий — это норм. Нечетные версии — это разработческие релизы языка.

В документации сказано что точные версии Perl могут меняться со временем:

As time goes, new releases come out and we upgrade both Perlbrew and Perls, aliases like 5.14 will float and point to different exact versions, patch levels and so on.

Тем не менее, я записал текущий список версий:

Интересная "особенность" Travis CI (на самом деле это баг) — это то что он никак не проверят значение версии на правильность. Я написал .travis.yml в котором указал несуществующую версию "5.26" (такая версия появится, но сейчас ее нет), а еще указал совершенно неправильные версии типа "-1.10" и "asdf". Так вот Travis CI считает что это совершенно нормальные значение — он их прокидывает в Perlbrew, Perlbrew тихо ругается что такой версии нет, но билд продолжается и система использует дефолтную версию перла — 5.14.2. Это в корне неправильное поведение. Система должна была завершить такой билд с результатом "errored". Я попробовал указать в качестве версии строку "123; ls; who" — на такой строке билд завершился "errored", но упал он не на проверке строки, а на использовании этой строки. Система должна валидировать ввод пользователя, то что она это не делает — это ошибка.

Результаты прогона тестов в Travis CI

Пока экспериментировал с Travis CI нашел еще одну странность это системы. Я думал что в Travis CI для каждого языка есть один подготовленный слепок с системой который они разворачивают и на котором гоняют тесты. Оказывается, в рамках одного языка у них есть разные слепки, например при прогоне тестов на 5.22 в Perlbrew нет версии 5.24, а при прогоне тестов на 5.24 в Perlbrew нет версии 5.22.

Мне еще показалось что если в .travis.yml указать только language: perl и не указывать никакие версии, то билд будет проходить в каком-то другом окружении. Так что для себя я решил что если мне нужно будет запускать тесты только для одной версии Perl, то я явно буду указывать последнюю версию.

Мои эксперименты живут в репозитории bessarabov/perl_versions_travis_ci (там несколько разных веток), а вот ссылка на прогоны тестов из этого репозитория в Travis CI.

Несмотря на эти странности и баг с валидацией Travis CI все равно отличная система, и они большие молодцы что предоставляют бесплатный прогон тестов для open source штук.

Иван Бессарабов
ivan@bessarabov.ru

4 марта 2017

Этот текст есть и на английском языке