Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 les alternates de 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 grep se diffuse sur chaque dépôt ; haw verify est 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 land pour fusionner dans l’ordre des dépendances. Plus une fusion collaborative parallèle (planresolvecleanup).
  • Exploiter. Un cockpit TUI de style k9s (haw sans 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 evidence pour 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 haw exécute, la confiance des plugins, les tokens.

Liens