Complet vs affected · clés de cache · fan-out lecture seule · barrière en six étapes
Les équipes qui font tourner un grand monorepo sur plusieurs Mac Mesh distants perdent la CI à cause de dérives de clés de cache, de graphes affected désalignés sur les labels Runner et de caches à moitié écrits. Cet article propose une matrice build complet, affected, nœud lourd dédié, des frontières d’entrées reproductibles, un fan-out en lecture seule et une barrière en six étapes. À lire avec fan-out d’artefacts et Merge Queue.
L’affected dépend de l’alignement du graphe de changements, du fichier de verrouillage et de l’empreinte toolchain. Mélanger sessions interactives et jobs batch sur le même préfixe introduit des dépendances fantômes qui corrompent les clés.
Cache et artefacts couvrent les octets ; ici on traite la taille du graphe et les déclencheurs.
Dérive graphe-label : des labels Runner différents donnent des racines workspace différentes.
Lockfile absent des clés : le résolveur change mais l’ancien tarball reste hit.
Pas d’empreinte toolchain : petit écart Xcode absent du manifeste.
Fan-out mélangé : des lecteurs écrivent encore dans le préfixe cache.
Pas de retour complet : codegen ou noyaux partagés changent mais seul l’affected reste forcé.
Axes ciblant un monorepo sur un pool Mac distant multi-régions.
| Axe | Complet d’abord | Affected d’abord | Split lourd |
|---|---|---|---|
| Type de changement | Codegen, scripts de build, surfaces natives partagées | UI et texte dans un seul paquet | Batch nocturne vs PR diurnes sur le même pool |
| Signaux | deux échecs affected ou intégration flaky | graphe stable, vérifs lock ok | CPU vide mais temps mural élevé |
| Clé de cache | poids toolchain élevé, pause de réutilisation | hash lock + hash changement + OS Runner | préfixe lourd isolé, miroir lecture seule |
| Régions | une génération manifeste avant compile | retard miroir ok, pas d’écriture vers préfixe principal | primaire écrit, satellites lisent |
| Retour complet | avant premier vert après merge protégé | complet hebdo de contrôle | semaine complète après saut Xcode majeur |
Geler les entrées reproductibles avant d’optimiser l’affected.
SSH de pool partagé selon ce guide. Octets inter-océan : baux et manifeste de l’article artefacts.
Triplet d’entrée : commit, digest lock, empreinte xcodebuild dans l’en-tête.
Graphe unique : parser sur label fixe, publier la liste des paquets affectés en artefact.
Seuils complets : codegen, noyaux partagés, liste toolchain → court-circuit complet + code audit.
Écriture primaire : seul le builder principal écrit ; satellites read-only.
Vérif fan-out : double champ hash+taille avant bascule de pointeur.
Retry/rollback : réseau en backoff ; checksum → incident et commit suivant forcé en complet.
CACHE_KEY="${CI_COMMIT_SHORT_SHA}:${LOCKFILE_SHA256}:$(xcodebuild -version | shasum -a 256 | cut -c1-12)"
export TURBO_REMOTE_CACHE_SIGNATURE="${CACHE_KEY}"
echo "affected=$(npx turbo run build --dry=json | jq -r '.packages | length')" > "${CI_PROJECT_DIR}/affected.meta"
Note : Turbo peut être remplacé par Nx/Bazel ; l’essentiel est un graphe autoritaire et une clé monotone.
Deux PR sur un paquet partagé entrelacent les préfixes. Seul le primaire CI écrit.
Combiner avec verrous de siège et enveloppes de chaîne observable.
Attention : pas de fan-out multi-région avant fermeture des droits d’écriture.
Écrivain unique : un bail actif par préfixe.
Règle lecteur : compile seulement après génération manifeste current.
Portail humain : deux checksums consécutifs → geler l’affected jusqu’à complet vert signé.
Valeurs de départ de planification, pas un SLA.
Affected nocturne et indexation IDE sur le même disque rendent le CPU trompeur.
| Signal équipe | Posture de départ | Fan-out |
|---|---|---|
| Petite équipe | région unique + affected local | faible fan-out |
| PR multi-régions | primaire écrit, satellites lisent | couplé rsync/objet |
| Agents nocturnes | isolier nœud lourd du pool interactif | évite épuisement clés |
Les portables personnels échouent ensemble sur veille, verrouillage écran et uplink instable.
Pour des nœuds contractuels et une bande passante auditable, la location cloud Mac Mini VpsMesh est souvent le meilleur choix : taux de hit et profondeur de file reviewables ensemble.
Codegen, scripts, surfaces natives partagées, upgrades toolchain, avant premier vert après merge protégé. Voir matrice artefacts.
Digest commit/graph, hash lockfile, empreinte toolchain, couche OS runner, génération et id de bail en fan-out. Régions sur la page commander.
Centre d’aide pour accès distant et réseau, tarifs avant choix.