Rebase helper je nástroj, který pomáhá vývojářům, jenž se starají o správu balíčků, aktualizovat balíček na poslední vydání. Rebase-helper automatizuje mnoho manuálních úloh, které člověk starající se o balíček (říkejme mu maintainer), obvykle dělá, když “upstream” vydá nové vydání.

Jak nainstalovat rebase-helper?

Rebase-helper můžeme nainstalovat na Fedoru pomocí příkazu dnf:

dnf install -y rebase-helper

Rebase-helper sám o sobě vyžaduje další programy jako
abipkgdiff, rpmdiff, mock, fedpkg, meld, atd.
o kterých budu mluvit později.
Tyto programy jsou nainstalovány automaticky jako závislosti.

Poznámka: rebase-helper je také dostupný jako EPEL-7 balíček. Proto jej neváhejte použít na CentOS 7 distribuci.

Jak vlastně rebase-helper pracuje?

Pořadí kroků, které rebase-helper vykonává, bychom mohli sumarizovat následovně:

  • Stažení archívu s nejnovějším zdrojový vydáním, tzv. releasem.
  • Rebase downstream patchů na nové upstreamové vydání pomocí programu git rebase.
  • Pokud byly patche aplikovány úspěšně, pak se zbuildují dvě sady balíčků.
    Jedna sada ze starým upstreamovým vydáním
    a druhá z novým upstreamovým vydáním. Podporované nástroje pro buildování
    balíčků jsou mock, rpmbuild, fedpkg.

    • Pokud “nový” RPM build selže, pak se stáhnou logy build.log a root.log
    • Pokud bylo buildování úspěšné, pak se stáhnout všechny dostupné RPM balíčky.
  • Pokud se podařilo zbuildovat vše, pak rebase-helper spustí sadu programů, tzv. checkerů,
    které ověří co se změnilo mezi starým a novým vydáním balíčku.
    Podporované programy jsou pkgdiff, rpmdiff, abipkgdiff.
    Rebase-helper výsledky checkerů oznámí uživateli.

Co se změnilo?

Za poslední rok, se podařilo rebase-helper teamu implementovat několik důležitých změn.
Tyto změny jsou důležité pro maintainery a pro integraci rebase-helperu do služeb,
které kontrolují, zda-li nevyšlo nové vydání.

O těchto nových změnách, bych rád řekl něco nyní:

  • Non-interactive mode - Tento mód znamená, že maintaner není vyrušován rebase-helperem,
    např. při rebasování patchů.
    Prvně jsou patche rebasovány automaticky a pokud rebase spadne, pak je daný patch přeskočen.
    Na konci je reportováno, který patch build přeskočen.
    Za druhé se spustí automatický build balíků (jak stará tak i nová verze).
    V případě, že build nového balíku selže, pak se rebase-helper snaží analyzovat důvod pádu
    buildu a pokusí se opravit SPEC soubor. Po té je opětovně spuště build s opravou SPEC souboru.
    Toto se děje pouze dvakrát.
    Pokud rebase-helper selže i po druhé, maintainer by se měl podívat na důvod pádu buildu.
  • Použití gitu pro rebase downstreamových patchů - Na začátku projektu,
    byly použity nástroje patch a meld pro rebasování patchů nad novým vydáním.
    Následně jsme se rozhodli použít již existující funkcionalitu, kterou dodává git
    příkaz pro rebase operace. To povoluje uživateli specifikovat program v .gitconfig souboru,
    který má použít pro porovnání a mergování souborů v případě, že patch nelze aplikovat.
  • Podpora buildování balíku pomocí fedpkg - Rebase-helper je schopný buildovat balíky pomocí koji scratch buildů.
    Tedy balíčky jsou buildovány vzdáleně a ne na lokalním počítači. Uživatel si tedy nemusí instalovat spoustu závislostí, které balíček může vyžadovat.
  • Podpora abipkgdiff - Porovnání starých a nových balíků abipkgdiff nástrojem je důležitá změna
    v rebase-helperu.
    Nástroj oznámí uživately změny, které získal tímto nástrojem.
  • Podpora Upstream Release Monitoringu - Další důležitý milník je podpora tzv. “Upstream release monitoringu”
    https://release-monitoring.org/ .
    Anitya kontroluje nové upstreamové verze a reportuje nové bugy či updatuje již stávající.
    Rebase-helper je pak spuštěn a kontroluje
    co se od posledního vydání změnilo.

