J'ai passé les derniers mois à jouer avec Gemfiles et Gemfile.locks tout en créant un outil de mise à jour automatisée des dépendances 1 . Ce qui suit est loin d'être définitif, mais c'est un bon point de départ pour comprendre le format Gemfile.lock. Vous pouvez également consulter le code source de l' analyseur de fichiers de verrouillage de Bundler .
Vous trouverez les en-têtes suivants dans un fichier de verrouillage généré par Bundler 1.x:
GEM (facultatif mais très courant)
Ce sont des dépendances provenant d'un serveur Rubygems. Cela peut être le principal index Rubygems, sur Rubygems.org, ou il peut s'agir d'un index personnalisé, comme ceux disponibles chez Gemfury et d'autres. Dans cette section, vous verrez:
remote:
une ou plusieurs lignes spécifiant l'emplacement du ou des index Rubygems
specs:
une liste de dépendances, avec leur numéro de version, et les contraintes sur toutes les sous-dépendances
GIT (facultatif)
Ce sont des dépendances provenant d'une télécommande git donnée. Vous verrez une de ces sections différente pour chaque git remote, et dans chaque section, vous verrez:
remote:
la télécommande git. Par exemple,git@github.com:rails/rails
revision:
la référence de validation sur laquelle le Gemfile.lock est verrouillé
tag:
(optionnel) la balise spécifiée dans le Gemfile
specs:
la dépendance git trouvée sur cette télécommande, avec son numéro de version et les contraintes sur toutes les sous-dépendances
PATH (facultatif)
Ce sont des dépendances provenant d'un path
fichier donné , fourni dans le Gemfile. Vous verrez une section différente pour chaque dépendance de chemin, et dans chaque section, vous verrez:
remote:
le chemin. Par exemple,plugins/vendored-dependency
specs:
la dépendance git trouvée sur cette télécommande, avec son numéro de version et les contraintes sur toutes les sous-dépendances
PLATEFORMES
La plate-forme Ruby sur laquelle Gemfile.lock a été généré. Si des dépendances dans le Gemfile spécifient une plate-forme, elles ne seront incluses dans Gemfile.lock que lorsque le fichier de verrouillage est généré sur cette plate-forme (par exemple, via une installation).
DEPENDANCES
Une liste des dépendances qui sont spécifiées dans le Gemfile
, ainsi que la contrainte de version qui y est spécifiée.
Les dépendances spécifiées avec une source autre que l'index principal Rubygems (par exemple, les dépendances git, basées sur les chemins, les dépendances) ont un !
qui signifie qu'elles sont "épinglées" à cette source 2 (bien qu'il faille parfois chercher dans le Gemfile pour déterminer dans).
VERSION RUBIS (facultatif)
La version Ruby spécifiée dans le Gemfile, lors de la création de ce Gemfile.lock. Si une version Ruby est spécifiée dans un .ruby_version
fichier à la place, cette section ne sera pas présente (car Bundler considérera le Gemfile / Gemfile.lock agnostique à la version Ruby de l'installateur).
ENSEMBLE AVEC (Bundler> = v1.10.x)
La version de Bundler utilisée pour créer le Gemfile.lock. Utilisé pour rappeler aux installateurs de mettre à jour leur version de Bundler, si elle est antérieure à la version qui a créé le fichier.
PLUGIN SOURCE (optionnel et très rare)
En théorie, un Gemfile peut spécifier des plugins Bundler, ainsi que des gems 3 , qui seraient alors listés ici. En pratique, je ne connais aucun plug-in disponible, en juillet 2017. Cette partie de Bundler est toujours en développement actif!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/