Un seul binaire · en Rust · v0.1.7

Ton produit vit dans 10 dépôts.
Quels commits vont ensemble ?

haw épingle toute ta stack multi-dépôts dans un seul lockfile — pour que toi, ta CI et tes coéquipiers récupériez l'arbre identique, à chaque fois. Un seul binaire, en Rust.

Pas de submodules · pas de HEAD détachées · pas de symlinks · pas de runtime Python.

Qu'est-ce que hawser

haw est une plateforme multi-dépôts pour les équipes qui livrent un produit réparti sur de nombreux dépôts Git. Cinq capacités, un seul binaire — chacune résolvant une facette du problème multi-dépôts.

🧱

Composer

Une stack reproductible à partir de plusieurs dépôts : un manifeste haw.toml et un haw.lock commité épinglent chaque dépôt sur un SHA exact. Stacks & overlays, clone superficiel et partiel.

⚙️

Orchestrer

Exécute le travail sur toute la flotte : run/build/test en parallèle, un grep à l'échelle de la flotte, et une passerelle verify qui sort en 3 en cas de dérive — à brancher directement dans la CI.

🔀

Collaborer

Un flux de changements inter-dépôts, inter-forges : une fonctionnalité = une branche sur N dépôts, avec des PR/MR liées sur GitHub, GitLab & Bitbucket, et land pour merger dans l'ordre des dépendances.

🚁

Piloter

Un cockpit TUI façon k9s (simplement haw) : lire → creuser → agir. Grille de flotte en direct, checks de PR, avancement CI — puis merger, approuver ou checkout au clavier.

🛡️

Gouverner

Chaîne d'approvisionnement & audit, intégrés : plugins, SBOM (CycloneDX + SPDX), provenance SLSA/in-toto, signature cosign/minisign, et bundles evidence pour la qualification.

Ce n'est pas un wrapper git. C'est la couche au-dessus de git : le manifeste, le lockfile, le build/test/CI à l'échelle de la flotte, le flux de changements inter-forges, et la piste d'audit.

Démarrage rapide

Trois commandes, de l'installation au cockpit.

# installe le binaire unique
$ cargo install hawser
# clone chaque dépôt, écrit haw.lock
$ haw sync
# ouvre le cockpit
$ haw

Nouveau ici ? Lance le cours guidé ci-dessous, ou explore des manifestes exécutables dans examples/.

Apprendre hawser

Un cours guidé, de zéro à opérationnel. Neuf chapitres courts — à lire dans l'ordre.

  1. 00 Qu'est-ce que hawserLe problème, le modèle, et où haw se place au-dessus de git.
  2. 01 Installation & premier lancementRécupère le binaire, lance haw, et découvre le cockpit.
  3. 02 Le manifesteDéclare les dépôts et compose-les en stacks avec haw.toml.
  4. 03 Sync & le lockfileÉpingle chaque dépôt sur un SHA exact pour un arbre reproductible.
  5. 04 Le cockpit TUILire → creuser → agir sur toute la flotte, au clavier d'abord.
  6. 05 Changesets inter-dépôtsUne fonctionnalité, une branche sur N dépôts, PR/MR liées.
  7. 06 Compiler, tester & vérifierExécute la flotte en parallèle et bloque la dérive en CI.
  8. 07 Passer en productionGouvernance, signature, evidence, et intégration CI/CD.
  9. 08 Écrire un plugin (MCP pour Claude)Livre un plugin haw qui fait aussi office de serveur MCP pour que Claude rédige tes commits & PR.
Commencer le cours →

Pourquoi hawser · pour qui

Répartir un produit sur plusieurs dépôts est courant — et indépendant du domaine. Le manifeste, le lockfile, le flux de changesets, le build/test de la flotte et les hooks de gouvernance sont les mêmes dans chaque domaine ; seuls les dépôts et les commandes changent.

Embarqué & automobile

HAL/BSP/MCAL partagés et réutilisés sur de nombreux ECU ; dépôts de config AUTOSAR/ARXML épinglés à côté du code.

Microservices backend

Une fonctionnalité couvrant N services plus un proto/lib partagé — branchés, en PR, et landés ensemble.

Plateformes ML / data

Dépôt de modèle + dépôt de pipeline de données + infra de serving, épinglés comme une seule baseline reproductible.

Plateforme / infra

