Gear/cronbuild — различия между версиями

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
('''g'''ronbuild -> '''c'''ronbuild)
(Настройка cronbuild для автоматизации обновления .git репозитрия)
 
(не показаны 34 промежуточные версии 6 участников)
Строка 1: Строка 1:
{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}}
 
 
<!-- {{stub}} -->
 
<!-- {{stub}} -->
  
Строка 6: Строка 5:
 
Некоторые пакеты по своей природе нуждаются в постоянном обновлении,
 
Некоторые пакеты по своей природе нуждаются в постоянном обновлении,
 
при этом при обновлении у этих пакетов спек практически не меняется.
 
при этом при обновлении у этих пакетов спек практически не меняется.
К таким пакетам относятся различные базы - антивирусные, оборудования
+
Например, к таким пакетам относятся различные базы - антивирусные, оборудования
 
(foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д.
 
(foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д.
 
Как правило, в версии/релизе таких пакетов присутствует timestamp.
 
Как правило, в версии/релизе таких пакетов присутствует timestamp.
 
Система cronbuild предназначена для автоматизации сборки таких пакетов.
 
Система cronbuild предназначена для автоматизации сборки таких пакетов.
 +
 
Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild
 
Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild
и пакет будет автоматически собираться в Сизиф с заданной майнтайнером периодичностью,
+
и в дальнейшем при появлении обновлений пакет будет автоматически собираться в Сизиф
например, раз в неделю, до тех пор, пока сборка не сломается.
+
до тех пор, пока сборка не сломается. Сервер cronbuild проверяет  пакет на наличие обновлений
 +
с заданной майнтайнером периодичностью, по умолчанию это раз в неделю.
  
 
При этом пакеты собираются только тогда, когда это действительно нужно:
 
При этом пакеты собираются только тогда, когда это действительно нужно:
Строка 18: Строка 19:
 
то сборка пакета будет пропущена, так как в ней нет необходимости.
 
то сборка пакета будет пропущена, так как в ней нет необходимости.
  
Управлять роботом очень легко: если нужно внести в пакет какие-то изменения,
+
Управлять сервисом Cronbuild просто: если нужно внести в пакет какие-то изменения, достаточно внести их локально и отправьть пакет на сборку вручную. При следующей попытке обновления робот склонирует уже измененный репозиторий, т.е. изменения будут подхвачены автоматически.
просто внесите их локально и отправьте пакет на сборку вручную.
+
 
Робот автоматически подхватит вашу работу.
+
== Быстрая настройка ==
 +
 
 +
1. Создать служебный файл {{path|.gear/cronbuild-options}} в gear-репозитории:
 +
echo "cronbuild_mailto=<email мейнтейнера" > .gear/cronbuild-options
 +
 
 +
2. Закоммитить и собрать пакет с этим файлом
 +
 
 +
3. Завести багу в https://bugzilla.altlinux.org/enter_bug.cgi?product=Infrastructure на компонент '''cronbuild'''.
 +
В теме указать имя пакета.
 +
 
 +
== Часто задаваемые вопросы ==
 +
 
 +
> Пока я вижу, что cronbuild все еще использует старую версию а не ту, что в моем git.
 +
 
 +
Да, так и должно быть. cronbuild клонирует последнюю _собранную_в_Сизиф_ сборку,
 +
в ваш git он не лезет и не должен, ведь там может быть нестабильная разработка.
 +
 
 +
Отправьте ваши изменения в Сизиф, тогда cronbuild их подхватит.
  
== Настройка cronbuild. ==
+
== Настройка cronbuild ==
 
cronbuild состоит из 3-х частей:
 
cronbuild состоит из 3-х частей:
  
Строка 33: Строка 51:
  
 
После этого gear-cronbuild можно пользоваться локально, для ускорения работы,
 
После этого gear-cronbuild можно пользоваться локально, для ускорения работы,
а можно подключть в сервер удаленной сборки.
+
а также можно разместить на сервере удаленной сборки.
  
 
=== утилиты для локальной сборки (пакет {{pkg|gear-cronbuild}}) ===
 
=== утилиты для локальной сборки (пакет {{pkg|gear-cronbuild}}) ===
Строка 48: Строка 66:
 
gear-commit
 
gear-commit
 
</source>
 
</source>
 +
 +
=== Настройка cronbuild для автоматизации обновления .git репозитрия ===
 +
 +
Для работы cronbuild необходимо
 +
* либо добавить .gear/upstream/remotes и настроить обновления по git tag (см. [[Gear/remotes]].). Рекомендовано для обновления из git репрзитория по тегу.
 +
* либо добавить в репозиторий .watch файл (см. [[Watch]]). Рекомендовано для обновления из версионированного архива на удаленном сайте.
 +
* либо написать скрипт {{cmd|.gear/cronbuild-update-source}}, в котором заскриптовать процесс обновления для нестандартных случаев.
 +
 +
==== обновление до новых версий с помошью файла .gear/upstream/remotes ====
 +
 +
Если в репозитории присутствует файл {{path|.gear/upstream/remotes}}, то при отсутствии скрипта {{cmd|.gear/cronbuild-update-source}}
 +
утилита {{prg|gear-cronbuild-apply-hooks}} запустит утилиту gear-remotes-uscan (см. [[Gear/remotes]].),
 +
Если репозиторий корректно настроен на работу с gear-remotes-*,
 +
то никаких скриптов для cronbuild создавать не нужно, достаточно {{path|.gear/upstream/remotes}}.
 +
 +
==== обновление до новых версий с помошью .watch файла ====
 +
 +
Если в репозитории присутствует .watch файл, то при отсутствии скрипта {{cmd|.gear/cronbuild-update-source}}
 +
утилита {{prg|gear-cronbuild-apply-hooks}} запустит связку утилит rpm-uscan + [[Gear/gear-uupdate|gear-uupdate]], см. [[Watch]].
 +
Если .watch файл корректный, и стркутура репозитария поддерживается утилитой gear-uupdate,
 +
то никаких скриптов для cronbuild создавать не нужно, .watch файла достаточно.
  
 
=== локальные скрипты cronbuild для автоматизации обновления .git репозитрия ===
 
=== локальные скрипты cronbuild для автоматизации обновления .git репозитрия ===
  
Сердцем cronbuild является скрипт {{cmd|.gear/cronbuild-update-source}}.
+
==== Скрипт {{cmd|.gear/cronbuild-update-source}} и необязательные скрипты-помощники. ====
Этот скрипт пишется индивидуально для каждого пакета. Его задача --
+
 
 +
Скрипт {{cmd|.gear/cronbuild-update-source}} пишется индивидуально для каждого пакета. Его задача --
 
обновить исходные тексты пакета, используя {{cmd|git-fetch}}, {{cmd|git-svn}}
 
обновить исходные тексты пакета, используя {{cmd|git-fetch}}, {{cmd|git-svn}}
 
или просто {{cmd|wget}}.  
 
или просто {{cmd|wget}}.  
 +
 +
Дополнительно могут понадобиться необязательные скрипты
 +
* {{cmd|.gear/cronbuild-update-version}} для установки новой версии и/ли релиза вручную (без него новая версия будет выставлена в ГГГГММДД (ГодМесяцДень)
 +
* {{cmd|.gear/cronbuild-add-changelog}} чтобы заменить стандартную фразу cronbuild в %changelog на свою.
 +
 +
Скрипты должны быть помечены как исполняемые.
 +
Все скрипты получают спек-файл как первый аргумент.
 +
 +
Внутренняя служебная утилита {{cmd|gear-cronbuild-apply-hooks}} запускает скрипт {{cmd|.gear/cronbuild-update-source}}.
 +
Если скрипт завершился с ошибкой, обновление останавливается и сообщение об ошибке получает майнтайнер.
 +
Если скрипт завершился без ошибок, утилита {{cmd|gear-cronbuild-apply-hooks}} выполняет
 +
git diff $last_commit_before_the_run
 +
Если в git репозитории изменений не произошло, то обновлений нет и работа gear-cronbuild завершается.
 +
Если git diff $last_commit_before_the_run показал изменения, то считается, что обновления есть
 +
и работа gear-cronbuild продолжается.
 +
 +
Заметим, что скрипт {{cmd|.gear/cronbuild-update-source}} не должен трогать спек. Для изменения версии в спек файле
 +
предусмотрен скрипт {{cmd|.gear/cronbuild-update-version}}.
  
 
==== пример скрипта для обновления через wget ====
 
==== пример скрипта для обновления через wget ====
Строка 63: Строка 121:
 
<source lang="bash">
 
<source lang="bash">
 
#!/bin/sh -ve
 
#!/bin/sh -ve
eval `gear --command env | grep gear_pkg_name`
+
PKGNAME="$(gear --command sh -- -c 'printf %s "$gear_pkg_name"')"
PKGNAME=$gear_pkg_name
 
 
rm -f $PKGNAME-SNAPSHOT.tar.gz
 
rm -f $PKGNAME-SNAPSHOT.tar.gz
 
wget -c http://www.pkgname.org/download/pkgname/pkgname-SNAPSHOT.tar.gz
 
wget -c http://www.pkgname.org/download/pkgname/pkgname-SNAPSHOT.tar.gz
Строка 71: Строка 128:
 
git rm -r -f $PKGNAME
 
git rm -r -f $PKGNAME
 
rm -rf $PKGNAME
 
rm -rf $PKGNAME
mv $PKGNAME-SNAMPSHOT $PKGNAME
+
mv $PKGNAME-SNAPSHOT $PKGNAME
 
git add $PKGNAME
 
git add $PKGNAME
 
</source>
 
</source>
==== пример скрипта для обновления при выходе новых версий с помошью .watch файла ====
 
 
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола,
 
а в git репозитарии хранятся в распакованном виде в поддиректории {{term|$PKGNAME}}.
 
выход новых версий проверяется с помощью .watch файла.
 
 
{{cmd|.gear/cronbuild-update-source}}:
 
<source lang="bash">
 
#!/bin/sh -ve
 
eval `gear --command env | grep gear_pkg_name`
 
PKGNAME=$gear_pkg_name
 
url=`uscan -f $PKGNAME.watch`
 
file=`basename "$url"`
 
version=${file##$PKGNAME-}
 
version=${version%%\.tar.*}
 
echo $file $version
 
eval `gear --command env | grep gear_pkg_version`
 
[ "x$version" = "x$gear_pkg_version" ] && exit 0;
 
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/cronbuild-update-version}}
 
<source lang="bash">
 
#!/bin/sh -ve
 
</source>
 
чтобы переопределить стандартный метод.
 
  
 
==== замечания к скрипту ====
 
==== замечания к скрипту ====
* скрипт должен сообщать о всех проблемах при обновлении. Проще всего использовать {{path|#!/bin/sh -ve}},
+
* Если версия не изменилась/исходники не обновлялись, если вы ничего не добавляли в индекс git, просто выходите через exit 0. Иначе перед выходом сначала сбросьте изменения в индексе git с помощью {{cmd|git reset}}.
 +
* Удаляйте за собой мусор: временные файлы, каталоги и т.д.
 +
* скрипт должен сообщать о всех проблемах при обновлении через exit с ненулевым exit_code. Проще всего использовать {{path|#!/bin/sh -ve}},
 
иначе придется у каждой команды проверять код завершения.
 
иначе придется у каждой команды проверять код завершения.
 
* изменения должны быть добавлены в индекс git.  
 
* изменения должны быть добавлены в индекс git.  
Строка 128: Строка 151:
 
{{path|.gear/cronbuild-add-changelog}}.
 
{{path|.gear/cronbuild-add-changelog}}.
 
В теле этого скрипта должна быть вызвана команда {{cmd|add_changelog}}
 
В теле этого скрипта должна быть вызвана команда {{cmd|add_changelog}}
с желаемым текстом.
+
с желаемым текстом<ref>Для работы механизм обновления секции changelog нужно определить значение %packager в <code>~/.rpmmacros</code>.</ref>.
  
 
=== сервер удаленной сборки (cronbuild repocop.altlinux.org) ===
 
=== сервер удаленной сборки (cronbuild repocop.altlinux.org) ===
Строка 145: Строка 168:
 
Для этого необходимо создать файл {{path|.gear/cronbuild-options}},
 
Для этого необходимо создать файл {{path|.gear/cronbuild-options}},
 
указать там желаемую периодичность сборки и e-mail для рассылки оповещений,
 
указать там желаемую периодичность сборки и e-mail для рассылки оповещений,
и зарегистрировать в bugzilla заявку на Infrastructure/cronbuild
+
отправить в сизиф сборку пакета с новым содержимым {{path|.gear/cronbuild-options}},
(пока это не реализовано, можно на пакет gear-cronbuild).
+
и зарегистрировать в bugzilla заявку на Infrastructure/cronbuild.
 +
 
 +
'''Важно!''' сервис cronbuild для работы клонирует последнюю успешную сборку пакета в Сизифе.
 +
Поэтому важно собрать в сизиф пакет с новыми настройками {{path|.gear/cronbuild-options}}.
 +
Изменения локально на рабочей машине майнтайнера, даже опубликованные на git.altlinux.org,
 +
без сборки пакета в Сизиф подхвачены не будут!
  
 
==== Как вносить изменения в сборку ====
 
==== Как вносить изменения в сборку ====
Строка 167: Строка 195:
 
== Приложения. ==
 
== Приложения. ==
 
=== Полный список служебных файлов cronbuild в {{path|.gear/}} ===
 
=== Полный список служебных файлов cronbuild в {{path|.gear/}} ===
 +
 +
==== Скрипты, используемые утилитой {{prg|gear-cronbuild-apply-hooks}} ====
 +
 
{| class="standard"
 
{| class="standard"
 
!файл
 
!файл
Строка 179: Строка 210:
 
|class="shadow"|cronbuild-add-changelog
 
|class="shadow"|cronbuild-add-changelog
 
| Скрипт для кастомизации changelog. Не обязателен.
 
| Скрипт для кастомизации changelog. Не обязателен.
 +
|}
 +
Скрипты должны быть помечены как исполняемые.
 +
 +
Скрипты cronbuild-update-source, cronbuild-update-version, cronbuild-add-changelog получают спек-файл как первый аргумент.
 +
 +
==== Другие файлы, используемые утилитой {{prg|gear-cronbuild-apply-hooks}} ====
 +
 +
{| class="standard"
 +
!файл
 +
!Описание
 +
|-
 +
|class="shadow"|.gear/upstream/remotes
 +
|настройка [[Gear/remotes|remotes]] для клонированного git репозитория. Не обязателен.
 +
|-
 +
|class="shadow"|.gear/cronbuild-git-config
 +
|опции к команде git-config, для дополнительной настройки клонированного git репозитория. Устарел.
 +
|}
 +
 +
==== Файлы, используемые сервером сборки cronbuild repocop.altlinux.org ====
 +
 +
{| class="standard"
 +
!файл
 +
!Описание
 +
|-
 +
|class="shadow"|cronbuild-tagname
 +
| Скрипт для кастомизации git tag name. Не обязателен.
 +
|-
 +
|class="shadow"|cronbuild-tagmsg
 +
| Скрипт для кастомизации git tag message. Не обязателен.
 
|-
 
|-
 
|class="shadow"|cronbuild-options
 
|class="shadow"|cronbuild-options
| Конфигурационный файл. Не обязателен.
+
| Конфигурационный файл. Требуется при размещении на сервере cronbuild.
 
|}
 
|}
 
Скрипты должны быть помечены как исполняемые.
 
Скрипты должны быть помечены как исполняемые.
 
К файлам конфигурации это не относится.
 
К файлам конфигурации это не относится.
  
Скрипты получают спек-файл как первый аргумент.
+
=== ./gear/cronbuild-options ===
 
 
=== cronbuild-options ===
 
 
{| class="standard"
 
{| class="standard"
 
!переменная
 
!переменная
Строка 198: Строка 256:
 
|-
 
|-
 
|class="shadow"|cronbuild_interval
 
|class="shadow"|cronbuild_interval
|периодичность сборок в днях. желательно.
+
|периодичность сборок в днях. Желательно. По умолчанию — 3 дня.
 
|-
 
|-
|class="shadow"|cronbuild_mailto
+
|class="shadow"|'''cronbuild_mailto'''
|e-mail ответственного. обязательно.
+
|'''e-mail ответственного. Обязательно.'''
 
|-
 
|-
 
|class="shadow"|cronbuild_cc
 
|class="shadow"|cronbuild_cc
Строка 214: Строка 272:
  
 
=== Пример использования .gear/cronbuild-* ===
 
=== Пример использования .gear/cronbuild-* ===
 +
 +
== Примечания ==
 +
<references />
 +
 +
{| class="wide"
 +
| Разработано при поддержке [http://www.fasie.ru/ Фонда содействия развитию МП НТС] в рамках НИОКР 01201066526
 +
| [[Изображение:Logo_FASIE_preview.jpg|200px|rigft]]
 +
|}
 +
 +
{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}}
 +
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}}
 +
[[Категория:Справочники]]

Текущая версия на 13:25, 14 января 2019


Содержание

Введение в cronbuild.[править]

Некоторые пакеты по своей природе нуждаются в постоянном обновлении, при этом при обновлении у этих пакетов спек практически не меняется. Например, к таким пакетам относятся различные базы - антивирусные, оборудования (foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д. Как правило, в версии/релизе таких пакетов присутствует timestamp. Система cronbuild предназначена для автоматизации сборки таких пакетов.

Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild и в дальнейшем при появлении обновлений пакет будет автоматически собираться в Сизиф до тех пор, пока сборка не сломается. Сервер cronbuild проверяет пакет на наличие обновлений с заданной майнтайнером периодичностью, по умолчанию это раз в неделю.

При этом пакеты собираются только тогда, когда это действительно нужно: если после обновления файлы исходников не изменились (согласно git diff <commit before update>), то сборка пакета будет пропущена, так как в ней нет необходимости.

Управлять сервисом Cronbuild просто: если нужно внести в пакет какие-то изменения, достаточно внести их локально и отправьть пакет на сборку вручную. При следующей попытке обновления робот склонирует уже измененный репозиторий, т.е. изменения будут подхвачены автоматически.

Быстрая настройка[править]

1. Создать служебный файл .gear/cronbuild-options в gear-репозитории:

echo "cronbuild_mailto=<email мейнтейнера" > .gear/cronbuild-options

2. Закоммитить и собрать пакет с этим файлом

3. Завести багу в https://bugzilla.altlinux.org/enter_bug.cgi?product=Infrastructure на компонент cronbuild. В теме указать имя пакета.

Часто задаваемые вопросы[править]

> Пока я вижу, что cronbuild все еще использует старую версию а не ту, что в моем git.

Да, так и должно быть. cronbuild клонирует последнюю _собранную_в_Сизиф_ сборку, в ваш git он не лезет и не должен, ведь там может быть нестабильная разработка.

Отправьте ваши изменения в Сизиф, тогда cronbuild их подхватит.

Настройка cronbuild[править]

cronbuild состоит из 3-х частей:

  • локальные скрипты cronbuild для автоматизации обновления .git репозитрия.
  • утилиты для локальной сборки (пакет gear-cronbuild)
  • сервер удаленной сборки (cronbuild repocop.altlinux.org)

Для того, чтобы воспользоваться cronbuild, надо написать по примерам скрипт .gear/cronbuild-update-source и, возможно, другие скрипты, проверить их работоспособность с помощью локальных утилит и закоммитить их в .git.

После этого gear-cronbuild можно пользоваться локально, для ускорения работы, а также можно разместить на сервере удаленной сборки.

утилиты для локальной сборки (пакет gear-cronbuild)[править]

Для того, чтобы пользоваться скриптами cronbuild на локальной машине, необходимо установить пакет gear-cronbuild. Команда gear-cronbuild-apply-hooks вызывает локальные скрипты cronbuild и обновляет git репозиторий до следующей версии. Для удобства пользователя есть скрипт-обертка gear-cronbuild, который обновляет репозиторий, собирает пакет, и в случае успеха, коммитит изменения.

скрипт-обертка gear-cronbuild:

#!/bin/sh -ve
gear-cronbuild-apply-hooks
gear "$@"
gear-commit

Настройка cronbuild для автоматизации обновления .git репозитрия[править]

Для работы cronbuild необходимо

  • либо добавить .gear/upstream/remotes и настроить обновления по git tag (см. Gear/remotes.). Рекомендовано для обновления из git репрзитория по тегу.
  • либо добавить в репозиторий .watch файл (см. Watch). Рекомендовано для обновления из версионированного архива на удаленном сайте.
  • либо написать скрипт .gear/cronbuild-update-source, в котором заскриптовать процесс обновления для нестандартных случаев.

обновление до новых версий с помошью файла .gear/upstream/remotes[править]

Если в репозитории присутствует файл .gear/upstream/remotes, то при отсутствии скрипта .gear/cronbuild-update-source утилита gear-cronbuild-apply-hooks запустит утилиту gear-remotes-uscan (см. Gear/remotes.), Если репозиторий корректно настроен на работу с gear-remotes-*, то никаких скриптов для cronbuild создавать не нужно, достаточно .gear/upstream/remotes.

обновление до новых версий с помошью .watch файла[править]

Если в репозитории присутствует .watch файл, то при отсутствии скрипта .gear/cronbuild-update-source утилита gear-cronbuild-apply-hooks запустит связку утилит rpm-uscan + gear-uupdate, см. Watch. Если .watch файл корректный, и стркутура репозитария поддерживается утилитой gear-uupdate, то никаких скриптов для cronbuild создавать не нужно, .watch файла достаточно.

локальные скрипты cronbuild для автоматизации обновления .git репозитрия[править]

Скрипт .gear/cronbuild-update-source и необязательные скрипты-помощники.[править]

Скрипт .gear/cronbuild-update-source пишется индивидуально для каждого пакета. Его задача -- обновить исходные тексты пакета, используя git-fetch, git-svn или просто wget.

Дополнительно могут понадобиться необязательные скрипты

  • .gear/cronbuild-update-version для установки новой версии и/ли релиза вручную (без него новая версия будет выставлена в ГГГГММДД (ГодМесяцДень)
  • .gear/cronbuild-add-changelog чтобы заменить стандартную фразу cronbuild в %changelog на свою.

Скрипты должны быть помечены как исполняемые. Все скрипты получают спек-файл как первый аргумент.

Внутренняя служебная утилита gear-cronbuild-apply-hooks запускает скрипт .gear/cronbuild-update-source. Если скрипт завершился с ошибкой, обновление останавливается и сообщение об ошибке получает майнтайнер. Если скрипт завершился без ошибок, утилита gear-cronbuild-apply-hooks выполняет

git diff $last_commit_before_the_run

Если в git репозитории изменений не произошло, то обновлений нет и работа gear-cronbuild завершается. Если git diff $last_commit_before_the_run показал изменения, то считается, что обновления есть и работа gear-cronbuild продолжается.

Заметим, что скрипт .gear/cronbuild-update-source не должен трогать спек. Для изменения версии в спек файле предусмотрен скрипт .gear/cronbuild-update-version.

пример скрипта для обновления через wget[править]

Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, а в git репозитарии хранятся в распакованном виде в поддиректории $PKGNAME.

.gear/cronbuild-update-source:

#!/bin/sh -ve
PKGNAME="$(gear --command sh -- -c 'printf %s "$gear_pkg_name"')"
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-SNAPSHOT $PKGNAME
git add $PKGNAME

замечания к скрипту[править]

  • Если версия не изменилась/исходники не обновлялись, если вы ничего не добавляли в индекс git, просто выходите через exit 0. Иначе перед выходом сначала сбросьте изменения в индексе git с помощью git reset.
  • Удаляйте за собой мусор: временные файлы, каталоги и т.д.
  • скрипт должен сообщать о всех проблемах при обновлении через exit с ненулевым exit_code. Проще всего использовать #!/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 с желаемым текстом[1].

сервер удаленной сборки (cronbuild repocop.altlinux.org)[править]

локальные утилиты gear-cronbuild имеют тот недостаток, что их надо не забывать запускать. Кроме того, они не автоматизируют отправку пакета в Сизиф.

Сервер удаленной сборки cronbuild в песочнице repocop.altlinux.org позволяет автоматизировать сборку пакетов полностью.

Как поставить пакет на сборку[править]

Если пакет успешно собирается с помощью gear-cronbuild локально, пришло время поставить его на автоматическую сборку.

Для этого необходимо создать файл .gear/cronbuild-options, указать там желаемую периодичность сборки и e-mail для рассылки оповещений, отправить в сизиф сборку пакета с новым содержимым .gear/cronbuild-options, и зарегистрировать в bugzilla заявку на Infrastructure/cronbuild.

Важно! сервис cronbuild для работы клонирует последнюю успешную сборку пакета в Сизифе. Поэтому важно собрать в сизиф пакет с новыми настройками .gear/cronbuild-options. Изменения локально на рабочей машине майнтайнера, даже опубликованные на git.altlinux.org, без сборки пакета в Сизиф подхвачены не будут!

Как вносить изменения в сборку[править]

сервер сборки поддерживает 2 системы транспорта: сборка по тегу из git+gear репозитория и сборка из srpm.

  • Сборка по тегу из git+gear репозитория.

Управление сборкой устроенно очень просто: сервер клонирует последнюю успешную сборку в Сизиф и применяет к ней gear-cronbuild. Поэтому, если вы хотите починить или улучшить автоматическую сборку, просто соберите пакет вручную, и в дальнейшем автоматическая сборка будет идти на ее основе.

  • сборка из srpm.

считается экспериментальной.

Приложения.[править]

Полный список служебных файлов cronbuild в .gear/[править]

Скрипты, используемые утилитой gear-cronbuild-apply-hooks[править]

файл Описание
cronbuild-update-source Основной скрипт для обновления содержимого пакета.
cronbuild-update-version Скрипт для обновления версии и/ли релиза пакета. Не обязателен.
cronbuild-add-changelog Скрипт для кастомизации changelog. Не обязателен.

Скрипты должны быть помечены как исполняемые.

Скрипты cronbuild-update-source, cronbuild-update-version, cronbuild-add-changelog получают спек-файл как первый аргумент.

Другие файлы, используемые утилитой gear-cronbuild-apply-hooks[править]

файл Описание
.gear/upstream/remotes настройка remotes для клонированного git репозитория. Не обязателен.
.gear/cronbuild-git-config опции к команде git-config, для дополнительной настройки клонированного git репозитория. Устарел.

Файлы, используемые сервером сборки cronbuild repocop.altlinux.org[править]

файл Описание
cronbuild-tagname Скрипт для кастомизации git tag name. Не обязателен.
cronbuild-tagmsg Скрипт для кастомизации git tag message. Не обязателен.
cronbuild-options Конфигурационный файл. Требуется при размещении на сервере cronbuild.

Скрипты должны быть помечены как исполняемые. К файлам конфигурации это не относится.

./gear/cronbuild-options[править]

переменная Описание
cronbuild_requires набор дополнительных пакетов, который будет передан в hsh-install для установки в chroot.

необходим, если скрипты используют утилиты, не входящие в базовый набор (curl, wget, git, unzip, ...)

cronbuild_interval периодичность сборок в днях. Желательно. По умолчанию — 3 дня.
cronbuild_mailto e-mail ответственного. Обязательно.
cronbuild_cc список дополнительных e-mail (optional)
cronbuild_mastergit experimental
cronbuild_masterbranch experimental

Пример использования .gear/cronbuild-*[править]

Примечания[править]

  1. Для работы механизм обновления секции changelog нужно определить значение %packager в ~/.rpmmacros.
Разработано при поддержке Фонда содействия развитию МП НТС в рамках НИОКР 01201066526 rigft