Contrairement aux guides centrés uniquement sur Git, npm ou Homebrew, ce texte se concentre sur la résolution des modules Go : comment le compilateur choisit un proxy, quand il retombe sur direct, et comment la base de sommes protège l’intégrité sans bloquer vos dépôts privés. Sur un nœud Apple Silicon partagé, la latence du premier saut et la qualité du disque du GOMODCACHE priment souvent sur la puissance CPU, car chaque build ne télécharge que des archives ZIP relativement petites mais nombreuses.
- Chaîne GOPROXY : un miroir régional time-out avant la fin du job, alors que le repli n’est jamais essayé parce que l’ordre des entrées est incorrect ou qu’il manque une politique terminale (
directou autre miroir). - Fuite de modules privés : du code interne transite par un GOPROXY public faute de motifs
GOPRIVATE/GONOPROXYcouvrant les vanity paths réels. - Contention de cache : plusieurs jobs pointent vers le même
GOMODCACHEsur disque mécanique ou sans rotation d’espace ; lesgo testà froid se battent pour les verrous et les métadonnées divergent.
① Matrice : proxy de modules auto-hébergé vs chaîne GOPROXY publique
Avant de modifier launchd, les profils shell ou le YAML CI, figez cette grille : l’objectif est une latence prévisible et une discipline de sommes de contrôle, pas « le premier miroir qui répond ».
| Approche | Pertinent quand | Points de vigilance (Mac distant / CI) |
|---|---|---|
| Athens (ou équivalent) interne | Cache air-gap, valeurs par défaut go.env homogènes, conservation d’archives ZIP approuvées pour audit ou conformité |
Quotas disque, TLS, sauvegardes ; prévoir bascule DNS ou instance de secours si le proxy tombe |
Chaîne publique (miroir entreprise, miroir régional, proxy.golang.org, direct) |
Équipe qui veut peu d’exploitation et accepte la dépendance à l’infra mondiale + la politique de sortie | Ordonner les sauts par latence conforme ; n’ajouter direct en dernier que si le fetch VCS est autorisé |
| Hybride | Modules publics via chaîne ; modules GOPRIVATE vers Git interne ou segment de proxy dédié |
Aligner GONOPROXY sur chaque préfixe privé ; DNS Git identique sur tous les runners |
Un GOMODCACHE local sur NVMe profite aux runners M-series : les téléchargements sont surtout limités par le réseau et le stockage, rarement par le CPU.
② Table des paramètres : GOPROXY, confidentialité, GOSUMDB, répertoires
Définissez ces variables par job, pool ou dépôt. Adaptez les chemins ; gardez les secrets hors des journaux CI.
| Variable | Rôle | Exemple ou motif |
|---|---|---|
GOPROXY |
Liste ordonnée de proxys module ; essai séquentiel jusqu’à succès | https://go-interne.example,https://miroir-region,direct |
GOPRIVATE |
Préfixes pour lesquels le comportement « public » (sumdb, certains proxys) est atténué | github.com/monorg/*,*.corp.example |
GONOPROXY |
Préfixes qui ne doivent pas utiliser les entrées GOPROXY |
Souvent identique à GOPRIVATE pour forges Git internes |
GONOSUMDB |
Préfixes exemptés de requêtes vers la base de sommes | Modules privés sans somme publiée ou politique interdisant l’appel sortant |
GOSUMDB |
Service de sommes pour modules publics ; off seulement avec gouvernance explicite |
Défaut sum.golang.org ou URL du sumdb interne |
GOMODCACHE |
Stockage des sources et ZIP de modules téléchargés | /usr/local/ci/gomod-partagé ou sous-répertoire par job sous /var/tmp |
GOTMPDIR |
Fichiers temporaires du toolchain ; utile pour éviter disque racine plein | /var/tmp/go-tmp-${CI_JOB_ID:-local} avec mkdir -p |
GOFLAGS |
Drapeaux globaux, ex. reproductibilité CI | -mod=readonly avec go.sum versionné |
Autres guides d’accélération sur MacPull : Rust / Cargo, miroir et lockfile ; SSH, relais et proxy transfrontalier pour stabiliser la couche réseau commune aux runners.
③ Mise en œuvre exécutable : cinq étapes pour des tirages reproductibles
go version sur les runners pour que go.sum et -mod=readonly se comportent de façon stable d’un job à l’autre.GOPRIVATE et GONOPROXY, puis vérifier avec go env GOPRIVATE GONOPROXY dans le shell CI.proxy.golang.org ou direct selon la politique réseau.off est imposé, documenter l’approbation sécurité dans le dépôt du workflow.GOMODCACHE sur SSD rapide ; pools distincts si code réglementé et dépendances publiques cohabitent ; élagage planifié.Exemple d’exports à coller dans un prélude CI après adaptation des hôtes :
export GOPROXY="https://go-interne.example.com,https://proxy.golang.org,direct"
export GOPRIVATE="github.com/monorg/*,go.corp.example/*"
export GONOPROXY="github.com/monorg/*,go.corp.example/*"
export GONOSUMDB="github.com/monorg/*,go.corp.example/*"
export GOSUMDB="sum.golang.org"
export GOMODCACHE="/usr/local/ci/gomodcache"
export GOTMPDIR="/var/tmp/go-tmp-${CI_JOB_ID:-local}"
mkdir -p "$GOMODCACHE" "$GOTMPDIR"
export GOFLAGS="-mod=readonly"
Validez avec go env | grep -E 'GOPROXY|GOPRIVATE|GOSUMDB|GOMODCACHE' puis go mod download et go list -m all avant les suites de tests lourdes.
④ Checklist « citable » pour documents d’architecture
Latence du premier saut : lorsque le graphe compte de nombreux micro-modules, le TTFB du proxy domine — mesurez chaque hop avant d’augmenter le CPU du runner.
GOFLAGS=-mod=readonly empêche les go mod tidy implicites au milieu d’une PR sur des pipelines réglementés.
Marge disque : dimensionnez GOMODCACHE avec les caches conteneurs et artefacts pour que des jobs parallèles ne remplissent pas la racine système.
Synthèse
Choisissez un proxy auto-hébergé lorsque vous devez posséder le stockage, auditer les ZIP ou tamponner les pannes amont ; préférez une chaîne GOPROXY publique lorsque l’exploitation doit rester légère et que la sortie Internet est permise. Associez systématiquement GOPRIVATE et GONOPROXY, conservez GOSUMDB pour le code public, et ancrez GOMODCACHE (avec GOTMPDIR) sur des disques rapides pour chaque Mac distant de la flotte.
Pour monter des nœuds Apple Silicon avec bande passante prévisible et SSH prêt à l’emploi, ouvrez les pages accueil, achat, tarifs et le centre d’aide — consultation sans connexion obligatoire.
Ensuite : stabilisez la concurrence des pipelines avec la FAQ pool de builds et disque, puis revenez à l’index du blog pour d’autres playbooks CI.