Gear/cronbuild: различия между версиями
Строка 39: | Строка 39: | ||
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, | Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, | ||
а в git репозитарии хранятся в распакованном виде в поддиректории {{term|$PKGNAME}}. | а в git репозитарии хранятся в распакованном виде в поддиректории {{term|$PKGNAME}}. | ||
{{cmd|.gear/gronbuild-update-source}}: | |||
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/sh -ve | #!/bin/sh -ve | ||
Строка 51: | Строка 53: | ||
git add $PKGNAME | git add $PKGNAME | ||
</source> | </source> | ||
==== пример скрипта для обновления при выходе новых версий с помошью .watch файла ==== | |||
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, | |||
а в git репозитарии хранятся в распакованном виде в поддиректории {{term|$PKGNAME}}. | |||
{{cmd|.gear/gronbuild-update-source}}: | |||
<source lang="bash"> | |||
#!/bin/sh -ve | |||
PKGNAME=<...> | |||
url=`uscan -f $PKGNAME.watch` | |||
file=`basename "$url"` | |||
version=${file##$PKGNAME-} | |||
version=${version%%\.tar.*} | |||
echo $file $version | |||
rm -f $PKGNAME-*.tar.* | |||
wget -c $url | |||
tar xf $file | |||
rm -f $file | |||
git rm -r -f $PKGNAME | |||
rm -rf $PKGNAME | |||
mv $PKGNAME-*/ $PKGNAME | |||
git add $PKGNAME | |||
eval `gear --command env | grep gear_specfile` | |||
sed -i "s|^\(Version:).*|\1 $version|" $gear_specfile | |||
</source> | |||
Заметим, что в скрипте также обновлялась версия, | |||
поэтому нужно создать пустой исполняемый файл | |||
{{cmd|.gear/gronbuild-update-version}} | |||
<source lang="bash"> | |||
#!/bin/sh -ve | |||
</source> | |||
чтобы переопределить стандартный метод. | |||
==== замечания к скрипту ==== | ==== замечания к скрипту ==== |
Версия от 11:23, 7 сентября 2010
Введение в cronbuild.
Некоторые пакеты по своей природе нуждаются в постоянном обновлении, при этом при обновлении у этих пакетов спек практически не меняется. К таким пакетам относятся различные базы - антивирусные, оборудования (foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д. Как правило, в версии/релизе таких пакетов присутствует timestamp. Система cronbuild предназначена для автоматизации сборки таких пакетов. Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild и пакет будет автоматически собираться в Сизиф с заданной майнтайнером периодичностью, например, раз в неделю, до тех пор, пока сборка не сломается.
При этом пакеты собираются только тогда, когда это действительно нужно: если после обновления файлы исходников не изменились (согласно git diff <commit before update>), то сборка пакета будет пропущена, так как в ней нет необходимости.
Управлять роботом очень легко: если нужно внести в пакет какие-то изменения, просто внесите их локально и отправьте пакет на сборку вручную. Робот автоматически подхватит вашу работу.
Настройка cronbuild.
cronbuild состоит из 3-х частей:
- локальные скрипты cronbuild для автоматизации обновления .git репозитрия.
- утилиты для локальной сборки (пакет gear-cronbuild)
- сервер удаленной сборки (cronbuild repocop.altlinux.org)
локальные скрипты cronbuild для автоматизации обновления .git репозитрия
Сердцем cronbuild является скрипт .gear/cronbuild-update-source. Этот скрипт пишется индивидуально для каждого пакета. Его задача -- обновить исходные тексты пакета, используя git-fetch, git-svn или просто wget.
пример скрипта для обновления через wget
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, а в git репозитарии хранятся в распакованном виде в поддиректории $PKGNAME.
.gear/gronbuild-update-source:
#!/bin/sh -ve
PKGNAME=<...>
rm -f $PKGNAME-SNAPSHOT.tar.gz
wget -c http://www.pkgname.org/download/pkgname/pkgname-SNAPSHOT.tar.gz
tar xzf $PKGNAME-SNAPSHOT.tar.gz
rm -f $PKGNAME-SNAPSHOT.tar.gz
git rm -r -f $PKGNAME
rm -rf $PKGNAME
mv $PKGNAME-SNAMPSHOT $PKGNAME
git add $PKGNAME
пример скрипта для обновления при выходе новых версий с помошью .watch файла
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, а в git репозитарии хранятся в распакованном виде в поддиректории $PKGNAME.
.gear/gronbuild-update-source:
#!/bin/sh -ve
PKGNAME=<...>
url=`uscan -f $PKGNAME.watch`
file=`basename "$url"`
version=${file##$PKGNAME-}
version=${version%%\.tar.*}
echo $file $version
rm -f $PKGNAME-*.tar.*
wget -c $url
tar xf $file
rm -f $file
git rm -r -f $PKGNAME
rm -rf $PKGNAME
mv $PKGNAME-*/ $PKGNAME
git add $PKGNAME
eval `gear --command env | grep gear_specfile`
sed -i "s|^\(Version:).*|\1 $version|" $gear_specfile
Заметим, что в скрипте также обновлялась версия, поэтому нужно создать пустой исполняемый файл .gear/gronbuild-update-version
#!/bin/sh -ve
чтобы переопределить стандартный метод.
замечания к скрипту
- скрипт должен сообщать о всех проблемах при обновлении. Проще всего использовать #!/bin/sh -ve,
иначе придется у каждой команды проверять код завершения.
- изменения должны быть добавлены в индекс git.
- не нужно коммитить изменения: git-cronbuild это сделает автоматически после успешной сборки.
Изменение версии/релиза пакета
Утилита gear-cronbuild-update-spec-timestamp автоматически ищет и обновляет timestamp вида ГГГГММДД в тегах Serial, Epoch, Version, Release, либо в декларациях %define <macrosname> <timestamp>. Если пакет использует другую систему нумерации, необходимо создать свой скрипт изменения версии/релиза пакета .gear/cronbuild-update-version. Также можно переопределить стандартный changelog скриптом .gear/cronbuild-add-changelog. В теле этого скрипта должна быть вызвана команда add_changelog с желаемым текстом.
утилиты для локальной сборки (пакет gear-cronbuild)
Для того, чтобы пользоваться скриптами cronbuild на локальной машине, необходимо установить пакет gear-cronbuild. Команда gear-cronbuild-apply-hooks обновляет git репозиторий до следующей версии. Для удобства пользователя есть скрипт-обертка gear-cronbuild, который обновляет репозиторий, собирает пакет, и в случае успеха, коммитит изменения.
скрипт-обертка gear-cronbuild:
#!/bin/sh -ve
gear-cronbuild-apply-hooks
gear "$@"
gear-commit
сервер удаленной сборки (cronbuild repocop.altlinux.org)
локальные утилиты gear-cronbuild имеют тот недостаток, что их надо не забывать запускать. Кроме того, они не автоматизируют отправку пакета в Сизиф.
Сервер удаленной сборки cronbuild в песочнице repocop.altlinux.org позволяет автоматизировать сборку пакетов полностью.
Как поставить пакет на сборку
Если пакет успешно собирается с помощью gear-cronbuild локально, пришло время поставить его на автоматическую сборку.
Для этого необходимо создать файл .gear/cronbuild-options, указать там желаемую периодичность сборки и e-mail для рассылки оповещений, и зарегистрировать в bugzilla заявку на Infrastructure/cronbuild (пока это не реализовано, можно на пакет gear-cronbuild).
Как вносить изменения в сборку
сервер сборки поддерживает 2 системы транспорта: сборка по тегу из git+gear репозитория и сборка из srpm.
- Сборка по тегу из git+gear репозитория.
Управление сборкой устроенно очень просто: сервер клонирует последнюю успешную сборку в Сизиф и применяет к ней gear-cronbuild. Поэтому, если вы хотите починить или улучшить автоматическую сборку, просто соберите пакет вручную, и в дальнейшем автоматическая сборка будет идти на ее основе.
- сборка из srpm.
считается экспериментальной.
Приложения.
Полный список служебных файлов cronbuild в .gear/
файл | Описание |
---|---|
cronbuild-update-source | Основной скрипт для обновления содержимого пакета. |
cronbuild-update-version | Скрипт для обновления версии и/ли релиза пакета. Не обязателен. |
cronbuild-add-changelog | Скрипт для кастомизации changelog. Не обязателен. |
cronbuild-options | Конфигурационный файл. Не обязателен. |
Скрипты должны быть помечены как исполняемые. К файлам конфигурации это не относится.
Скрипты получают спек-файл как первый аргумент.
cronbuild-options
переменная | Описание |
---|---|
cronbuild_requires | набор дополнительных пакетов, который будет передан в hsh-install для установки в chroot.
необходим, если скрипты используют утилиты, не входящие в базовый набор (curl, wget, git, unzip, ...) |
cronbuild_interval | периодичность сборок в днях. желательно. |
cronbuild_mailto | e-mail ответственного. обязательно. |
cronbuild_cc | список дополнительных e-mail (optional) |
cronbuild_mastergit | experimental |
cronbuild_masterbranch | experimental |