Ako na upgrade z Drupal 9 na Drupal 10
Tento postup predpokladá že...
- Máme aspoň nejaké základy programovania, vieme čo je to terminál, command line, bash...
- Máme náš Drupal projekt nainštalovaný cez composer a tomu zodpovedá aj štruktúra adresárov v projekte - https://www.drupal.org/docs/understanding-drupal/directory-structure#s-composer-build-directories
- Máme projekt nainštalovaný na lokále (ddev,lando...)
- Používame Drush - https://www.drush.org
- Kód máme uložený v repozitáre niekde na gite (gitlab, bitbucket, github)
UPGRADE STATUS
Ako prvé si nainštalujeme a aktivujeme modul https://www.drupal.org/project/upgrade_status
composer require 'drupal/upgrade_status'; drush en upgrade_status
Prejdeme na stránku /admin/reports/upgrade-status (Hlásenia > Upgrade Status)
Tu máme možnosť vidieť na koľko percent je stránka kompaktibilná s Drupal 10 a čo všetko nám treba vyriešiť.
Medzi prvými vidíme moduly na odstránenie - sú to moduly ktoré nie sú nainštalované a majú zastaralé verzie alebo nie sú kompaktibilné s novou verziou Drupalu. Keďže ich nepoužívame mali by sme ich odstrániť. Ďalej vidíme moduly ktoré je potrebné aktualizovať - sú nainštalované ale majú nekompaktibilné verzie
Potom vidíme v prehľade custom moduly ktoré sú nekompaktibilné a je potrebné ich upraviť.
A na konci sú moduly ktoré sú kompaktibilné a nevyžadujú si žiadnu akciu z našej strany.
UPDATE MODULOV
Moduly ktoré nepotrebujeme môžeme oddinštalovať ale ja zvyčajne aktualizujem všetky moduly. Pred tým ešte skontrolujem v súbore composer.json (root projektu) či neobsahuje patche ktoré už boli vyriešené.
composer update -W
drush updb -y
po tomto kroku mi ostane pár modulov v tabuľke na odstránenie a niekoľko modulov ktoré neboli aktualizované. Ide o moduly ktoré si vyžadujú prechod na vyššie verzie. Napríklad máme na projekte modul webform s verziou 6.1.5 ale s Drupal 10 je kompaktibilná verzia 6.2. Modul teda aktualizujeme.
composer require 'drupal/webform:^6.2'; drush updb -y
Rovnakým spôsobom postupujeme aj pri ostatných moduloch. Moduly na odstránenie možeme odstrániť.
Príklad odstránenia modulu block class:
composer remove drupal/block_class
Po clearnuti cache sa mi objavil error ktorý súvisel s chýbajucou knižnicou dompurify tak ju bolo potrebné nainštalovať
https://www.drupal.org/project/colorbox/issues/2869067#comment-15126214 (mohlo ísť o lokálny problém, chyba sa nemusí prejaviť na každom projekte).
Teraz som sa dostal na 89% a ostáva vyriešiť custom moduly a contrib moduly ktoré ešte nepodporujú Drupal 10.
UPRAVA CUSTOM MODULOV a CONTRIB MODULOV
Zaškrtneme checkboxy pri všetkých custom moduloch, prescrolujeme dole a potvrdíme buttom 'Scan selected'.
Po preskenovaní sa nám moduly presunuli do tabuliek
FIX WITH RECTOR a FIX MANUALY.
V stĺpcoch LOCAL SCAN RESULT si môžeme pozrieť konflikty ktoré treba v moduloch vyriešiť.
V mojom prípade viem vyriešiť len jeden prípad Rectorom https://www.drupal.org/project/rector a ostatné problémy je potrebné riešiť manuálne.
Inštalácia a použitie rector nástroja
composer require --dev palantirnet/drupal-rector
cp vendor/palantirnet/drupal-rector/rector.php .
skontrolujeme custom moduly na opravu kódu (zatiaľ na nečisto)
vendor/bin/rector process web/modules/custom/ --dry-run
vendor/bin/rector process web/themes/custom/ --dry-run
Ak máme vo výsledku návrh na zmenu, skontrolujeme to a spustíme na ostro
vendor/bin/rector process web/themes/custom/
Po tomto budú zmeny v kóde zapracované.
Ďalej sa pustíme do manuálnych akcií. Na úpravu a vývoj používam integrované vývojové prostredie (IDE) PHPStorm alebo VisualStudioCode. Tieto akcie som zatiaľ musel urobiť skoro na každom projekte.
- vo všetkých custom moduloch a témach upravím v *.info.yml riadok na core_version_requirement: ^9 || ^10
- vyriešime závislosti/dependencies ktoré je potrebné upraviť napr. crop zmenime na crop:crop pretože sa jedna o contrib modul a image zmenime na drupal:image pretože sa jedna o modul v jadre
- upravíme všetky entity query ak je to potrebné https://www.drupal.org/node/3201242 (pridáme accessCheck)
- zrefaktorujeme kód kôli odstránenej jquery.once knižnici https://www.drupal.org/node/3158256
Ak sme vyriešili všetko v našich custom moduloch prejdeme na contrib moduly.
- pozrieme sa či existuje patch ktorý vyrieši kompaktibilitu
- ak existuje použijeme ho resp. použijeme dev verziu modulu ak ešte nebol vydaný nový release modulu
- ak neexistuje, upravíme modul manuálne (resp. za pomoci rectora) a vytvoríme vlastný patch ktorý tiež pridáme na Drupal.org
V mojom prípade šlo napríklad o modul spamicide ktorý stačilo nahradiť dev verziou https://www.drupal.org/project/spamicide/releases/8.x-1.x-dev
OSTATNÉ POŽIADAVKY
Upgrade status mi ešte hlásil v requirmentoch zastaralé moduly jadra Drupalu ktoré je potrebné oddinštalovať resp. nahradiť ich verzie contrib modulmi pretože sa už v jadre nenachádzajú.
Je potrebné sa oboznámiť s týmto postupom https://www.drupal.org/node/3223395 . Na mojom projekte som odinštaloval moduly Color, Quick Edit a tému Bartik.
Potom som nainštaloval CKEditor (ktorý neskôr premigrujeme na CKEditor5), RDF a témy Classy (môže to byť téma potrebná pre custom tému) a Seven
Problém s oprávneniami som vyriešil skriptom https://www.drupal.org/node/3193348#comment-14969643
UPGRADE JADRA
Konečne sme sa dostali k finále. Rectora už môžeme oddinštalovať keďže ho už nebudeme potrebovať, zároveň si vytvoríme zálohy a exportujeme nastavenia. Všetky zmeny som commitol v branchi upgrade_d10.
composer remove palantirnet/drupal-rector; rm rector.php
drush cex -y
git checkout -b upgrade_d10
git add .
git commit -m 'Update Drupal 9'
následne skúsime spustiť upgrade
composer require drupal/core-recommended:^10.0 drupal/core-composer-scaffold:^10.0 drupal/core-project-message:^10.0 --no-update --update-with-all-dependencies
composer update -W
Žiaľ ešte nikdy sa mi nestalo že to zbehlo na prvý krát (ani na druhý:).
Musel som ešte odinštalovať drupal/console ktorý sa na mojich projektoch nepoužíval a taktiež som aktualizoval drush/drush na verziu 12.
+ bolo potrebné aktualizovať jeden patch
Je možné že budete potrebovať
composer require mglaman/composer-drupal-lenient
ktorý umožní nainštalovať aj nekompaktibilné moduly. Využíva sa v prípade ak patch ešte nebol mergnutý do modulu.
Taktiež možno budete potrebovať spustiť pre niektoré moduly
vendor/bin/drush php-eval "\Drupal::keyValue('system.schema')->delete('color');"
na odstranenie zaznamov z odinštalovaných modulov.
Ak update composera zbehne v poriadku nezabutnite spustiť update databázy
drush updb -y
a commitnúť všetky nové zmeny
HOTOVO
Možeme skontrolovať stránku s hlásením stavu /admin/reports/status a vyriešiť prípadné chyby ktoré môžu byť na každom projekte individuálne.
Ak je na backende všetko v poriadku môžeme testovať frontend prípadne nasadiť upgrade na staging kde sa otestuje klientom (alebo ak ide o malý projekt môže ísť na produkciu). Pred tým si ale vždy zálohujte produkčné databázy…keby niečo ;)
Držím palce!