Jaké jsou další přepínače v rebase-helperu?

Rebase-helper má několik dalších přepínačů, které bych rád popsal na tomto místě.
Je důležité zmínit, že každý přepínač zde zmíněný začíná ‘--’:

  • buildtool - vybere nástroj pro buildování balíků. Aktuálně podporované jsou
    mock, fedpkg a rpmbuild. Defaultní je mock.
  • pkgcomparetool - vybere nástroj pro porovnání starých a nových RPM balíků.
    Dostupné podporované nástroje jsou pkgdiff, rpmdiff nebo abipkgdiff.
    Defaultně jsou spuštěny všechny.
  • outputtool - vybere nástroj, jak budou data reprezentovány.
    V současné době je podporován pouze textový výstup.
  • not-download-sources - nestahuje zdrojové soubory na začátku rebase-helperem.
  • builds-nowait - nečeká na buildy. Přepínač je platný pouze pro přepínač --buildtool fedpkg.
    Jinak je přepínač ignorován.
  • fedpkg-build-tasks - specifikuje tzv. task-id z koji.
    Logy a RPMka budou staženy z těchto koji úloh.
    Tento přepínač je použit jako druhý krok při implementaci do upstream monitoring služby.
  • results-dir - specifikuje, kde budou uloženy výsledky.

Integrace s upstream release monitoring službou

Před integrací rebase-helperu do upstream release monitoring služby, bug v
bugzille reportovaný upstream release monitoringem vypadal následovně

Upstream Release Monitoring without rebasehelper

The-new-hotness daemon, který je součástí upstream release monitoringu,
vytvoří bug a informuje maintainera, že vyšla nová verze a pokusí se spustit testovací “scratch” build.
V případě, že scratch build spadne,
maintainer nevidí informace jako, které patche byly úspěšně aplikovány a které selhaly.
Dále nevidí žádné porovnání mezi balíčky.

Při integraci rebase-helpera do upstream monitoring služby,
byl formát bugu změněn a maintainer může vidět, co je přesně za problém.
Jestli patchování nového balíku spadlo, či spadnul teprve nový build.

Upstream Release Monitoring with rebasehelper

Bug také obsahuje relevantní log soubory ze scratch buildu,
kde může maintainer vidět, proč scratch build spadl a samozřejmě debug
log z rebase-helperu pro analýzu. Pokud se najde problém v rebase-helperu,
uřivatel může přímo reportovat problém na GitHub projektovou stránku rebase-helperu.

Rebase-helper nástroj pro služby upstream monitoringu

Tato kapitola je zaměřena pro nástroje, které se starají o hlídání
upstreamových vydání a rádi by integrovali rebase-helper.
Rebase-helper poskytuje API, které lze použít pro tento typ služeb.
Dostupná API jsou pro Python a pro Bash:

  • Opatchování nového vydání a spuštění testovacích “scratch” buildů
  • Tato část patchuje nové zdrojové soubory a startuje scratch
    buildy pomocí fedpkg a vrátí task_ids, jako identifikátory úloh.

    • Python API
    •            from rebasehelper.application import Application
                 cli = CLI([‘--non-interactive, ‘--builds-nowait’, ‘-buildtool’, ‘fedpkg’, upstream_version])
                 rh = Application(cli)
                 rh.set_upstream_monitoring() # Switch rebase-helper to upstream release monitoring mode.
                 rh.run()
               
    • Bash
    •            rebase-helper --non-interactive --builds-nowait --buildtool fedpkg upstream_version
               
  • Stáhne logy a RPM balíky a porovná je pomocí nástrojů jako abipkgdiff
    • Python API
    •            cli = CLI([‘--non-interactive, ‘--builds-nowait’, ‘--fedpkg-build-tasks old_id,new-id])
                 rh.run() # Downloads RPMs, logs and runs checkers and provides logs.
                 rh.get_rebasehelper_data() # Get all information about the results
               
    • Bash
    •            rebase-helper --non-interactive --builds-nowait --fedpkg-build-tasks old_id,new-id
               

Co dál

  • Implementovat csbuild.
  • Stažení posledních buildů z koji.
  • Zlepšení buildování Source1 GitHub issue 161.
  • Připojení ChangeLog, News etc. do bugu.
  • Informovat v bugu pokud došlo k SONAME bumpu.
  • Více výstupních nástrojů pro další analýzu.

Links: