Empaqueter ac-geiser pour Guix (6) : Contribuer !

Logo Guix

Cette série de billets de blog est une invitation à voir comment quelqu'un peut apprendre comment empaqueter des logiciels pour Guix sans connaissance préalable à propos de Guix ou même de l'empaquetage de logiciel. Je te montre de quelles ressources j'ai besoin et comment je les utilise. Ma méthode est axée sur la pratique. L'exécution des commandes rythme mes itérations, leurs retours guident le code que je produis et l'utilisation de ressources externes (documentation, code source, communauté).

À la fin de cette série, je devrais avoir empaqueté un logiciel libre simple : ac-geiser, une extension d'Emacs qui apporte un soupçon d'auto-complétion dans Geiser quand je code avec le langage Guile.

Historique :Empaqueter ac-geiser pour Guix (5)Empaqueter ac-geiser pour Guix (4)Empaqueter ac-geiser pour Guix (3)Empaqueter ac-geiser pour Guix (2)Empaqueter ac-geiser pour Guix (1)

L'idée ici est d'inclure la définition de mon paquet pour ac-geiser dans la distribution de Guix pour en faire bénéficier la communauté des Guixters ! Le paquet pourra ensuite être installer avec guix install emacs-ac-geiser.

Pour ce faire, la documentation donne quelques étapes à respecter que je complète grâce aux recommandations des Guixters :

  1. récupérer et utiliser la dernière version du dépôt Guix.
  2. ajouter ma définition au module emacs-xyz.
  3. Tester ma définition avec le linter de Guix.
  4. vérifier que ma définition est utilisable.
  5. tester la reproductibilité de la construction.
  6. tester la définition avec guix lint.
  7. créer le commit dans l'arborescence de Guix et créer un patch.
  8. envoyer le patch à guix-patches@gnu.org.

1. Récupérer et utiliser la dernière version du dépôt Guix.

Dans le répertoire Guix cloné dans le premier article de la série :

$ git pull
$ guix environment --pure guix --ad-hoc emacs
[dev]$ ./bootstrap && ./configure --localstatedir=/var && make

2. Ajouter ma définition au module emacs-xyz.

Toutes les définitions de paquet d'extension d'Emacs sont regroupées dans le fichier source du module emacs-xyz. Ma définition ne faisant pas exception, je l'y ajoute :

[dev]$ emacs gnu/packages/emacs-xyz.scm

Je n'ai pas remarqué d'ordre dans ce fichier source, donc je vais rajouter ma définition à la fin du fichier. Je pense à ajouter une ligne de copyright à mon nom.

3. Tester ma définition avec le linter de Guix.

guix lint va passer la définition au crible pour détecter certaines erreurs automatiquement. Voila ce que j'obtiens à la première passe :

[dev]$ ./pre-inst-env guix lint emacs-ac-geiser
;;; note: source file /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm
;;;       newer than compiled /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.go
gnu/packages/emacs-xyz.scm:21817:5: emacs-ac-geiser@0.1: the source file name should contain the package name
/home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm:21819:0: emacs-ac-geiser@0.1: tabulation on line 21819, column 0
/home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm:21820:0: emacs-ac-geiser@0.1: tabulation on line 21820, column 0
/home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm:21825:0: emacs-ac-geiser@0.1: tabulation on line 21825, column 0
fetching CVE database for 2020...]...

Il semble que le linter ait repéré quelques coquilles, notamment des tabulations à la place des espaces... J'édite ma définition pour corriger tout ça (je ne pourrais rien de plus pour le nom du fichier qui doit contenir le nom du paquet). Je vérifie à nouveau mes modifications :

[dev]$ ./pre-inst-env guix lint emacs-ac-geiser
;;; note: source file /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm
;;;       newer than compiled /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.go
gnu/packages/emacs-xyz.scm:21817:5: emacs-ac-geiser@0.1: the source file name should contain the package name

4. Vérifier que ma définition est utilisable.

Je dois à minima pouvoir construire le paquet :

[dev]$ ./pre-inst-env guix build emacs-ac-geiser
;;; note: source file /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm
;;;       newer than compiled /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.go
/gnu/store/hp2jli29jchkdi50klzydrxqk72r3n2w-emacs-ac-geiser-0.1

