Собирается ли свободное сообщество использовать для обновления своих пакетов огромных управляемых человекоподобных роботов?
Обновление уже оформленного пакета в хранилище (например, при выходе новой upstream-версии ПО) -- сравнительно несложная задача, посильная как человеку, так и небольшому роботу. Массовое отслеживание новых версий и обновление соответствующих пакетов в хранилище -- задача, очевидно, требующая более сложных и больших роботов, отчасти похожих на участников сообщества, а отчасти -- управляемых ими. В докладе обсуждаются наиболее востребованные свободным сообществом свойства огромных управляемых человекоподобных роботов, приводятся практические примеры.
Крибле! Крабле! Бумс...
- История полуавтоматизации: cc → make → autotools → пакеты и спецификации → сборочницы
- Хранилища и инструменты по упрощению сборки в них
Человек не должен работать!
Двигатели прогресса
Пролегомены к идеальному сообществу роботов
Диаграмма состояний пакета:
Ещё одно изолированное состояние: вечно свежий.
Сравнить версии
Не меняет дерево исходников.
Получить версию в целевом репозитории Vt
Получить версии в development-репозиториях Vd1 ... VdN
Получить версию в upstream Vu
Upstream исчез, сменил формат хранения и т. п.
Версия в development-репозиториях может быть выше актуальной, это признак ручной сборки
Допуск к обновлению при условии Vu > max(Vt, Vd1, ... , VdN)
Обновить
- Получение актуальных исходников:
- Pull из целевого репозитория
- Pull из development-репозиториев
- Получение Upsream-исходников
Upstream исходники не отдал, ошибка скачивания и т. п.
- Формирование сборочной ветки
- Обновление старых исходников новыми
Скрипты обновления не справились с задачей, вместо upstream скачался мусор и т. п.
- Модификация служебных файлов (*.spec, .gear/* ...)
Скрипты обновления не справились с задачей, информация о новом пакете неверна и т. п.
- Оформление коммита
- Обновление старых исходников новыми
Допуск к сборке
Собрать
- Тестовая сборка сборочной ветки в целевое хранилище
- Получение журнала сборки
Старым способом не собирается, плохо обновился spec и т. п.
Пострадало качество сборки: unpackaged files, предупреждения и т. п.
- Формирование бинарного хранилища для тестирования
- Формальное тестирование
Пакет на устанавливается, не прошли дополнительные тесты
Допуск к проверке
Проверить
Проверяет человек (тестер)
- Подключение тестового хранилища
- Установка и тестирование пакетов
Тест не прошёл
Допуск к публикации
Критика идеального сообщества роботов
- Асинхронный переход из состояния в состояние: push? pull?
- Shared task?
- ...
Дешёвая пластиковая имитация
00-state — вывод состояния (git status и grep по журналу последней массовой сборки)
01-getall — получение из g.a:people/george новых пакетов, содержащих .gear/autobuild.watch в ветке Sisyphus
10-sync — синхронизация исходников с g.a:gears и g.a:people/george
20-build — попытка обновления и пересборки (в случае неудачи восстанавливается предыдущее состояние, ошибки доступны в журнале)
30-push — отправка в хранилище, создание подписанного тега и отправка на сборку в Sisyphus всех пакетов, имеющих статус ahead of 'origin/master'
?побочные эффекты
- Разделение на тестера и сборщика
- Автоматизация каждого процесса (в т. ч. тестировния)
- ...