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

Как зарегистрироваться на AppVeyor, подключить туда свой проект на Rust и сделать первую сборку.
Это цикл статей:
- Как настроить сборку и тестирование для Open Source проекта на Rust под Linux с помощью Travis
- Как настроить сборку и тестирование для Open Source проекта на Rust под Windows с помощью AppVeyor (эта статья)
Содержание
Требования
- Исходники проекта запушены на GitHub
Настройка простейшего проекта
В качестве примера здесь фигурирует репозиторий простейшей библиотеки hello, состоящей из одной функции и одного теста.
Регистрируемся на AppVeyor
Заходим на AppVeyor. Нажимаем Sign Up For Free.
Открывается окно регистрации. Выбираем бесплатный тариф для проектов с открытыми
исходниками: в поле 1 - Plan выбираем Free for open-source projects. Если не
хотите получать от AppVeyor новости на почту, снимите галочку 2 - Subscribe to
company news and platform updates. Затем нажмите на кнопку GitHub, чтобы
войти на AppVeyor.
При желании можно зарегистрироваться по email, заполнив три поля справа.

После нажатия на кнопку GitHub откроется окно авторизации AppVeyor. Нажимаем
Authorize AppVeyor.

После этого GitHub может запросить пароль, чтобы подтвердить предоставление доступа AppVeyor.

После этого вы должны увидеть панель управления AppVeyor.

Если что-то пошло не так:
- Отключите блокировку кук и скриптов в браузере.
- Удалите куки.
- Отзовите у AppVeyor доступ к GitHub на странице настроек (кнопка Revoke).
- Попробуйте ещё раз.
Добавляем проект
Нажимаем New project.

В окне добавления проекта слева (1) выбираем расположение репозитория — в
нашем случае GitHub. Если вы хотите подключить частный проект, выберите
Private and public repositories справа (2). Затем нажмите Authorize GitHub
(3).

После авторизации GitHub на доступ к репозиториям ищем справа наш проект и
нажимаем кнопку Add.

Теперь нужно настроить добавленный проект.
Добавляем appveyor.yml
AppVeyor не поддерживает Rust из коробки, поэтому нам придётся установить его самим.
Создаём в корне добавленного репозитория файл appveyor.yml.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # Выбираем контейнер с необходимыми Rust компонентами os: Visual Studio 2015 # Устанавливаем Rust install: # Скачиваем rustup - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe # Устанавливаем стабильный Rust с MSVC ABI # Если хотите другую версию - замените stable на версию # Если хотите GNU ABI - замените x86_64-pc-windows-msvc на x86_64-pc-windows-gnu - rustup-init -yv --default-toolchain stable --default-host x86_64-pc-windows-msvc # Устанавливаем пути до компонентов Rust - set PATH=%PATH%;%USERPROFILE%\.cargo\bin # Выводим версии - rustc -vV - cargo -vV # Выключаем стандартный сборщик AppVeyor build: false # Используем специальный тестовый скрипт test_script: # Собираем - cargo build --verbose # Запускаем тесты - cargo test --verbose |
Коммитим его:
1 2 | $ git add appveyor.yml $ git commit -m "Добавляем AppVeyor" |
Пушим на GitHub
AppVeyor запускает сборки по пушу в репозиторий. Когда мы запушим наш коммит с
appveyor.yml, начнётся первая сборка. Сделаем это:
1 | $ git push
|
и идём в панель управления AppVeyor. Находим там слева наш проект, кликаем по нему.
Обычно нужно немного подождать, прежде чем начнётся сборка — в пределах минуты.
Когда сборка запустится, вы увидите логи внизу:

AppVeyor собирает проект и запускает его тесты, аналогично тому, как это делается на локальной машине.
Весь процесс занимает примерно 2 минуты для простейшего проекта.
Вот как выглядит страница сборки для моей библиотеки hello.
Если навести курсор на строку лога, во всплывающей подсказке будет показано, в какое время от начала сборки была выполнена эта команда.
Чтобы получить полный лог в виде текстового файла, кликните по Log справа
вверху, над логом.
Настраиваем уведомления по почте
Чтобы AppVeyor отправлял статус сборки по почте, настроим это в appveyor.yml.
1 2 3 4 5 6 7 8 9 10 11 12 | notifications: - provider: Email # Список адресов to: - user1@host.com - user2@host.com # Отправлять ли письмо в случае успеха? on_build_success: false # Отправлять ли письмо в случае провала? on_build_failure: true # Отправлять ли письмо когда статус изменился? on_build_status_changed: true |
Настраиваем кэширование
Есть смысл кэшировать директорию с реестром cargo и директорию сборки проекта.
appveyor.yml
1 2 3 | cache: - '%USERPROFILE%\.cargo' - target |
Добавляем индикатор статуса сборки
Формат URL для получения индикатора такой:
1 | https://ci.appveyor.com/api/projects/status/{github|bitbucket}/{repository}
|
Для hello URL будет такой:
1 | https://ci.appveyor.com/api/projects/status/github/mkpankov/hello
|
Добавляем его в качестве картинки в README.md.
1 | [](https://ci.appveyor.com/api/projects/status/github/mkpankov/hello) |
Результат:

Готово!
Мы настроили сборку и тестирование проекта на Rust на AppVeyor. Он будет тестироваться на каждый пуш в репозиторий.
Продвинутые возможности
Выбор версии Rust
Измените спецификатор версии в вызове rustup-init:
appveyor.yml
1 | - rustup-init -yv --default-toolchain nightly-2017-05-09 --default-host x86_64-pc-windows-msvc |
Тестирование с несколькими версиями
Можно добавить матричную конфигурацию. При этом можно разрешить провалы сборок на nightly-версиях компилятора.
appveyor.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ... environment: matrix: - channel: stable target: x86_64-pc-windows-msvc - channel: stable target: x86_64-pc-windows-gnu - channel: nightly target: x86_64-pc-windows-msvc - channel: nightly target: x86_64-pc-windows-gnu matrix: allow_failures: - channel: nightly install: - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe - rustup-init -yv --default-toolchain %channel% --default-host %target% - set PATH=%PATH%;%USERPROFILE%\.cargo\bin - rustc -vV - cargo -vV ... |
На этом всё. Успешных сборок!
Другие статьи цикла:
- Как настроить сборку и тестирование для Open Source проекта на Rust под Linux с помощью Travis
- Как настроить сборку и тестирование для Open Source проекта на Rust под Windows с помощью AppVeyor (эта статья)