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.
Pourquoi les toolchains Mise dérivent sur Mac CI distant transfrontalier
- Shims sans lockfile : des jobs appellent
mise installsansmise.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 installparallèles saturent l’APFS et déclenchent ETIMEDOUT. - Cache indexé sur .tool-versions seul : restaurer
~/.local/share/miseavec 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 --checkdoit sortir 0. - Étape 2 — barrière diff :
git diff --exit-code mise.lock.tomlcontre la base de merge. - Étape 3 — audit shims :
mise exec -- ruby -v && node -v && swift --versiondans 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
xcodebuildou 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.