DC-5886: Construire le PATH asdf avec $HOME au lieu d'un tilde - #3
Merged
Merged
Conversation
SSHKit exports the environment inside double quotes (PATH="..."), where a shell never expands a tilde. With the default asdf_path of ~/.asdf, the two entries map_bins prepends pointed at a literal ~/.asdf directory that does not exist, so no asdf shim was ever reachable and the asdf nodejs was not picked up on deploy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Le problème
Sur les 11 apps Rails de DC-5886, le nodejs d'asdf n'est pas pris en compte au déploiement, alors que
config/deploy.rbdéclare pourtantset :asdf_tools, %w[ruby nodejs].asdf:map_binsconstruit bien le PATH et le pose surSSHKit.config.default_env— cette partie fonctionne, et rien ne l'écrase. Mais SSHKit exporte l'environnement entre guillemets doubles, devant chaque commande distante :Or un shell ne développe pas un tilde entre guillemets. Avec la valeur par défaut d'
asdf_path(~/.asdf), les deux entrées ajoutées en tête de PATH désignent un répertoire littéral~/.asdf/…qui n'existe pas : aucun shim n'est atteignable.$HOME, lui, est bien développé entre guillemets.Ce qui change
map_binsdéveloppe le tilde de tête en$HOMEpour construire le PATH :asdf_pathlui-même n'est pas touché : les autres usages (within,test -d,command_map[:asdf]) continuent de recevoir la valeur d'origine. C'est volontaire —withinpasse parshellescape_except_tilde, qui échappe un$mais laisse un~intact : unasdf_pathréglé sur$HOME/.asdfproduiraitcd \$HOME/.asdfet casseraitasdf:setup. Le tilde reste donc la bonne valeur pourasdf_path, et seul le PATH exporté en est débarrassé. Unasdf_pathabsolu est utilisé tel quel.Tests
test/capistrano/test_map_bins.rbcharge la tâche dans une configuration Capistrano minimale, l'invoque, puis lit le PATH tel que SSHKit l'écrit dans la commande (SSHKit::Command#to_command) plutôt que la variable interne — c'est la forme qui compte, puisque le bug est un défaut de développement du shell :pathdéjà posé par l'app est conservé derrière les entrées asdf ;asdf_pathabsolu est laissé tel quel.Les deux premiers échouent sans le correctif (
"~/.asdf/shims:~/.asdf/bin:$PATH"au lieu de"$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH"), le troisième documente le comportement à préserver.bundle exec rake: 4 runs, 0 échec,standardrbsans offense.Suite
Une fois cette version publiée sur gems.codeur.com, les 11 apps de DC-5886 bumpent
capistrano-asdfet retirent la lignepath:ajoutée en contournement dans leurset :default_env(voir facture#1324, où le contournement a été trouvé). La vérification définitive ne peut se faire qu'au premier déploiement réel.🤖 Generated with Claude Code