Russian-Phd-LaTeX-Dissertation-Template
Russian-Phd-LaTeX-Dissertation-Template copied to clipboard
Autobuild with Travis + Docker image
ПР для обсуждения предложенных изменений.
-
Сделан docker образ (файлы Dockerfile + provision дирка) для компиляции проекта в конфигурации pdflatex + biber - PsCyr. Это совпало по времени с #146, но, как и у всего в этой стране, у меня получился "свой особенный путь". Вместо использования встроенных убунтовых пакетов я установил всё из архива texlive. Для того, чтобы поэкономить место, я установил только минимально необходимый набор, а все остальные пакеты устанавливаю в скрипте. С одной стороны это гарантирует всегда наличие распоследних версий пакетов; это поощряется авторами texlive из-за установки без суперправ; это приведёт к значительно более быстрой и экономной сборке билда, чем установка всего подряд. С другой стороны, придется список пакетов обновлять при добавлении зависимостей, иначе травис зафейлится. Использовать образ очень просто - надо в дирке с проектом запустить
docker run -v `pwd`:/data phd-latex
-
Сделана проверка сборки с помощью докер образа через travis. Тут единственное, чем я могу помочь, это предоставить шаблон .travis.yml. Потом его все равно нужно под репу затачивать
После обсуждения я сожму коммиты, обновлю чего надо и сделаю новый реквест
Как тестить этот PR?
Как я понимаю, что происходит:
- Travis даёт нам виртуальный удалённый сервер, на котором можно что-то творить, в данном случае по событию
deploy
(то есть как раз по тегу в коммите). - Перед событием по скрипту он выполняет команды, ставит docker и выполняет на нём скрипт.
- Этот скрипт настраивает убунту по заданным правилам и потом выполняет
make pdflatex
. - Из результатов он оставляет pdf диссертации и кладёт его в релизы.
Я прав?
- Не, травис запускает билд на любую активность в репе, будь это просто коммит напрямую, либо PR (в данном случае будет нотификашка висеть, мол травис говорит, что в вашем ПР рака нет). Но если в коммите будет ещё и тег, то для него запустится секция с релизом. Итого - травис прежде всего нужен для билда и проверки по любому поводу. Релизная часть - приятное дополнение.
1.1. Сервер как таковой он не даёт напрямую, но суть примерно такая же. На их облаке предоставляется возможность запустить свой билд за просто так. 2. Да, но по сути это и есть часть нашего трависного скрипта. 3. Да, но лучше разделять ответственность, чтобы легче усвоить. Докерный скрипт настраивает убунту внутри образа, трависный скрипт инициирует запуск этого докерного скрипта, а потом запускает полученный докерный образ, который исполняет make pdflatex 4. Скорее просто ищет заданный по имени файл и кладет в релиз тега.
Пока тут очевидным образом можно потестировать только докерную часть. Скопировать себе в корень Dockerfile и provision дирку, запустить docker build -t phd-latex .
, а потом
docker run -v `pwd`:/data phd-latex
В результате в текущей дирке должна появиться скомпиленая пдфка.
Я не уверен, что запускать Docker в сборках на Travis CI — хорошая идея. Стоит рассмотреть вариант контейнерных сборок (sudo: false
) и установить TeX Live в блоке before_script
. Travis CI умеет кэшировать файлы и долго длиться будет только первый запуск.
По мне - это как раз хорошая идея и получилась.
- получаем гомогенную среду для латеха, вместо того, чтобы бороться с косяками и особенностями трависа, докера, пользовательского окружения.
- вместо двух скриптов (provision для трависа и provision для докера) имеем только один - для докера. Соответственно, поддерживать тоже придется только один скрипт. Можно попробовать сделать унификацию через баш скрипты, но я не уверен, что в условиях неоднородный среды это легко сделать.
С кэшированием тоже для меня не всё очевидно. Если есть кэш, то должна быть и какая-то инвалидация. Судя по докам, автоматической её нет вообще никакой. Если вдруг трависный билд зафейлится из-за того, что версия пакета понадобится другая или ещё какое драматическое изменение, не отраженное в кеше, то лечить это придётся принудительным стиранием кэша руками владельца репы, что не всегда может быть вариантом.
<offtop>
В одном из проектов я закешировал между билдами node_modules от npm, но пакеты там все равно часто меняются, поэтому в билд все равно пришлось добавить npm install, чтобы поставить новое, и npm update, чтобы обновить старое. В итоге получилось две команды, вместо одной при чистой установке и только от силы 2 минуты времени </offtop>
Итого, я не уверен, что это в самом деле лучше. Сокращая текущие 5 минут до условной минуты, мы получаем потенциальные проблемы с кэшем и поддержкой скриптов для provision. Не думаю, что так уж высока цена времени билда на этом проекте.
Можно скрипт написать, наверное, который будет парсить лог (grep наверное) после команды \listfiles
для pdflatex и (xe|lua)latex, чтобы подгружать правильные пакеты. Сделать этот файл локально, залить в реозиторий, в случае ошибок обновлять.
Это можно и в make запихнуть, раз уж он есть, только я в эту магию немного не умею
Где этот ключ для тревиса генерить? Это @AndreyAkinshin под своей учёткой должен сделать? Да, это у оунера делается, либо у проекта, если бы у нас был проект. https://github.com/settings/tokens - вот здесь оно
@AndreyAkinshin, может быть, сделать «организацию», например «Russian-LaTeX-projects»? Затем передать туда этот репозиторий как «PhD-dissertation-template-ru», чтобы можно было настроить туда тревис для непрерывной интеграции и тестирования коммитов, не задействую твой личный token для тревиса. А в перспективе подтянуть в эту организацию все ценные латех шаблоны и неприкаянные пакеты. Вроде бы в «организации» можно разграничить и права доступа участников к проектам, чтобы разработчики не подрались.
Возобновлю обсуждение. Проблема использования TeX Live в Travis CI состоит в устаревших пакетах. Смена окружения не помогает.
Я собрал работоспособную конфигурацию на основе Docker для аналогичного репозитория. Ранее это казалось мне неудачной идеей. В свою очередь, эта идея кажется мне менее неудачной, чем устанавливать LaTeX из сторонних источников.
- https://github.com/urfuhpc/masters-thesis-latex/blob/master/.travis.yml
- https://travis-ci.org/urfuhpc/masters-thesis-latex/builds/255730537
- https://hub.docker.com/r/dustalov/texlive/
Без особенных проблем можно адаптировать конфигурацию под этот репозиторий.
Господа, вам стоит обратить внимание также на Tectonic: это штуковина, которая умеет ставить пакеты по требованию из снапшотов (наподобие Haskell Stack) и сама по себе является XeLaTeX с плюшками. Я попробовал собрать ей свой талмуд (который составлял на основе очень давней версии сего репозитория), и всё завелось из коробки прям без вопросов.
Возможно, это стоит рассмотреть как более легковесный вариант для воспроизводимых сборок LaTeX-документов.
PSCyr можно устанавливать из deb пакета. https://blog.amet13.name/2014/10/pscyr.html У меня все заработало.