Как настроить сборку и тестирование для Open Source проекта на Rust под Linux с помощью Travis

• Михаил Панков • обучение • поддержите на Patreon

teaser

Как зарегистрироваться на Travis, подключить туда свой проект на Rust и сделать первую сборку.

Это цикл статей:

Содержание

Требования

Настройка простейшего проекта

В качестве примера здесь фигурирует репозиторий простейшей библиотеки hello, состоящей из одной функции и одного теста.

Регистрируемся на Travis

Заходим на Travis. Нажимаем «Sign Up».

Если вы не вошли в свой аккаунт на GitHub, вам предложат войти:

вход на GitHub

После этого Travis запросит разрешение на доступ к данным на GitHub. Разрешите его.

Если всё успешно, вы увидите панель управления Travis:

панель управления

Если что-то пошло не так:

  1. Отключите блокировку кук и скриптов в браузере.
  2. Удалите куки.
  3. Отзовите у Travis доступ к GitHub на странице настроек (кнопка Revoke).
  4. Попробуйте ещё раз.

Добавляем проект

Нажмите «+» над списком проектов в левой части панели управления:

кнопка добавления проекта

Появится окно добавления проектов. В нём найдите ваш проект и кликните по переключателю для подключения проекта к 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» справа вверху, над логом.

После окончания сборки вам на почту должно прийти письмо с результатом:

email

По умолчанию, такие письма приходят на каждую проваленную сборку, а также когда сборка была сломанной и стала успешной.

Настраиваем кэширование

Каждая сборка происходит в новом чистом 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, видим там индикатор:

индикатор на 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

На этом всё. Успешных сборок!


Другие статьи цикла:

Задавайте вопросы на форуме.