Composer patch

Composer patch
Composer patch je elegatntní cesta, jak doupravovat balíčky z vendoru. Ukažáme si jednu cestu, jak jednoduše poskytovat opravu nebo rozšíření, které bude vyhovovat také CI/CD.

Důvody

Šahat do vendor balíčků většinou nebývá dobrý nápad, ale najdou se případy, kde je to legitimní řešení nějakého problému. Například nemá smysl posílat PR (refactor v příští verzi) nebo chybí nastavení nějaké drobnosti, kterou by autor schválit třeba ani nechtěl. V tomto případně například aktualizujeme Bootstrap 5 dříve, než autor doplňku a stačí nám opravit pár drobností (doplnit bs- apod).

Zároveň chcete zachovat funkční ekosystém CI/CD, to je důležitý aspekt výběru správného řešení. Pokud by se patch nedokázal aplikovat, tak se o tom v testech či CI dozvíte.

Alternativy

Můžeme začít od nejhorší:

  • Ručně si to upravte na serveru
  • Udělejte si fork a používejte ho
  • Composer patch
  • Poslat PR do balíčku
  • Napsat si vlastní doplněk

Vytvoření patche

V repositáři, kde chceme provádět a hlídat změny při aktualizacích composeru, stačí provést požadované změny. Následně si je vygenerujeme pomocí příkazu git diff > datagrid.patch. Bude to vypadat třeba následovně:

...
diff --git a/src/templates/column_status.latte b/src/templates/column_status.latte
index 5f7f96e..5661806 100644
--- a/src/templates/column_status.latte
+++ b/src/templates/column_status.latte
@@ -8,7 +8,7 @@
 <div class="dropdown">
    {if $activeOption}
        {if $status->shouldBeRendered($row)}
-           <button class="dropdown-toggle {$activeOption->getClass()} {$activeOption->getClassSecondary()}" type="button" data-toggle="dropdown">
+           <button class="dropdown-toggle {$activeOption->getClass()} {$activeOption->getClassSecondary()}" type="button" data-bs-toggle="dropdown">
...

Nastavení

Nejdříve je nutné povolit spouštění pluginu cweagans/composer-patches.

"config":
{
    "allow-plugins":
    {
        "cweagans/composer-patches": true
    }
}

A následně v composer.json v sekci extra nastavení aplikování konkrétního patche na vybraný vendor repositář.

"extra":
{
    "patches":
    {
        "ublaboo/datagrid":
        {
            "Fix BS5": "patch/datagrid.patch"
        }
    }
}

Soubor umístěte do složky patch nebo kamkoliv jinam. V tuhle chvíli byste měli mít například automaticky upravovaný ublaboo/datagrid na Boostrap 5 ve stabilní verzi, než vyjde nová major verze.

Není nic staršího, než včerejší článek na internetu. Články jsou většinou jen krátké snippety, které mi zaujaly. Klidně napište na email, pokud Vás něco zaujalo a chcete se o tom pobavit více.
Profil Pavel Kravčík blog
Rád do věcí kopu #futsal, čtu je #knihy nebo je také analyzuji a převádím na jedničky a nuly #programovani. Ve volném čase se následně snažím ty jedničky a nuly naopak zničit #hry.
Hrdý dárce krve (25+ odběrů)
Zapálený hráč futsalu (600+ zápasů)
Vášnivý čtenář knížek (~159.4k stránek)
Žebříčky
Poslední články
Nejčastější tagy