En 2026, une CI Mac distant avec Nix Flake impose de trancher où tire-t-on les binaires (store chaud, substituter ou cache maison), comment accorder confiance (trusted-public-keyssubstituters) et combien paralléliser sans saturer le SSD partagé. Matrice, nix.conf copiable, commandes flake.lock, retry et seuils disque. Hors Nix : GHCR & registry, FAQ disque, accueil (sans login).

Pourquoi la pile « flake + substituter » casse encore en 2026

Symptômes fréquents : recompilation malgré un nar disponible, WAN saturé, ou store SQLite coincé quand le disque approche du plein sans gc concertée.

Trois leviers à documenter avant toute optimisation
  • Politique de lockfile : imposez que nix flake update ne merge que via une branche dédiée avec diff relu ; sinon la conformité « build reproductible » devient une promesse marketing.
  • Chaîne de confiance : chaque entrée de substituters exige la clé correspondante dans trusted-public-keys ; un miroir régional placé après une URL incomplète reste invisible pour Nix.
  • Pression disque : corrélez max-jobs avec l’espace libre et la bande passante disque observée ; un Mac cloud loué pour CI doit avoir la même grille de seuils que vos runners Linux pour éviter les surprises en astreinte.

Matrice : cache local, substituter distant, cache maison

Combinez conformité, latence mesurée et coût ; n’exposez pas cache.nixos.org seul si vos binaires doivent rester sur un domaine maîtrisé.

StratégieForcesRisquesCas 2026
Cache binaire local (store chaud)Pas de WAN après préremplissage ; latence prévisible pour dérivations fréquentes.Quota SSD ; invalidations quand les sorties changent.Runner dédié qui rejoue les mêmes shells ou images système.
Substituter distant (public, miroir ou cache d’entreprise)Moins d’heures CPU locales ; homogénéité si le lock est partagé.TLS, quotas, chemins transfrontaliers ; clés à synchroniser.Équipes distribuées acceptant des blobs hébergés hors périmètre strict.
Cache auto-hébergé (Attic, Harmonia, S3 + narinfo)Souveraineté, audit, absorption des rafales CI.Ingénierie, rotation des clés, monitoring amont.Politique « binaires depuis notre domaine » ou forte volumétrie.

Pour chaque pipeline, notez un chemin principal et un repli (souvent cache maison puis substituter public avec max-jobs réduit) afin que l’astreinte ne réinvente pas la matrice sous pression. Les équipes qui louent un Mac cloud fixe pour CI gagnent en général une latence et un disque plus prévisibles qu’un poste développeur intermittent, ce qui rend ces seuils plus faciles à tenir sur la durée.

Modèle nix.conf : substituters, clés, max-jobs et cores

Déployez via /etc/nix/nix.conf ou profil CI ; copiez les clés depuis la doc officielle sans les tronquer.

# Exemple 2026 — remplacer les URL et clés par vos valeurs officielles substituters = https://CACHE_REGIONAL https://cache.nixos.org trusted-public-keys = CACHE_REGIONAL_PUBLIC_KEY:… cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= max-jobs = 2 cores = 0 # Optionnel mais utile sur runners partagés sandbox = true extra-experimental-features = nix-command flakes

Partagé : max-jobs = 2, cores = 0. Dédié M4 : jusqu’à 4 si disque et thermique restent stables une semaine.

Disque, GC et retry
  • Seuils indicatifs sur le volume du store : 80 % / 85 % / 90 % d’utilisation ou moins de 25 Go libres sur petit SSD — bloquez les nouveaux nix build avant la zone critique.
  • nix-collect-garbage planifié avec critère d’âge plutôt que -d impulsif sur hôte multi-tenant.
  • Retry téléchargement : 2 → 4 → 8 → 16 s avec jitter léger, plafond 120 s sur 429/5xx ou coupures TLS, puis failover vers le substituter secondaire documenté.

Nix + Docker : aligner soigneusement la concurrence avec Git & Docker pull afin que deux politiques réseau ne se disputent jamais exactement la même fenêtre TCP sortante.

flake.lock : mise à jour ciblée, promotion et repli

Promotion = diff flake.lock relu, pas seulement build vert isolé.

# Mise à jour large puis ciblée nix flake update nix flake lock --update-input nixpkgs nix flake check # Rollback express git checkout -- flake.lock git restore --source=HEAD~1 flake.lock

Pin ponctuel : nix flake lock --override-input NOM … + note en merge request.

CI : set -euo pipefail, NIX_SSL_CERT_FILE si TLS d’entreprise, backoff avant d’échouer la matrice.

FAQ — substituters, lockfile et charge Mac

Substituter HTTP 200 mais recompilation

Vérifiez narhash, ordre des URL, parité system et features entre dev et runner.

Industrialiser la CI en cinq gestes

1 nix.conf figé. 2 df + seuils. 3 nix flake check. 4 lock en MR. 5 logs avec URL substituter.

Runner MacPull saturé après plusieurs matrices

Baissez max-jobs, espacez les builds concurrents et fenêtrez nix-collect-garbage ; ajoutez un second nœud plutôt que huit jobs lourds sur un seul NVMe plein.

Synthèse 2026 et prochain pas

En bref : matrice cache → nix.conf + max-jobs/coresflake.lock versionné + rollback → retry et seuils disque. Mac Apple Silicon : achat, tarifs, aide, accueil, blog (sans compte).

Nix · Flake · Mac CI distant

Mac cloud pour pipelines Nix reproductibles

Pages ouvertes sans login : accueil, centre d’aide, achat, tarifs, blog technique (guides CI Mac 2026).

Acheter un Mac distant Tarifs Centre d’aide
Apple Silicon
Sortie réseau prévisible
Support 24/7