J'avais déjà construit ce paquet, le retour de cette commande aurait été plus long le cas échéant. Ensuite je vérifie que les commandes suivantes ne retournent ni erreurs, ni avertissements, ni bêtises.

Ici, guix show :

[dev]$ ./pre-inst-env guix show emacs-ac-geiser
;;; note: source file /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm
;;;       newer than compiled /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.go
name: emacs-ac-geiser
version: 0.1
outputs: out
systems: x86_64-linux i686-linux
dependencies: emacs-auto-complete@1.5.1 emacs-geiser@0.11.2
location: /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm:21813:2
homepage: https://github.com/xiaohanyu/ac-geiser
license: Modified BSD
synopsis: Auto-complete backend for geiser  
description: Provides one auto-complete source for Scheme projects using geiser.

Puis guix search :

[dev]$ ./pre-inst-env guix search emacs-ac-geiser
;;; note: source file /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm
;;;       newer than compiled /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.go
name: emacs-ac-geiser
version: 0.1
outputs: out
systems: x86_64-linux i686-linux
dependencies: emacs-auto-complete@1.5.1 emacs-geiser@0.11.2
location: /home/jeko/Workspace/guix/gnu/packages/emacs-xyz.scm:21813:2
homepage: https://github.com/xiaohanyu/ac-geiser
license: Modified BSD
synopsis: Auto-complete backend for geiser  
description: Provides one auto-complete source for Scheme projects using geiser.
relevance: 20

Et enfin guix edit :

[dev]$ ./pre-inst-env guix edit emacs-ac-geiser

Cette dernière commande m'ouvre Emacs à l'emplacement de ma définition dans le fichier source du module emacs-xyz. C'est validé !

5. Tester la reproductibilité de la construction

Cette partie est documentée dans la référence de guix build.

[dev]$ ./pre-inst-env guix build emacs-ac-geiser --no-grafts --check -K

Le retour est trop long pour être copié ici. Mais encore une fois, à la moindre erreur, avertissement, il faut corriger le souci.

6. Générer le patch de la modification

Voici la définition finale :

(define-public emacs-ac-geiser
  (package
    (name "emacs-ac-geiser")
    (version "0.1")
    (source
     (origin
       (uri (git-reference
             (url "https://github.com/xiaohanyu/ac-geiser.git")
             (commit "502d18a8a0bd4b5fdd495a99299ba2a632c5cd9a")))
       (method git-fetch)
       (sha256 (base32 "0h2kakb4f5hgzf5l2kpqngalcmc4402lkg1pvs88c8z4rqp2vfvz"))))
    (build-system emacs-build-system)
    (propagated-inputs `(("geiser" ,emacs-geiser)
                         ("auto-complete" ,emacs-auto-complete)))
    (synopsis "Auto-complete backend for geiser")
    (description "Provides one auto-complete source for Scheme projects using geiser.")
    (license license:bsd-3)
    (home-page "https://github.com/xiaohanyu/ac-geiser")))

Je commence par commiter mes modifications.

[dev]$ git add gnu/packages/emacs-xyz.scm 
[dev]$ git commit -m "gnu: Add emacs-ac-geiser.
> * gnu/packages/emacs-xyz.scm (emacs-ac-geiser): New variable.

Ensuite, je génère le patch :

[dev]$ git format-patch -n1
0001-gnu-Add-emacs-ac-geiser.patch

7. Envoyer le patch en pièce jointe par mail à guix-patches@gnu.org

Et voilà ! Maintenant on attend le retour des mainteneurs de Guix et si nécessaire, on modifie et on renvoie... Jusqu'à ce que le patch soit accepté !

Merci beaucoup d'avoir lu cet article !

N'hésites pas à me donner ton avis, proposer une idée d'amélioration, laisser un commentaire, ou poser une question via :E-mail: jeremy AT korwin-zmijowski DOT frMastodon: @jeko@framapiaf.orgPeertube: @jeko@video.tedomum.netTwitter: @JeremyKorwin Abonnes-toi pour ne pas manquer les prochains :articles via Mastodon @jeko@write.as et RSSscreencasts via Peertube jeko@video.tedomum.net et RSS

Et encore plus important, partages ce blog et dis à tes amis que c'est le meilleur blog de l'histoire du logiciel libre ! Sans dec'

#guix #package #français