Dépôts Terraform, Helm et modules réutilisables composés et versionnés comme un tout.

Mobile

Un dépôt d'app et son ou ses dépôts SDK, modifiés de concert dans un seul changeset.

« Ce n'est pas un wrapper git. haw orchestre Git et les API des forges — il ne réimplémente pas le moteur de merge de Git, ne remplace pas une forge, ni ta toolchain. »

Une alternative aux git submodules — et un orchestrateur de flotte

Si tu gères plusieurs dépôts git et qu'il te faut un build multi-dépôts reproductible, les submodules et les scripts maison montrent vite leurs limites. haw épingle chaque dépôt à un SHA exact dans un seul lockfile, puis build, teste et livre les changements sur toute la flotte.

vs git submodules

Pas de HEAD détachée, pas de .gitmodules fragile, pas de surprises de checkout imbriqué. Chaque dépôt reste un clone git autonome ; la reproductibilité vient de haw.lock.

vs scripts de clone maison

Fini le bash qui clone N dépôts. Un manifeste déclare la stack ; haw sync écrit les SHAs exacts pour que toi, la CI et l'équipe ayez l'arbre identique.

vs un monorepo

Garde des dépôts, historiques et droits d'accès indépendants — obtiens une seule version cohérente sans tout fusionner dans un même arbre.

+ orchestration de flotte

Au-delà de la composition : haw build / haw test en parallèle sur chaque dépôt, et pull/merge requests cross-repo comme un seul changeset.

FAQ

Quelle alternative aux git submodules ?

hawser. Il épingle plusieurs dépôts git à des SHAs exacts dans un seul lockfile, sans la douleur des HEAD détachées et des checkouts imbriqués — un binaire statique, pas de Python.

Comment gérer plusieurs dépôts git ?

Déclare-les dans un manifeste haw.toml, lance haw sync pour cloner et épingler chaque dépôt, puis pilote builds, tests et changements cross-repo depuis un cockpit TUI.

Comment rendre un build multi-dépôts reproductible ?

haw sync écrit haw.lock avec le SHA de commit exact de chaque dépôt, pour que toute machine récupère l'arbre identique — reproductible par construction.

hawser vs git submodules — la différence ?

Les submodules imbriquent des pointeurs épinglés dans un dépôt et détachent les HEAD. hawser garde chaque dépôt autonome, ajoute un lockfile partagé, et empile build/test parallèle plus flux de PR cross-repo par-dessus.

Documentation

Tout, publié sous forme de mdBook dans /hawser/docs/fr/.

Prise en main →

Le cours d'apprentissage guidé, chapitre par chapitre.

Exemples →

Manifestes exécutables par domaine + vraies flottes embarquées à compiler.

Recettes d'intégration →

Cross-compile Docker, QEMU/FreeRTOS, câblage tresos/Vector/IAR.

CLI & keymap TUI →

Le lexique complet des verbes et le keymap du cockpit.

Plugins →

Écrire des plugins haw-<nom> et le contrat de dispatch.

Étendre →

Plugins, hooks, auth, et intégration CI/CD.

Architecture →

Organisation des crates, modèle de concurrence, abstraction des forges, flux de données.

Domaines →

Comment la boucle manifeste/lock/changeset se projette sur chaque domaine.

Installation →

Matrice d'installation complète + vérification des signatures.

Distribution →

Canaux de release et packaging.

Conformité →

Qualification d'outil, SBOM/CRA, crypto/signature, RGPD.

Sécurité →

Le modèle de confiance — ce que haw exécute, la confiance des plugins, les tokens.

Installer

Choisis un gestionnaire de paquets — tous installent le même binaire haw v0.1.3.

# Rust / crates.io (canonique)
$ cargo install hawser
# macOS + Linux (Homebrew)
$ brew install nastwinns/tap/hawser
# Windows (Scoop)
$ scoop bucket add nastwinns https://github.com/Nastwinns/scoop-bucket
$ scoop install hawser
# Entièrement statique — pas de glibc, pas de runtime ; idéal serveurs, conteneurs, air-gap
$ curl -sSL https://github.com/Nastwinns/hawser/releases/download/v0.1.3/\
haw-0.1.3-x86_64-unknown-linux-musl.tar.gz | tar xz \
  && sudo install haw /usr/local/bin/

Chaque release est signée (cosign .sig/.pem + .sha256). Matrice complète & vérification : docs/INSTALL.