erplibre/script/todo/dev_tools.py
Mathieu Benoit 6c1d985686 [FIX] script todo : starship, URL corrigée, curl qui refuse le HTML
L'URL amont de starship pointait sur un chemin qui n'existe pas : le serveur
rend 404 avec une page HTML de 34 ko, que « curl -sS » écrit tout de même sur
sa sortie en rendant 0. Cette page arrivait donc sur l'entrée de « sh », qui
s'arrêtait sur « Syntax error » à sa deuxième ligne — un diagnostic qui ne dit
ni l'URL fautive ni que rien n'a été posé. « -f » fait taire curl et rendre 22
sur toute réponse d'erreur ; les quatre autres installateurs amont du fichier
l'utilisaient déjà.

Vérifié : le « --help » de l'installateur est atteint, sans rien installer.

--- EN ---

The upstream starship URL pointed at a path that does not exist: the server
answers 404 with a 34 kB HTML page, which `curl -sS` writes to its output
anyway while exiting 0. That page reached the input of `sh`, which stopped on
`Syntax error` at its second line — a diagnosis naming neither the wrong URL
nor the fact that nothing was installed. `-f` makes curl write nothing and
return 22 on any error response; the four other upstream installers in the
file already used it.

Checked: the installer's `--help` is reached, with nothing installed.

Assisted-by: Claude Opus 5
2026-09-04 00:38:29 -04:00

64 lines
2.7 KiB
Python

#!/usr/bin/env python3
# © 2026 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
"""Installateurs amont des outils de développement.
Les mêmes outils se posent à DEUX endroits : sur l'hôte par le menu Shell,
et dans une VM par le déploiement QEMU. Une seule table les décrit, parce
que deux copies d'une URL dérivent dès que l'amont en change une, et que la
seconde copie est celle qu'on oublie.
Chacun est un installateur amont plutôt qu'un paquet : aucun n'est présent
dans les dépôts des quatre familles que supporte ERPLibre, et celui qui l'est
y traîne d'une version.
"""
# Proxy CLI qui réduit la consommation de tokens des assistants.
RTK_UPSTREAM = (
"curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/"
"refs/heads/master/install.sh | sh"
)
# L'installateur amont pose un binaire statique. Il sert de recours parce
# que le paquet manque d'une partie des dépôts des plateformes supportées.
STARSHIP_URL = "https://starship.rs/install.sh"
# « -f » n'est pas un ornement quand la sortie part dans un shell : sans lui,
# curl écrit le CORPS d'une réponse d'erreur et sort avec 0, si bien qu'une
# page HTML de 34 ko arrive sur l'entrée de « sh » et s'y interprète comme
# un script. Le diagnostic obtenu est alors « Syntax error » sur une ligne du
# HTML, qui ne dit ni que l'URL est fautive ni que rien n'a été installé.
# Avec « -f », curl n'écrit rien et rend 22. « -L » suit une redirection,
# qu'un projet amont pose sans prévenir.
STARSHIP_UPSTREAM = f"curl -fsSL {STARSHIP_URL} | sh"
# Sans terminal — une pose par SSH dans une VM — l'installateur demande une
# confirmation que personne ne donnera. « -y » la donne d'avance.
STARSHIP_UPSTREAM_YES = f"curl -fsSL {STARSHIP_URL} | sh -s -- -y"
# Ce que chaque shell écrit pour lancer starship. La ligne va en FIN de
# fichier : starship compose le prompt et doit passer après tout ce qui y
# touche.
STARSHIP_LINE = {
"bash": 'eval "$(starship init bash)"',
"zsh": 'eval "$(starship init zsh)"',
"fish": "starship init fish | source",
}
# Les assistants posés par un installateur amont : le nom du binaire mène
# à (commande, répertoire d'installation). Le répertoire sert à garantir
# le PATH — un binaire posé hors des chemins du shell reste introuvable.
AGENTS = {
"claude": (
"curl -fsSL https://claude.ai/install.sh | bash",
"~/.local/bin",
),
"opencode": (
"curl -fsSL https://opencode.ai/install | bash",
"~/.opencode/bin",
),
}
# L'agent posé quand rien n'est choisi. Le premier de la table ferait
# dépendre le défaut de l'ordre d'écriture d'un dictionnaire.
AGENT_DEFAUT = "claude"