ASDF est un gestionnaire de version pour les langages de programmation. C'est un peu comme RVM pour Ruby ou NVM pour Node, mais il prend également en charge Erlang, Elixir, Haskel, Ocaml, PHP, Python, Rust et de nombreux autres langages.
ASDF ne demande que deux dépendances et si vous êtes développeur elles sont forcément déjà installées sur votre poste. Il s’agit de curl et git, donc il suffit juste de les installer.
Pour commencer il vous cloner le projet dans votre Home Directory :
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch release-v0.10.0
Il faut ensuite ajouter ces lignes dans votre fichier .bashrc ou .zshrc :
. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
Si vous utilisez zsh, vous pouvez aussi ajouter ses lignes pour activer l'auto-completion :
# append completions to fpath
fpath=(${ASDF_DIR}/completions $fpath)
# initialise completions with ZSH's compinit
autoload -Uz compinit && compinit
Pour démarrer bien sûr il suffit de taper la commande asdf --help, mais je vais vous expliquer le fonctionnement avant.
Lorsque vous installez asdf, en fait vous ne pouvez pas installer d’outils. Il faut dans un premier temps ajouter des plugins. Pour obtenir la liste des plugins disponibles, il suffit de taper la commande asdf plugin list all |more Pourquoi ai-je mis un |more? Tout simplement parce que la liste retournée donne juste le vertige. Difficile ne pas trouver votre bonheur.
Je tiens tout de même à préciser que cette liste n’est pas exhaustive et que parfois certains plugins ne fonctionnent pas correctement. Mais attention certains plugins nécessitent la présence de certaines dépendances, donc en cas de problème le mieux est de se rendre sur la page du projet de ce plugin et de lire sa documentation.
Heureusement il existe parfois plusieurs versions du même plugin (il faut fouiller sur github), et on peut aussi développer ses propres plugins.
Maintenant que nous avons la liste des plugins voyons comment en installer. La commande pour installer un plugin est :
asdf plugin add <nom de votre choix> <repository du plugin>
Par exemple pour installer direnv :
asdf plugin-list-all| grep -i direnv
direnv https://github.com/asdf-community/asdf-direnv.git
asdf plugin add direnv https://github.com/asdf-community/asdf-direnv.git
Pourquoi je conseille d’ajouter le lien, alors qu’on pourrait simplement utiliser le nom. Tout simplement parce que vous pourrez installer d’autres versions d’un plugin si celui par défaut ne vous donne pas satisfaction.
Que s’est-il passé ? En fait dans le répertoire $HOME/.asdf* asdf à cloner le projet dans le répertoire plugins. Et l’outil n’est toujours pas installé !
direnv
-bash: direnv : commande introuvable
Bon nous allons pouvoir installer notre outil direnv. Je vous rappelle qu’il est possible d’installer plusieurs versions d’un même outil et de configurer la version par répertoire. Voyons cela en détail. Pour afficher la liste des versions disponibles, il suffit d’utiliser la commande :
asdf list all <nom du plugin>
Pour notre exemple cela donne :
asdf list all direnv
...
2.26.0
2.27.0
2.28.0
2.29.0
2.30.0
2.30.1
2.30.2
2.30.3
Pour installer la dernière version, si le plugin est bien écrit, il suffit d’utiliser la commande :
asdf install <nom du plugin> latest
Ce qui donne :
asdf install direnv latest
∗ Downloading and installing direnv...
The installation was successful!
Voyons si nous pouvons utiliser notre outil :
direnv
No version is set for command direnv
Consider adding one of the following versions in your config file at /root/.asdf/.tool-versions
direnv 2.30.3
Toujours pas. Il faut comme indiqué ajouter une ligne au fichier de configuration se trouvant dans le répertoire $HOME/.asdf ou dans directement dans la home directory. Cela peut aussi se faire avec la commande :
asdf global <nom du plugin> <version|latest>
Pour notre cas :
asdf global direnv latest
cat ~/.tool-versions
direnv 2.30.3
Maintenant on peut utiliser direnv :
direnv
direnv version
2.30.3
Maintenant vous voulez pouvoir installer votre outil avec une version précise dans un répertoire. Nous allons utiliser cette fois la commande :
asdf local <nom du plugin> <version|latest>
Il faut au préalable installer la version ! :
mkdir test
cd test
asdf install direnv 2.26.0
asdf local direnv 2.26.0
direnv version
2.26.0
ls -alrt
total 12
-rw-r--r--. 1 root root 14 Feb 11 09:45 .tool-versions
drwxr-xr-x. 2 root root 28 Feb 11 09:45 .
drwx------. 51 root root 4096 Feb 11 09:45 ..
cat .tool-versions
direnv 2.26.0
Pour revenir à une version standard :
asdf local <nom du plugin> system
cat .tool-versions
direnv system
Pour la mise à jour vers la dernière release stable, asdf intègre son propre mécanisme d’update :
asdf update
Pour lister les plugins :
asdf plugin list --urls
direnv https://github.com/asdf-community/asdf-direnv.git
Mettre à jour tous les plugins :
asdf plugin update --all
Mettre à jour un plugin en particulié:
asdf plugin update <nom du plugin>
Désinstaller une version d’un outil :
asdf uninstall <nom du plugin> <version>
Désinstaller un plugin :
asdf plugin remove <nom du plugin>
Asdf est un superbe outil et il existe des outils qui ne sont pas encore géré. Donc pourquoi pas contribuer ?
Asdf est très bel outil, qui va vous permettre de rendre même vos projets idempotent. C’est-à-dire qu’à tout moment, vous êtes sûr de construire vos projets avec des versions précises des outils utilisés.