Git, Composer et Drupal

Gérer et versionner son Drupal

Introduction

$ whois

Contenu
Wam
  • Kevin Gautreau
  • Développeur Back freelance
  • Clermont-Ferrand (depuis Septembre 2015)
  • Spécialisé Drupal
  • Twitter / Github : @Kgaut
  • Mail : contact@kgaut.net
  • Trésorier association Drupal France

GIT

« Versionner »

Contenu

Mettre sous gestionnaire de version

  • Effectuer des "sauvegarde" de son code à un instant T.
  • Revenir à une version précédente
  • Travailler à plusieurs, fusionner des développements

Wut ?

Contenu

Système de gestion de version à la mode.

Développé à l'origine par Linus Torvalds.

Démocratisé par Github.

Principe simple

Contenu

Création d'un dépo : git init

** Code **

Création d'une version :


git commit

** Code **

Création d'une nouvelle version :


git commit

...

Ajout d'une "remote"

Contenu

Pour le travail collaboratif : création d'une copie de notre dépôt.


git remote add origin chemin/vers/remote

récupération d'un dépot distant


git clone chemin/vers/remote

Remotes possible : github, gitlab, dossier local / réseau...

Le fichier .gitignore

Contenu

Fichier à placer à la racine du dépot


Contenant les dossiers / fichiers à ne pas versionner (images, fichiers de config, css...)

db/*.sql
web/uploads
web/sites/default/settings.php

Composer

Wut ?

Contenu
  • Gestionnaire de dépendances PHP
  • Permet d'utiliser des « morceaux de code » et de gérer les version / MAJ

Installer composer

Contenu

GNU/Linux & MacOS


curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

 

 

 

Ajouter une dépendance à notre projet

Contenu

composer require dependance


composer require silex/silex

Va installer silex + ses dépendances

composer.json

Contenu

Fichier contenant les dépendances de notre projet PHP


{
    "require": {
        "silex/silex": "^2.2"
    }
}

composer.lock

Contenu

fichier contenant la version exacte de nos dépendances (et de leurs dépendances)

Sur quoi se base composer ?

Contenu

Un dépot (repository) : packagist (https://packagist.org)

Screenshot-2017-10-24 silex silex - Packagist.png

Ce que permet composer

Contenu
  1. De ne pas avoir à télécharger les librairies tierces manuellement
  2. De ne pas avoir à versionner ces librairies
  3. Gérer facilement les maj

GIT + Composer

Contenu
  1. Versionnement des composer.json et composer.lock
  2. Ajout au .gitignore du dossier "vendor"
  3. git clone
  4. composer install

Mise à jour de dépendances

Contenu

composer update

modifiera le fichier composer.lock mais pas le composer.jsonNote :

Spécifier une version précise

Contenu

"require": {
    "silex/silex" "1.3.6"
}

Contraintes de version

Contenu

"require": {
    // >, <, >=, <= | specify upper / lower bounds
    "vendor/package": ">=1.3.2", // anything above or equal to 1.3.2
    "vendor/package": "<1.3.2", // anything below 1.3.2

    // * | wildcard
    "vendor/package": "1.3.*", // >=1.3.0 <1.4.0

    // ~ | allows last digit specified to go up
    "vendor/package": "~1.3.2", // >=1.3.2 <1.4.0
    "vendor/package": "~1.3", // >=1.3.0 <2.0.0

    // ^ | doesn't allow breaking changes (major version fixed - following semver)
    "vendor/package": "^1.3.2", // >=1.3.2 <2.0.0
    "vendor/package": "^0.3.2", // >=0.3.2 <0.4.0 // except if major version is 0
}

Composer + Drupal = ❤️

Dépots composer pour drupal

Contenu

Drupal.org possède maintenant ses propres dépôts composer :

https://packages.drupal.org/7

https://packages.drupal.org/8

Drupal core + modules tiers

Drupal Project : template pré-configuré

Contenu

https://github.com/drupal-composer/drupal-project

Installation de la dernière version stable de Drupal + Drush + Drupal console

Création et pré-configuration des dossiers (settings, files...)

Création d'un gitignore spécifique pour drupal

Mise en place de Drupal Project

Contenu

Drupal 8


composer create-project drupal-composer/drupal-project:8.x-dev monsite.com --stability dev --no-interaction

Drupal 7

composer create-project drupal-composer/drupal-project:7.x-dev monsite-d7.com --stability dev --no-interaction

Ajout de dépendances

Contenu

composer require drupal/module

exemple : Devel


composer require drupal/devel

Utiliser le nom machine du module (comme avec drush) avec le vendor « drupal »

Un module sur github ? 1/2

Contenu

Ajouter l'adresse du dépôt dans la section « repositories »


composer config repositories.kgaut-tools vcs https://github.com/kgaut/kgaut_tools

Dans le composer.json :


    "repositories": {
        "0": {
            "type": "composer",
            "url": "https://packages.drupal.org/8"
        },
        "kgaut-tools": {
            "type": "vcs",
            "url": "https://github.com/kgaut/kgaut_tools"
        }    
    },

Un module sur github ? 2/2

Contenu

composer require kgaut/kgaut_tools

Note : le module devra posséder aussi son propre composer.json


{
  "name": "kgaut/kgaut_tools",
  "type": "drupal-module",
  "description": "Tools and services for drupal 8",
  "homepage": "https://github.com/kgaut/kgaut_tools",
  "minimum-stability": "dev",
  "require": { }
}

 

gestion des patches

Contenu

Dans la section extra du composer.json :


        "patches": {
            "drupal/core": {
                "Entity display base hidden weight": "patchs/entity-displaybase-hidden-weight.patch"
            },
            "drupal/simple_oauth" : {
                "Allow emails to be used for auth": "https://www.drupal.org/files/issues/simple_oauth-allow-email-authentification-2908437-2.patch"
            }
        }

Pour aller plus loin

Liens et ressources

Contenu

Apprendre Git par l'exemple : https://try.github.io/

Problèmes et solutions de drupal + composer : https://www.jeffgeerling.com/blog/2017/composer-and-drupal-are-still-st…

Cette présentation : https://slides.kgaut.net
Quelques-unes de mes bafouilles sur composer : https://kgaut.net/blog/tags/composer.html
... et sur git : https://kgaut.net/blog/tags/git.html

Twitter : @kgaut
Mail : contact@kgaut.net