Aller au contenu

Mise à jour vers Asdf-VM 0.16

J’utilise asdf depuis longtemps et je dois dire que c’est un outil que j’adore. Il me permet de gérer facilement plusieurs versions de langages et d’outils de développement sans jamais me compliquer la vie. Avec la sortie de la version 0.16, une mise à jour majeure a été introduite : réécriture complète en Go, nouveaux comportements et suppression de certaines commandes. Je vous propose un tour d’horizon des nouveautés et de la procédure à suivre pour une mise à jour sans encombre.

Réécriture de asdf-VM en Go

La version 0.16 marque un tournant majeur pour asdf : l’outil a été entièrement réécrit en Go, alors qu’il était historiquement basé sur des scripts Bash. Ce changement peut sembler anodin, mais il apporte des avantages considérables :

  • Performances améliorées : Go étant un langage compilé, asdf devient plus rapide et réactif.
  • Maintenance simplifiée : Le code est plus structuré, facilitant les évolutions futures et la contribution de la communauté.

J’ai tout de suite remarqué que certaines opérations sont nettement plus fluides, notamment l’installation et la gestion des plugins. Avant, certaines commandes mettaient quelques secondes à s’exécuter, maintenant tout est quasi-instantané.

Mais attention, cette refonte a aussi des implications pratiques : les utilisateurs doivent maintenant installer un binaire au lieu de simplement cloner un dépôt Git. Voyons comment procéder à cette mise à jour sans encombre.

Procédure de mise à jour

Pour passer à la version 0.16 d’asdf sans perdre vos configurations, voici la procédure recommandée. Contrairement aux mises à jour précédentes, il ne suffit plus de mettre à jour le dépôt Git, car asdf est maintenant distribué sous forme de binaire compilé.

La première étape consiste à télécharger la version 0.16 depuis la page des releases GitHub. Sélectionnez le fichier correspondant à votre système d’exploitation et placez-le dans un répertoire accessible via votre $PATH.

Exemple pour Linux :

Terminal window
wget https://github.com/asdf-vm/asdf/releases/download/v0.16.2/asdf-v0.16.2-linux-amd64.tar.gz
tar -xvzf asdf-v0.16.2-linux-amd64.tar.gz -C ${HOME}/.local/bin
chmod +x ${HOME}/.local/bin/asdf
rm ~/.asdf/bin/asdf # Supprimez l'ancien executable

Enlevez le path de l’ancienne version d’asdf de votre $PATH et ajoutez le nouveau path :

Terminal window
# . $HOME/.asdf/asdf.sh
fpath=(${ASDF_DIR}/completions $HOME/.zsh/completions $fpath)
export PATH=${HOME}/.local/bin:$PATH

Si vous utilisiez une installation existante, asdf stockait vos données dans ~/.asdf. Avec la nouvelle version, il est possible d’indiquer un répertoire spécifique pour éviter de perdre les configurations existantes :

Terminal window
export ASDF_DATA_DIR="$HOME/.asdf"

Vérifiez qu cette ligne à votre .bashrc, .zshrc ou autre fichier de configuration shell pour qu’elle soit chargée à chaque session.

La nouvelle version d’asdf nécessite que le dossier shims soit en tête de votre PATH. Assurez-vous que cette ligne est bien présente dans votre fichier de configuration shell :

Terminal window
export PATH="$ASDF_DATA_DIR/shims:$PATH"

Puis rechargez votre shell :

Terminal window
source ~/.bashrc # ou source ~/.zshrc selon votre configuration

Une fois la mise à jour effectuée, assurez-vous qu’asdf est bien installé et fonctionne correctement avec :

