Как настроить сборку и тестирование для Open Source проекта на Rust под Linux с помощью Travis
Как зарегистрироваться на Travis, подключить туда свой проект на Rust и сделать первую сборку.
Это цикл статей:
- Как настроить сборку и тестирование для Open Source проекта на Rust под Linux с помощью Travis (эта статья)
- Как настроить сборку и тестирование для Open Source проекта на Rust под Windows с помощью AppVeyor
Содержание
Требования
- Исходники проекта запушены на GitHub
Настройка простейшего проекта
В качестве примера здесь фигурирует репозиторий простейшей библиотеки hello, состоящей из одной функции и одного теста.
Регистрируемся на Travis
Заходим на Travis. Нажимаем «Sign Up».
Если вы не вошли в свой аккаунт на GitHub, вам предложат войти:
После этого Travis запросит разрешение на доступ к данным на GitHub. Разрешите его.
Если всё успешно, вы увидите панель управления Travis:
Если что-то пошло не так:
- Отключите блокировку кук и скриптов в браузере.
- Удалите куки.
- Отзовите у Travis доступ к GitHub на странице настроек (кнопка Revoke).
- Попробуйте ещё раз.
Добавляем проект
Нажмите «+» над списком проектов в левой части панели управления:
Появится окно добавления проектов. В нём найдите ваш проект и кликните по переключателю для подключения проекта к Travis:
Если вы не видите ваш проект в списке, нажмите кнопку «Sync account» справа вверху.
Добавляем.travis.yml
Создаём
файл
.travis.yml
в
вашем репозитории. Там нам нужна всего одна строка:
1 | language: rust |
Коммитим его:
1 2 | $ git add .travis.tml $ git commit -m "Добавляем Travis" |
Пушим на GitHub
Travis запускает сборки по пушу в репозиторий. Когда мы запушим наш коммит с
.travis.yml
, начнётся первая сборка. Сделаем это:
1 | $ git push
|
и идём в панель управления Travis. Находим там слева наш проект, кликаем по нему.
Обычно нужно немного подождать, прежде чем начнётся сборка — в пределах минуты.
Если вы видите в Travis свой коммит, но логов сборки внизу нет («Hang tight, the log cannot be shown until the build has started.») — подождите подольше. Это значит, что сборка коммита поставлена в очередь. В пиковое время ждать приходится порядка 5 минут. Это ограничение бесплатного тарифа Travis.
Когда сборка запустится, вы увидите логи внизу:
Travis собирает проект и запускает его тесты, аналогично тому, как это делается на локальной машине.
Весь процесс занимает примерно минуту для простейшего проекта.
Вот как выглядит страница сборки для моей библиотеки hello.
Здесь если кликнуть по маленькому треугольнику слева от названия шага, скрытый в нём вывод будет показан:
Чтобы получить полный лог в виде текстового файла, кликните по «Raw log» справа вверху, над логом.
После окончания сборки вам на почту должно прийти письмо с результатом:
По умолчанию, такие письма приходят на каждую проваленную сборку, а также когда сборка была сломанной и стала успешной.
Настраиваем кэширование
Каждая сборка происходит в новом чистом Docker-контейнере. Поэтому компилятор и крейты скачиваются каждый раз заново, а сборочная директория очищается.
Чтобы ускорить повторную сборку, укажем, что нужно настроить кэш Travis под Cargo:
.travis.yml
1 | cache: cargo |
Так мы добавляем в кэш $HOME/.cargo
и $TRAVIS_BUILD_DIR/target
.
Travis рекомендует не кэшировать вещи, которые долго скачиваются, но быстро
устанавливаются. Упаковка кэшируемых директорий в архив и их загрузка на
кэширующий сервер тоже занимает время, поэтому если просто загружать ресурсы из
интернета в контейнер без кэширования, это будет быстрее — не тратится время на
упаковку-распаковку архива кэша. По этой причине не стоит кэшировать директорию
установки компилятора ($HOME/.rustup
).
Добавляем индикатор статуса сборки
Чтобы видеть статус сборки на странице проекта, добавим индикатор в наш репозиторий.
Заходим на страницу проекта в Travis, нажимаем на «build passing» вверху по центру, выбираем там Markdown:
Скопированный текст вставляем в README.md
в нашем репозитории:
README.md
1 | [![Build Status](https://travis-ci.org/mkpankov/hello.svg?branch=master)](https://travis-ci.org/mkpankov/hello) |
Идём на страницу проекта в GitHub, видим там индикатор:
Готово!
Мы настроили сборку и тестирование проекта на Rust на Travis. Он будет тестироваться на каждый пуш в репозиторий.
Продвинутые возможности
Выбор версии Rust
Так можно указать необходимую версию компилятора:
.travis.yml
1 2 3 | language: rust rust: - 1.10.0 |
Тестирование с несколькими версиями
Можно собирать и тестировать проект с несколькими версиями компилятора:
.travis.yml
1 2 3 4 5 6 7 8 | language: rust rust: - stable - beta - nightly matrix: allow_failures: - rust: nightly |
Такая конфигурация последовательно соберёт и запустит тесты на stable, beta и nightly. При этом ошибки во время сборки или тестирования на nightly не приведут к провалу всей задачи на Travis: в индикаторе всё равно будет написано «passing».
Как поменять шаги тестирования
По умолчанию Travis выполняет такие шаги для проектов на Rust:
1 2 | $ cargo build --verbose $ cargo test --verbose |
Вы можете перегрузить используемый скрипт. Например, если ваш проект
использует
Cargo workspaces,
при сборке нужно передавать опцию --all
. Это можно сделать так:
.travis.yml
1 2 3 4 | language: rust script: - cargo build --verbose --all - cargo test --verbose --all |
На этом всё. Успешных сборок!
Другие статьи цикла:
- Как настроить сборку и тестирование для Open Source проекта на Rust под Linux с помощью Travis (эта статья)
- Как настроить сборку и тестирование для Open Source проекта на Rust под Windows с помощью AppVeyor