Pour exporter sa base de données :
drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql
Pour importer sa base données :
gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc
Drupal 9 est disponible depuis le 3 juin 2020. À quoi pouvons-nous nous attendre ? Quelles sont les mises à jour proposées ? Comment migrer vers Drupal 9 sans douleur
Aujourd'hui, les experts d'Akabia répondent à ces questions et à d'autres encore.
Pour un projet drupal, j'avais besoin de créer deux tables identiques dans une base de données séparée sur un serveur différent, afin de servir de cache pour un webservice.
Voici le code que j'ai utilisé pour créer ces tables avec un test si les tables existe avant de les récréer (si j'ai besoin de mettre à jour le modèle par exemple).
Définition du schéma de ma table dans le fichier MODULE.install :
# Le nom de cette fonction est personnel, je n'utilise pas le HOOK_schema() icifunction MODULE_schema_db_cache() { $schema['proposals'] = [ 'description' => 'distribProposal', 'fields' => [], 'primary key' => ['id'], 'indexes' => [ 'id' => ['id'], 'room_type_code' => ['room_type_code'], ], ]; $schema['proposals']['fields']['id'] = [ 'description' => 'id', 'type' => 'serial', 'not null' => TRUE, 'unsigned' => TRUE, ]; $schema['proposals']['fields']['name'] = [ 'type' => 'varchar', 'length' => 255, ]; //Ajout des champs supplémentaires ici}
Création des tables via un hook_update() :
/** * DB cache ws - Creation tables */function MODULE_core_update_8005() { try { // Je passe sur une autre base de données définis dans mes settings // ici : $databases['cache_ws']['default'] Database::setActiveConnection('cache_ws'); // Je récupère le schéma $db = MODULE_schema_db_cache(); if($schema = Database::getConnection()->schema()) { // Je veux avoir deux fois la même table afin de passer sur la seconde quand je met à jour la première $tables = ['proposals_a', 'proposals_b']; foreach ($tables as $table) { // Si la table existe déjà je la supprime if ($schema->tableExists($table)) { $schema->dropTable($table); } // Puis je la recrée $schema->createTable($table, $db['proposals']); } } } catch (Exception $e) { // En cas de soucis je commence par basculer sur la base de donnée par défaut Database::setActiveConnection(); // Puis je lance une erreur throw new \Drupal\Core\Utility\UpdateException(t('vacanceole_core_update_8005 error : @message', ['@message' => $e->getMessage()])); } // Si tout s'est bien passé je repasse sur la base de données par défaut. Database::setActiveConnection(); return t('Tables proposals_a and proposals_b successfully created');}
Pour bien faire je devrais ajouter l'installation de mes tables dans un hook install, en faisant appel à la fonction que je viens de définir :
function MODULE_install() { MODULE_update_8005();}
5 ans après la version 8, Drupal 9 est sorti en version stable ce mercredi 3 juin 2020.
Les nouveautés sont nombreuses depuis Drupal 8.0 : gestion des médias, éditeur de mise en page, gestion des flux de publication, intégration avec Composer...
...plutôt qu'une révolution.
Contrairement au passage de Drupal 7 à Drupal 8, le passage de Drupal 8 à Drupal 9 sera très simple.
En effet, depuis Drupal 8.0.0, la gestion du code a changé :
Pour faire simple : Drupal 9.0 = Drupal 8.9 - Toutes les fonctions dépréciées.
De nombreux modules sont déjà compatibles et de nombreux outils existent pour rendre vos modules personnalisés compatibles avec la nouvelle version du CMS.
Non, vous pourrez facilement mettre à jour le core de Drupal vers la version 9 une fois que tous les modules tiers que vous utilisez seront compatibles.
Avec composer c'est très simple et cela se fait en deux lignes :
composer create-project drupal/recommended-project:9.0.0 drupal9<br />php drupal9/web/core/scripts/drupal quick-start demo_umami
Cela vous lancera l'installation d'un drupal 9 avec un site de démo présentant des recettes de cuisite.
« et voila ! »
Cela peut-être vérifié de plusieurs manière. Pour commencer sur la page du projet sur drupal.org, dans les informations de téléchargement :
Aussi vous pourrez trouver l'information équivalente sur le fichier .info.yml du projet.
Enfin, vous pouvez faire des recherche directement sur le site https://dev.acquia.com/drupal9/deprecation_status
Pas forcement, via l'API de migration (Migrate API) il est possible de migrer un Drupal 7 directement sous Drupal 9.
Le support de Drupal 7 devait s'arrêter aujourd'hui, il a finalement été étendu à la fin 2021, le support de Drupal 8 s’arrêtera aussi au même moment.
Vous ne recevrez plus de mise à jour de sécurité pour votre site, il sera donc vulnérable.
Un programme de support payant, assuré par des entreprises tierces sera mis en place.
Drupal devrait garder les cycles de 6 mois mis en place depuis la version 8.0, théoriquement la version 9.1 devrait sortir le 2 décembre 2020.
Toujours en théorie, Drupal 10 sortira au deuxième trimestre 2022.
Toutes les informations sur Drupal 9 : https://www.drupal.org/9
Migrer de Drupal 8 à Drupal 9 : https://www.drupal.org/about/9/from-8
Statut des modules : https://dev.acquia.com/drupal9/deprecation_status
Vous avez des questions ? N'hésitez-pas à les poser sur le Slack de la communauté francophone ou sur Twitter avec le hashtag : #drupal9FR. Nous les ajouterons à cet article si nous pouvons y répondre.
5 ans après la version 8, Drupal 9 est sorti en version stable ce mercredi 3 juin 2020.
Les nouveautés sont nombreuses depuis Drupal 8.0 : gestion des médias, éditeur de mise en page, gestion des flux de publication, intégration avec Composer...
...plutôt qu'une révolution.
Contrairement au passage de Drupal 7 à Drupal 8, le passage de Drupal 8 à Drupal 9 sera très simple.
En effet, depuis Drupal 8.0.0, la gestion du code a changé :
Pour faire simple : Drupal 9.0 = Drupal 8.9 - Toutes les fonctions dépréciées.
De nombreux modules sont déjà compatibles et de nombreux outils existent pour rendre vos modules personnalisés compatibles avec la nouvelle version du CMS.
Non, vous pourrez facilement mettre à jour le core de Drupal vers la version 9 une fois que tous les modules tiers que vous utilisez seront compatibles.
Avec composer c'est très simple et cela se fait en deux lignes :
composer create-project drupal/recommended-project:9.0.0 drupal9<br />php drupal9/web/core/scripts/drupal quick-start demo_umami
Cela vous lancera l'installation d'un drupal 9 avec un site de démo présentant des recettes de cuisite.
« et voila ! »
Cela peut-être vérifié de plusieurs manière. Pour commencer sur la page du projet sur drupal.org, dans les informations de téléchargement :
Aussi vous pourrez trouver l'information équivalente sur le fichier .info.yml du projet.
Enfin, vous pouvez faire des recherche directement sur le site https://dev.acquia.com/drupal9/deprecation_status
Pas forcement, via l'API de migration (Migrate API) il est possible de migrer un Drupal 7 directement sous Drupal 9.
Le support de Drupal 7 devait s'arrêter aujourd'hui, il a finalement été étendu à la fin 2021, le support de Drupal 8 s’arrêtera aussi au même moment.
Vous ne recevrez plus de mise à jour de sécurité pour votre site, il sera donc vulnérable.
Un programme de support payant, assuré par des entreprises tierces sera mis en place.
Drupal devrait garder les cycles de 6 mois mis en place depuis la version 8.0, théoriquement la version 9.1 devrait sortir le 2 décembre 2020.
Toujours en théorie, Drupal 10 sortira au deuxième trimestre 2022.
Toutes les informations sur Drupal 9 : https://www.drupal.org/9
Migrer de Drupal 8 à Drupal 9 : https://www.drupal.org/about/9/from-8
Statut des modules : https://dev.acquia.com/drupal9/deprecation_status
Vous avez des questions ? N'hésitez-pas à les poser sur le Slack de la communauté francophone ou sur Twitter avec le hashtag : #drupal9FR. Nous les ajouterons à cet article si nous pouvons y répondre.
Mais également sur
Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 28/05/2020 - 11:11
Pour exporter sa base de données :
drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql
Pour importer sa base données :
gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc
Un module est un ensemble de fichiers PHP, Javascript et/ou CSS qui étendent les fonctionnalités du site et en ajoutent de nouvelles
Nous allons voir dans cet article comment créer un module avec Drupal 8.
Voici comment modifier un onglet Local Task dans le langage drupal, en utilisant le hook HOOK_local_tasks_alter:
function MONMODULE_local_tasks_alter(&$local_tasks) { $local_tasks['entity.user.edit_form']['title'] = 'Modifier mes informations';}
La clé est définie dans la déclaration de l'élément :
Image
Ici uniquement le titre est changé,il est possible de modifier les autres propriété, comme l'ordre (weight), la destination de l'élément...
Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 07/05/2020 - 12:26
Pour exporter sa base de données :
drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql
Pour importer sa base données :
gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc
Migration Media et Images Inline
Dans la série d'articles sur la migration de mon site https://www.vincentliefooghe.net/content/migration-drupal-7-vers-drupal-8 j'en viens maintenant à une partie qui m'a pris pas mal de temps et demandé un peu de développement.
Sur mon site en Drupal 7, j'avais utilisé le module Media_Wysiwyg et Colorbox, qui me permettaient d'insérer des images directement dans le texte.
Je n'ai pas trouvé d'équivalent sous Drupal 8, mais en utilisant comme format d'affichage "Colorbox" pour le champ media_image, ceci répond à mon besoin : ouvrir un champ image dans une "lightbox".
Il reste donc à convertir les fichiers en média, et ensuite à convertir, dans le corps du texte de chaque contenu, les tags "colorbox" en tags "drupal media".
Lors de la migration, les fichiers ont bien été importés. Par contre ils ne sont pas reconnus comme media par Drupal ,et donc pas réutilisables.
Après avoir cherché - en vain - des modules qui géraient ceci, j'ai fini par passer par un bout de programme PHP qui utilise les fonctions de Drupal pour réaliser cette opération.
Le code php est le suivant :
query("select * from file_managed where filemime like 'image%'")->fetchAll(); foreach ($results as $file ) { echo "File name:",$file->filename," Id : ",$file->fid," mime : ",$file->filemime," uid : ",$file->uid; echo "Creation du Media Image pour ",$file->filename,PHP_EOL; $media = Media::create([ 'bundle' => 'image', 'uid' => $file->uid, 'langcode' => $file->langcode, 'field_media_image' => [ 'target_id' => $file->fid, 'alt' => $file->filename ] ]); $media->setPublished(TRUE); $retour=$media->save(); if ( $retour != 1 ) { echo "Retour KO ? ",$retour,PHP_EOL; } } return (TRUE);
On peut le lancer avec drush, via la commande :
drush --uri=drupal.loc scr /chemin/vers/mon/fichier.php
Après cette étape, on récupère bien dans la librairies de media tous les fichiers
Pour convertir les tags, j'ai développé un programme PHP qui va remplacer les instructions inline Colorbox, par exemple
[[{"type":"media","view_mode":"colorbox","fid":"88","attributes":{"alt":"","class":"media-image","height":"300","typeof":"foaf:Image","width":"494"}}]]
par
Le script sera lancé avec en paramètre le Node Id à traiter :
php mediaInline.php -i nid
Par exemple
php mediaInline.php -i 136
Note : j'ai fait le choix de traiter les contenus un par un. Au total, j'avais identifié une vingtaine d'articles concernés. La migration unitaire me permettait de vérifier le traitement pour chacun.
Afin de voir le résultat, il faut vider le cache Drupal avec la commande :
drush cr
vincentl
lun 20/04/2020 - 21:54
Migration avec le module migrate_upgrade
On va installer les 2 modules suivants : migrate_upgrade, migrate_tools.
composer require drupal/migrate_upgrade composer require drupal/migrate_tools
Puis activer les modules :
drush pm:enable migrate_upgrade migrate_tools -y
Dans le fichier settings.php , il faut ajouter la définition de la base source.
Important : elle doit s'appeler migrate.
Par exemple :
$databases['migrate']['default'] =
array ( 'database' => 'dbdrupal7',
'username' => 'user_drupal7',
'password' => 'mdp_drupal7',
'prefix' => '',
'host' => 'localhost',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql'
);
Dans la version que j'ai installé, on peut utiliser migrate_upgrade pour générer les scripts de migration, qui seront lancés avec drush.
Attention : à cause d'une incompatibilité avec drush 10, cette fonction nécessite que l'on modifie le fichier vendor/drush/drush/includes/drush.inc
pour ajouter la définition de drush_print :
function drush_print($message = '', $indent = 0, $handle = NULL, $newline = TRUE) { $msg = str_repeat(' ', $indent) . (string)$message; if ($newline) { $msg .= "\n"; } if (($charset = 'UTF-8' ) && function_exists('iconv')) { $msg = iconv('UTF-8', $charset, $msg); } if (!$handle) { $handle = STDOUT; } fwrite($handle, $msg);
}
Sinon on a le message :
drush migrate-upgrade --legacy-db-key=migrate --configure-only [error] Error: Call to undefined function drush_get_option() in drush_print()
Lancer la commande avec le chemin vers le répertoire source "legacy", ce qui permet de migrer les fichiers également :
drush migrate-upgrade --legacy-db-key=migrate --legacy-root /var/www/drupal7/vincentl --migration-prefix=upg1_ --configure-only
On peut ensuite voir le résultat avec la commande drush migrate-status
Et on peut lancer la migration avec :
drush migrate:import upg1_d7_taxonomy_vocabulary drush migrate:import upg1_d7_taxonomy_term_categorie drush migrate:import upg1_d7_taxonomy_term_tags drush migrate-import --group=migrate_drupal_7
Note : je lance d'abord les migrations de taxonomie pour que la génération des liens de menu se passe correctement. Comme dit précédemment, le processus est assez itératif et a demandé plusieurs essais avant de trouver les bons réglages.
Après cette étape, le contenu a été migré, ainsi que les types de contenu, les menus, etc.
Il reste à faire quelques mises au point et reprise de paramétrage sur les formats de texte (insertion du bouton media par exemple), ainsi que refaire le thème, et traiter le cas des images inline.
vincentl
lun 20/04/2020 - 21:42
Processus de migration vers Drupal 8
Le processus de migration a été testé plusieurs fois. Je suis parti sur la base d'une sauvegarde du site Drupal 7 (fichiers + base de données).
J'ai installé ça dans un container LXC sur mon PC, ce qui me permettra de supprimer tout cela une fois la migration terminée.
Au final, on a donc un container sous Debian 10 avec PHP 7.3.11 et une base MariaDB 10.1.
L'idée est donc la suivante :
Le processus a été fait de manière itérative, je m'y suis repris à 3 ou 4 fois avant d'avoir un processus qui tienne la route.
Une fois la base de données créée, on procède à l'installation de Drupal 8.
A la date d'installation, la version est Drupal 8.8.5.
Il est maintenant fortement recommandé d'utiliser composer pour installer et mettre à jour Drupal.
Sachant que même l'installation de modules utilise composer, c'est la solution que j'ai utilisé. C'est d'ailleurs très pratique quand on refaire plusieurs fois la même installation, puisqu'une fois le fichier _composer.json _ généré, il est possible de s'en resservir.
Mon fichier comprend les modules suivants :
"repositories": [<br />
{ "type": "composer",<br />
"url": "https://packages.drupal.org/8" }<br />
],<br />
"require": {<br />
"composer/installers": "^1.2",<br />
"drupal/colorbox": "^1.4",<br />
"drupal/core-composer-scaffold": "^8.8",<br />
"drupal/core-project-message": "^8.8",<br />
"drupal/core-recommended": "^8.8",<br />
"drupal/honeypot": "^1.30",<br />
"drupal/pathauto": "^1.6",<br />
"drupal/tagclouds": "^1.0",<br />
"drupal/token": "^1.6",<br />
"drupal/xmlsitemap": "^1.0@RC",<br />
"drush/drush": "^10.2" },
On remarquera que drush est installé en même temps que Drupal.
Une fois le répertoire d'installation créé, et le fichier composer.json copié dans ce répertoire, l'installation se fait simplement :
composer install
A ce niveau, on peut déjà accéder au nouveau site (il faut auparavant avoir paramétré le virtualhost qui pointe sur le bon répertoire), entrer les paramètres de la base de données. J'ai personnellement choisi d'installer uniquement le français, car je ne vais pas gérer le multilingue.
Comme le site sera migré, on peut s'arrêter avant la configuration du site.
L'étape suivante est de préparer et lancer la migration.
vincentl
dim 19/04/2020 - 12:45
Migration Drupal 7 vers Drupal 8
Mon site perso n'est pas très complexe, ni au niveau contenu (environ 200 articles) ni au niveau modules Drupal.
La version utilisée est Drupal 7.69.
En plus des modules du "core", j'utilise des choses plutôt classiques :
Le thème est un développement custom, basé sur Adaptative Theme. Il sera à refaire.
Dans tout ça, les seuls module non portés en D8 et pour lesquels il faudra trouver une alternative sont media_colorbox et botcha.
Pour l'antispam, j'ai opté pour le module honeypot, et pour media_colorbox, le paramétrage de l'affichage pour les médias de type image va suffire.
Côté volumétrie, on a :
On utilise 2 langues : français et anglais (9 en anglais, le reste en français ou neutre).
Afin de simplifier la migration, je vais changer la langue des articles en anglais pour les assigner au français ou au neutre.
Pour les alias d'URL, même modification (on assigne tout au "All languages").
Vu la faible volumétrie, je fais cela directement via l'interface web de Drupal, ce qui me permet de m'assurer que tous les champs sont correctement mis à jour.
Suite aux tests effectués, j'ai aussi modifié le champ field_alt_text pour enlever colorbox_link du mode d'affichage.
Les différentes étapes de la migration seront détaillées dans la suite de cette série d'articles, avec les problèmes que j'ai pu rencontrer.
Vincent
dim 19/04/2020 - 12:40
Si vous développez avec drupal, vous connaissez peut-être les fonctions dump, dpm ou kint, (sinon, lisez ma rapide présentation de kint.)
Une autre fonction très pratique mais moins connue est ddm(), anciennement connue sous le nom de dd(), qui permet de dumper les paramètres dans un fichier, au lieu de les afficher dans la page. Cette fonction est donc très pratique dans les cas où l’on a aucun retour d’affiché (batch, hook_update, EventSubscriber...)
Note : Cette fonction vient du module devel, le module doit donc être installé et activé pour que la fonction soit disponible.
Le paramètre passé à la fonction est dumpé dans le fichier temporary://drupal-debug.txt, ainsi, sur mon site le wrapper temporary:// est configuré dans le dossier ../files/tmp. (Note : cette configuration se fait directement dans le fichier settings.php de drupal, elle était avant dans Configuration / Médias / Système de fichier)
Image
Je peux donc afficher le contenu de ce fichier directement dans un éditeur de texte. À savoir que les tableaux et objets sont dumpé hiéarchiquement, ce qui est pratique mais qui peut rapidement alourdir ce fichier !
# Dans un de vos fichier php : ddm($variable);
Image
On peut assi ajouter des labels à ce que l'on dump pour éviter de se perdre quand on dump plusieurs variables :
function kgaut_2020_preprocess_node(array &$variables) { /** @var \Drupal\node\Entity\Node $node */ $node = $variables['elements']['#node']; ddm('------------------'); ddm($node->getType(), 'Type de noeud'); ddm($node->getTitle(), 'Titre'); ddm($node->getCreatedTime(), 'Created');...}
Image
Enfin, la fonction bach tail, on peut afficher en live ce qui est dumpé, dans un terminal, sans avoir à recharger le fichier, la commande à exécuter est ci-dessous :
# Chemin à adapter en fonction de votre organisation : tail -f /vhosts/kgaut.net/files/tmp/drupal_debug.txt
Évidement, cela ne vaut pas un "vrai" debuger comme xdebug ou autre, mais c'est mieux que rien !
Une nouvelle section sur le site pour vous partager une petite revue de presse du monde drupal afin d'occuper votre week-end confiné avec un peu de lecture en français et en anglais.
L'assemblée générale de l'association avait lieu il y a quelques jours, découvrez la composition du bureau : https://www.drupal.fr/articles/2020/decouvrez-bureau-2020-lassociation-drupal-france-francophonie.
Après les Drupal Dev Days (repoussés à une date inconnue encore), c'est au tour de la DrupalCon de Barcelone d'être déplacée du 8 au 11 décembre 2020 au lieu des 14 au 17 septembre 2020. Plus d'informations en anglais : https://events.drupal.org/barcelona2020/covid-19-public-health-info.
Extrait du livre Drupal 8 Module Development, en anglais : https://www.webomelette.com/automated-testing-drupal-8.
Toujours sur les tests unitaires : une présentation de Fabien Clément sur phpunit et Drupal 8 (français) : https://www.lequipe.tech/blog/les-tests-sous-drupal-8-phpunit.
Toutes les explications pour créer un thème D8 en partant de 0 (anglais) : https://www.specbee.com/blogs/how-create-custom-drupal-8-theme-9-simple-steps.
La version 9 est prévu pour sortir le 3 juin 2020, cette semaine est sorti la seconde version beta pour préparer la version finale.
Découvrez l'annonce de sortie de la beta2 : https://www.drupal.org/project/drupal/releases/9.0.0-beta2.
Le portail officiel contenant toutes les informations concernant Drupal 9 (anglais) : https://www.drupal.org/docs/9.
Le point sur les nouveautés de Drupal 9 (français) : https://bluedrop.fr/content/chemin-vers-drupal-9-migration-drupal-8-drupal-7.
Découvrez comment tester Drupal 9 avec composer (français) : https://kgaut.net/snippets/2020/installer-et-tester-drupal-9-avec-composer.html.
Programme de test de migration de Drupal 8 vers Drupal 9 (anglais) : https://www.drupal.org/blog/get-involved-participate-in-the-beta-test-process-for-drupal-9.
Une checklist pour ne rien oublier (anglais) : https://www.axelerant.com/resources/team-blog/qa-checklist-editorial-workflow-moderation.
Le versionnement sémantique arrive avec Drupal 8.8.3, en lieu et place des 8.x-2.0, les versions seront maintenant numérotées 2.0.0. Découvrez ce que cela veut dire pour vos modules et comment faire la transition : en français : https://kgaut.net/blog/2020/drupal-9-modules-et-versionnement-semantique.html et en anglais : https://www.drupal.org/node/1015226#semver-transition.
Et vous, qu'avez-vous lu cette semaine ? Partagez-vos liens en commentaire ci-dessous !
L'assemblée générale de l'association a eu lieu le 12 mars 2020 et vous étiez nombreux en présentiel ou à distance, merci de votre implication !
Retrouvez le support de la présentation.
Le nouveau bureau élu :
Avec l'arrivée prévue le 3 juin 2020 de drupal 9, il n'y a pas besoin de créer une branche 9.x-1.x spécifiquement pour drupal 9, vous pouvez facilement indiquer que votre module est compatible avec cette nouvelle version en ajoutant dans votre fichier mon_module.info.yml la clé suivante :
core_version_requirement: ^8 || ^9
La clé core est à conserver pour garder la compatibilité avec les versions inférieures à drupal 8.7.7 (oui c'est d'un pratique...) Exemple dans un de mes modules.
En outre, il en sera bientôt terminé des versions de module "8.x-1.0", le versionnement sémantique est adopté et est compatible à partir de drupal 8.8.3, C'est à dire que les nouvelles branches de vos projets seront nommées 2.x (au lieu de 8.x-2.x) et les tags (versions) pourront être sous la forme :
2.0.0-beta1
2.0.0
2.0.1
2.1.0
Si vous passez au versionnement sémantique, les numéros de versions doivent être incrémentés, ainsi, si actuellement vous avez actuellement une branche 8.x-2.x, conservez là pour toutes les versions de drupal inférieures à 8.8.3, mais vous pouvez dès maintenant créer une branche 3.x pour la compatibilité avec les versions 8.8.3+ et 9.0.0 de drupal.
Il est possible de spécifier qu'une branche ne sera compatible qu'avec drupal 9 dans le fichier info.yml :
core_version_requirement: ^9
Plus d'informations sur le versionnement sémantique
Plus d'informations sur les changements du fichier mon_module.info.yml
tl;dr
Si vous avez un module avec une branche 8.x-2.x :
Votre module est compatible avec drupal 9 : vous pouvez ajouter la clé "core_version_requirement: ^8 || ^9" à votre module.info.yaml (c'est ce que j'ai fais pour mon mini module popin : https://www.drupal.org/project/popin. Vous pourrez passer au versionnement sémantique pour la prochaine version majeure de votre module
Votre module nécessite de plus gros travaux pour être rendu compatible, vous pouvez garder la branche 8.x-2.x pour drupal 8 et démarrer une branche 3.x qui sera une branche de travail pour drupal 9.