Terminal window
asdf version
version: v0.16.2
MANAGE PLUGINS
asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
add a Git repo as a plugin by
specifying the name and repo url
asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
git urls and git-ref
asdf plugin list all List plugins registered on asdf-plugins
repository with URLs
asdf plugin remove <name> Remove plugin and package versions
asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
default branch or a particular git-ref
asdf plugin update --all Update all plugins to latest commit on
default branch
MANAGE TOOLS
asdf current Display current version set or being
used for all packages
asdf current <name> Display current version set or being
used for package
asdf help <name> [<version>] Output documentation for plugin and tool
asdf install Install all the package versions listed
in the .tool-versions file
asdf install <name> Install one tool at the version
specified in the .tool-versions file
asdf install <name> <version> Install a specific version of a package
asdf install <name> latest[:<version>] Install the latest stable version of a
package, or with optional version,
install the latest stable version that
begins with the given string
asdf latest <name> [<version>] Show latest stable version of a package
asdf latest --all Show latest stable version of all the
packages and if they are installed
asdf list <name> [version] List installed versions of a package and
optionally filter the versions
asdf list all <name> [<version>] List all versions of a package and
optionally filter the returned versions
asdf set [-u] [-p] <name> <versions...> Set a tool version in a .tool-version in
the current directory, or a parent
directory.
asdf uninstall <name> <version> Remove a specific version of a package
asdf where <name> [<version>] Display install path for an installed
or current version
asdf which <command> Display the path to an executable
UTILS
asdf exec <command> [args...] Executes the command shim for current version
asdf env <command> [util] Runs util (default: `env`) inside the
environment used for command shim execution.
asdf info Print OS, Shell and ASDF debug information.
asdf version Print the currently installed version of ASDF
asdf reshim <name> <version> Recreate shims for version of a package
asdf shimversions <command> List the plugins and versions that
provide a command
RESOURCES
GitHub: https://github.com/asdf-vm/asdf
Docs: https://asdf-vm.com
PLUGIN direnv
asdf direnv _asdf_cached_envrc.bash
asdf direnv envrc.bash
asdf direnv hook-asdf.bash
asdf direnv install.bash
asdf direnv local.bash
asdf direnv setup.bash
asdf direnv shell.bash
"Late but latest"
-- Rajinikanth

Si la commande renvoie la version 0.16.0, la mise à jour a été réussie !

Il faut également par sécurité mettre à jour les shims :

Terminal window
asdf reshim

En suivant ces étapes, vous bénéficiez de la nouvelle architecture en Go tout en conservant vos plugins et versions installées. Maintenant que votre asdf est à jour, voyons quels sont les changements majeurs à prendre en compte.

Changements majeurs de la version 0.16

Avec la version 0.16, plusieurs modifications importantes ont été introduites. Certaines commandes ont été renommées, d’autres supprimées, et il y a quelques ajustements à connaître pour éviter les surprises.

Renommage des commandes avec des tirets

L’un des changements majeurs est la suppression des tirets dans certaines commandes. Voici la correspondance entre les anciennes et nouvelles versions :

Ancienne commandeNouvelle commande
asdf plugin-add <plugin>asdf plugin add <plugin>
asdf plugin-remove <plugin>asdf plugin remove <plugin>
asdf plugin-listasdf plugin list

Exemple d’utilisation :

Avant :

Terminal window
asdf plugin-add nodejs

Après :

Terminal window
asdf plugin add nodejs

Fusion de global et local en set

Les commandes pour définir une version globale ou locale d’un outil ont été remplacées par une seule commande asdf set avec des options --parent et --home.

Ancienne commandeNouvelle commande
asdf global <outil> <version>asdf set <outil> <version> --home
asdf local <outil> <version>asdf set <outil> <version> --parent

Exemple d’utilisation :

Avant :

Terminal window
asdf global nodejs 18.0.0

Après :

Terminal window
asdf set nodejs 18.0.0 --home

Suppression de la mise à jour automatique

L’ancienne commande permettant de mettre à jour asdf lui-même a été supprimée :

Ancienne commandeNouvelle méthode
asdf updateMise à jour manuelle via téléchargement du binaire ou gestionnaire de paquets

Exemple d’alternative :

  • Pour mettre à jour manuellement, téléchargez le nouveau binaire depuis GitHub.

  • Si vous utilisez Homebrew (macOS), vous pouvez faire :

    Terminal window
    brew upgrade asdf

Changements divers et améliorations internes

Bien que moins visibles, d’autres ajustements ont été effectués :

  • Les erreurs et messages d’aide sont plus explicites
  • L’installation des plugins est plus rapide
  • Certains alias et options obsolètes ont été retirés

En résumé, si vous utilisez asdf dans des scripts, pensez à mettre à jour vos commandes pour éviter des erreurs liées à ces changements. Dans le prochain chapitre, je vous donne mon avis sur cette mise à jour et quelques recommandations.

Conclusion

Personnellement, j’apprécie cette nouvelle version, car elle apporte un gain de fluidité notable dans l’utilisation quotidienne d’asdf. Cependant, il faut prendre le temps d’adapter ses habitudes, notamment avec la suppression des tirets dans les commandes et la fusion des commandes global et local en set.

Si vous utilisez asdf dans des scripts d’automatisation, je vous recommande vivement de vérifier et modifier vos commandes pour éviter toute erreur. Pensez également à mettre à jour votre $PATH et à bien configurer ASDF_DATA_DIR pour assurer une migration en douceur.

Pour ceux qui découvrent asdf, je vous invite à l’essayer sans plus tarder. C’est un outil puissant et polyvalent qui vous fera gagner un temps précieux dans la gestion de vos environnements de développement.