hawser
Épinglez une stack de dépôts Git à un lockfile — pour qu’un coéquipier, un runner CI ou un auditeur extraie l’arborescence identique, partout. Un seul binaire. En Rust.
haw compose de nombreux dépôts Git indépendants en une seule stack reproductible. Un manifeste déclaratif (haw.toml) décrit les stacks et les dépôts qu’ils composent ; un lockfile committé (haw.lock) épingle chaque dépôt à une révision exacte — pour que n’importe quel coéquipier ou machine CI reconstruise l’arborescence identique au bit près. Pas de sous-modules, pas de HEAD détachées, pas de runtime Python — un seul binaire statique.
haw init haw.toml # déclarer les dépôts
haw sync # cloner chaque dépôt, écrire haw.lock (SHA exacts)
haw verify # barrière CI : code de sortie 3 si l'arborescence dérive du lockfile
Ceci est la documentation de référence pour hawser 0.1.7. Vous découvrez le projet ? Commencez par le cours Learn pour un parcours guidé et pratique ; utilisez les pages ci-dessous comme référence.
Au-delà du cœur
La composition reproductible (ci-dessus) est le fondement. Construites dessus, quatre capacités supplémentaires — un seul binaire :
- Composer, à grande échelle. Les stacks et les overlays composent les dépôts en variantes nommées. Clone superficiel (
--depth) et partiel (--filter=blob:none), ainsi qu’un magasin d’objets partagé via lesalternatesde git (--shared) — pas de liens symboliques, donc cela fonctionne sous Windows. - Orchestrer. Exécutez
build,test, ou n’importe quelle commande sur toute la flotte en parallèle (-j N) ;haw grepse diffuse sur chaque dépôt ;haw verifyest une barrière de dérive qui renvoie le code de sortie 3 pour la CI. - Collaborer. Une fonctionnalité = une branche répartie sur N dépôts, avec des PR/MR liées entre elles sur GitHub, GitLab et Bitbucket, un statut agrégé de relecture + CI, et
landpour fusionner dans l’ordre des dépendances. Plus une fusion collaborative parallèle (plan→resolve→cleanup). - Exploiter. Un cockpit TUI de style k9s (
hawsans argument) — une grille de flotte en direct que vous explorez pour le diff d’un dépôt, les vérifications d’une PR, ou la progression en direct d’une exécution CI, puis vous agissez au clavier. Filtre flou, marques + actions en lot, une vue problèmes uniquement, mises en évidence de la dérive, une barre de commande et six thèmes. - Gouverner. SBOM (CycloneDX + SPDX), provenance SLSA/in-toto, signatures cosign/minisign, hooks de cycle de vie, une barrière de secrets/hygiène, et des bundles
evidencepour la qualification.
L’étendre
haw <name> exécute haw-<name> depuis votre PATH — étendez la CLI sans forker. Les plugins sont des sous-processus qui parlent un contrat JSON (haw.plugin/1 en entrée, haw.plugin.report/1 en sortie), ils peuvent donc être écrits en Rust, Python, Go ou shell. Générez-les, découvrez-les et installez-les :
haw plugins new my-check --lang python # squelette exécutable
haw plugins list --remote # découvrir les plugins communautaires depuis l'index
haw plugins install aspice # installer un plugin officiel ou communautaire
Les schémas JSON publiés et de fins bindings (Python, Go) rendent cela trivial ; voir la liste soigneusement sélectionnée AWESOME-HAW-PLUGINS.
Distribuer et installer
haw est distribué sous forme d’un unique binaire statique. Installez-le via crates.io, Homebrew, Scoop, AUR, Nix, .deb/.rpm, Docker, ou une archive précompilée signée — chaque release comporte une somme de contrôle .sha256 et une signature cosign sans clé. Les artefacts de la flotte sont publiés vers des registres privés (Nexus, Artifactory, GitLab, Bitbucket) via haw publish.
cargo install hawser # depuis crates.io (canonique)
brew install nastwinns/tap/hawser # macOS / Linux (Homebrew)
curl -L … | tar xz # binaire musl statique précompilé
Sécurité
haw exécute du code déclaré dans le manifeste et des binaires de votre PATH — considérez les deux comme des entrées de confiance. Le crate est #![forbid(unsafe_code)], HTTPS passe uniquement par rustls, les actions sont épinglées par SHA, les releases sont signées par cosign, et cargo audit/cargo deny contrôlent chaque push. Lisez le modèle de confiance complet.
Essayez-le dans votre navigateur
La page d’accueil affiche le cockpit TUI en direct en WebAssembly — aucune installation requise : https://nastwinns.github.io/hawser/
Où aller ensuite
- Learn — le cours guidé et pratique, de zéro à une flotte gouvernée.
- Install — la matrice complète des canaux + vérification de signature + air-gap.
- Distribution — mettre en miroir les releases vers Nexus/Artifactory/GitLab/Bitbucket.
- Domains — comment la boucle s’applique à l’embarqué, aux microservices, au ML, à l’infra, au mobile.
- Architecture — organisation des crates, modèle de concurrence, abstraction de la forge.
- CLI design & TUI keymap — le lexique complet des verbes et les raccourcis clavier du cockpit.
- Extending — plugins, hooks, authentification et intégration CI/CD.
- Plugins — écrire et soumettre des plugins
haw-<name>. - Compliance — qualification de l’outil, SBOM/CRA, signature, RGPD.
- Security — le modèle de confiance : ce que
hawexécute, la confiance des plugins, les tokens.
Liens
- Dépôt : https://github.com/Nastwinns/hawser
- Essayez la TUI dans votre navigateur : https://nastwinns.github.io/hawser/
- README : le README du projet contient la matrice d’installation, les démos et le guide pas à pas du manifeste.