Public : mainteneurs iOS/macOS CI transfrontaliers qui épinglent Ruby, Node, Go et Terraform sur un pool Mac CI distant.

Livrable : tableau Mise (ex-rtx) vs asdf, variables d’épinglage, miroirs plugins, clés cache GitHub Actions/GitLab, barrière lockfile en trois temps et prévol OpenClaw avec synthèse webhook.

Liens : accueil, blog CI, matrice Rust Cargo lockfile.
« Sur un Mac loué, un cache Mise mal cléé masque la dérive du lockfile jusqu’au premier échec xcodebuild — la barrière commence par mise install --check, pas par le vert du job précédent. »

Pourquoi les toolchains Mise dérivent sur Mac CI distant transfrontalier

  • Shims sans lockfile : des jobs appellent mise install sans mise.lock.toml — les tarballs plugins résolvent des patchs différents selon la région.
  • Pulls plugins sur une seule lane WAN : releases GitHub par défaut plus quatre mise install parallèles saturent l’APFS et déclenchent ETIMEDOUT.
  • Cache indexé sur .tool-versions seul : restaurer ~/.local/share/mise avec une mauvaise clé cache la dérive jusqu’à xcodebuild.

Tableau Mise vs asdf pour la CI Mac distant

Un gestionnaire par pool ; évitez deux shim paths pendant la migration.

Critère Mise (rtx) asdf
Lockfile mise.lock.toml + tâches .tool-versions seul
Vitesse install Backends parallèles, cache-aware Scripts plugin séquentiels
Chemin cache CI ~/.local/share/mise ~/.asdf + plugins
Garder asdf Lanes greenfield Plugin legacy sans backend Mise

Épinglage toolchain et variables d’environnement sur Mac distant

Commitez mise.toml et mise.lock.toml ; exportez des chemins sûrs CI avant compile.

export MISE_DATA_DIR="${MISE_DATA_DIR:-$HOME/.local/share/mise}"
export MISE_CACHE_DIR="${MISE_CACHE_DIR:-$HOME/.cache/mise}"
export MISE_PARALLEL_INSTALLS="${MISE_PARALLEL_INSTALLS:-2}"
export MISE_HTTP_TIMEOUT="${MISE_HTTP_TIMEOUT:-120}"
mise trust -y
mise install --check
eval "$(mise activate bash)"

Alignez launchd et SSH : journalisez which mise et mise --version dans chaque artefact job.

Miroirs plugins transfrontaliers, timeouts et paramètres de retry

export MISE_PLUGIN_GIT_CLONE_DEPTH=1
export MISE_HTTP_TIMEOUT=120
export MISE_HTTP_RETRIES=4
export MISE_HTTP_RETRY_DELAY=2
export MISE_NODE_MIRROR="https://npmmirror.com/mirrors/node"

Associez au guide miroirs Accueilbrew/npm quand Node et Ruby partagent un runner.

Clés de cache GitHub Actions et GitLab CI pour Mise

# GitHub Actions (extrait)
- uses: actions/cache@v4
  with:
    path: |
      ~/.local/share/mise
      ~/.cache/mise
    key: mise-${{ runner.os }}-arm64-${{ hashFiles('mise.lock.toml') }}
    restore-keys: |
      mise-${{ runner.os }}-arm64-

# GitLab CI (extrait)
cache:
  key: "mise-${CI_COMMIT_REF_SLUG}-${CI_JOB_IMAGE}-${MiseLockHash}"
  paths:
    - .local/share/mise/
    - .cache/mise/

Incluez darwin-arm64 et le digest image runner ; ne cléez jamais sur le nom de branche seul.

Acceptation dérive lockfile : trois étapes avant xcodebuild

  • Étape 1 — install gelé : mise install --check doit sortir 0.
  • Étape 2 — barrière diff : git diff --exit-code mise.lock.toml contre la base de merge.
  • Étape 3 — audit shims : mise exec -- ruby -v && node -v && swift --version dans le résumé CI.

Même logique que la matrice Cargo --locked pour dépôts polyglottes.

Prévol OpenClaw enchaîné et synthèse d’échec webhook

openclaw gateway status --json > gateway-status.json
openclaw doctor
openclaw config validate
MiseDrift=$?
jq -n \
  --arg drift "$MiseDrift" \
  --slurpfile gw gateway-status.json \
  '{mise_drift:$drift|tonumber, gateway:$gw[0]}' \
  > ci-preflight-summary.json

Postez ci-preflight-summary.json au webhook ; en échec, joignez les 40 dernières lignes stderr de mise install. Voir barrière gateway status JSON et webhook sr.ht lockfile.

Matrice Mac CI distant : concurrence Mise, répertoires cache, timeouts

Profil WAN MISE_PARALLEL_INSTALLS MISE_HTTP_TIMEOUT (s) Répertoire cache Stratégie plugin
Stable <80 ms RTT 4 60 ~/.local/share/mise par JOB_ID Releases GitHub directes
Lossy 120–200 ms 2 120 ~/.cache/mise sur NVMe Miroir Node + retries 4
Satellite / flaky 1 180 /var/ci/mise-cache prefetch Proxy entreprise + bundle

Runbook en cinq étapes : install, cache, validation, build sur Mac CI distant

  • Installer Mise via installeur officiel ; épingler la version dans mise.toml.
  • Restaurer le cache Actions/GitLab cléé sur mise.lock.toml.
  • Exporter les variables miroir ; exécuter mise install --check.
  • Lancer la barrière lockfile en trois temps ; archiver le JSON pour OpenClaw.
  • Enchaîner xcodebuild ou Fastlane seulement après prévol vert.
mise install --check
git diff --exit-code mise.lock.toml
mise exec -- xcodebuild -scheme App -destination 'platform=iOS Simulator,name=iPhone 16'

Paramètres citables pour revue d’architecture

  • Cache Mise chaud : budgéter 2 à 8 Go par lane sur NVMe M4 ; clé par SHA-256 de mise.lock.toml.
  • Pull plugin transfrontalier : compter 30 à 90 s par outil à 150 ms RTT ; plafonner le parallélisme à 2 tant que le lien est instable.
  • Seuil disque : interrompre si l’APFS libre descend sous 25 Go avant expansion des plugins.

FAQ : Mise, alias rtx et politique lockfile sur Mac CI distant

rtx est-il encore valide ? Oui — rtx est l’ancien binaire ; standardisez mise dans les pipelines neufs.

Migrer depuis asdf ? Lancez mise en asdf une fois, commitez mise.lock.toml, retirez ~/.asdf des clés cache.

Webhook rouge malgré mise vert ? Vérifiez le JSON passerelle OpenClaw et le port 18789 ; mappez les codes de sortie drift dans le payload.

Synthèse : louer des nœuds Mac CI avec lanes Mise reproductibles

La CI iOS transfrontalière reste prévisible quand l’épinglage Mise, les retries miroir et la barrière lockfile partagent une histoire de cache. Démarrez sur l’accueil, comparez les tarifs, puis louez un nœud NVMe MacPull près de votre région miroir. Approfondissements : matrice Rust Cargo, achat, articles CI.

Louer un nœud Mac CI pour lanes toolchain Mise

Cache mise par job, miroirs plugins transfrontaliers et barrières lockfile — comparez les offres sans connexion.