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.
Un seul binaire · en Rust · v0.1.7
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.
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.
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.
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.
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.
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.
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.
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/.
Un cours guidé, de zéro à opérationnel. Neuf chapitres courts — à lire dans l'ordre.
haw, et découvre le cockpit.
haw.toml.
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.
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.
Une fonctionnalité couvrant N services plus un proto/lib partagé — branchés, en PR, et landés ensemble.
Dépôt de modèle + dépôt de pipeline de données + infra de serving, épinglés comme une seule baseline reproductible.
Dépôts Terraform, Helm et modules réutilisables composés et versionnés comme un tout.
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. »
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.
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.
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.
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.
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.
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.
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.
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.
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.
Tout, publié sous forme de mdBook dans /hawser/docs/fr/.
Le cours d'apprentissage guidé, chapitre par chapitre.
Manifestes exécutables par domaine + vraies flottes embarquées à compiler.
Cross-compile Docker, QEMU/FreeRTOS, câblage tresos/Vector/IAR.
Le lexique complet des verbes et le keymap du cockpit.
Écrire des plugins haw-<nom> et le contrat de dispatch.
Plugins, hooks, auth, et intégration CI/CD.
Organisation des crates, modèle de concurrence, abstraction des forges, flux de données.
Comment la boucle manifeste/lock/changeset se projette sur chaque domaine.
Matrice d'installation complète + vérification des signatures.
Canaux de release et packaging.
Qualification d'outil, SBOM/CRA, crypto/signature, RGPD.
Le modèle de confiance — ce que haw exécute, la confiance des plugins, les tokens.
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.