Результат: таблица Mise vs asdf, переменные MISE_* для pin, зеркала плагинов с timeout/retry, ключи кеша GitHub Actions/GitLab CI, три шага приёмки lockfile и цепочка OpenClaw preflight.
Структура: три риска, матрица WAN с concurrency и каталогами кеша, пять шагов runbook, цифры для дизайн-дока, FAQ. См. главную, блог, матрицу Rust Cargo lockfile.
Почему toolchain Mise «плывёт» на трансграничном удалённом Mac CI
- Shims без lockfile. Джобы вызывают
mise installбезmise.lock.toml; tarball плагинов в разных регионах дают разные patch-level доxcodebuild. - Параллельные plugin pull на одном WAN. Четыре
mise installплюс npm/Homebrew насыщают APFS и дают ETIMEDOUT при трансграничной загрузке. - Кеш CI только по .tool-versions. Restore
~/.local/share/miseс неверным ключом скрывает drift lockfile до падения Fastlane.
Mise vs asdf: таблица выбора на удалённом Mac CI
Один менеджер на пул; не держите dual shims в PATH при миграции дольше одного спринта.
| Критерий | Mise (rtx) | asdf |
|---|---|---|
| Lockfile | mise.lock.toml + tasks | только .tool-versions |
| Скорость install | параллельные backend, cache-aware | последовательные plugin-скрипты |
| Каталог кеша CI | ~/.local/share/mise | ~/.asdf + plugins |
| Когда оставить asdf | новые lane | legacy plugin без backend Mise |
Pin toolchain и переменные окружения на удалённом Mac
Коммитьте mise.toml и mise.lock.toml; экспортируйте пути до 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)"
which mise, mise --version и хеш mise.lock.toml — launchd и SSH-сессии на арендованном Mac часто расходятся.Трансграничные зеркала плагинов, timeout и 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"
Совместите с зеркалами npm и Homebrew, если Node и Ruby на одном runner.
Ключи кеша GitHub Actions и GitLab CI для Mise
# GitHub Actions (фрагмент)
- 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 (фрагмент)
cache:
key: "mise-${CI_JOB_IMAGE}-${CI_COMMIT_REF_SLUG}-${MiseLockHash}"
paths:
- .local/share/mise/
- .cache/mise/
Включайте darwin-arm64 и digest образа runner; не ключите только по имени ветки.
Приёмка drift lockfile: три шага до xcodebuild
- Шаг 1 — frozen install:
mise install --checkдолжен вернуть 0 без неявных апгрейдов. - Шаг 2 — diff gate:
git diff --exit-code mise.lock.tomlотносительно merge base. - Шаг 3 — shim audit:
mise exec -- ruby -v && node -v && swift --versionв summary CI.
Тот же паттерн, что в матрице Rust Cargo --locked для полиглот-репозиториев.
OpenClaw: цепочка preflight и сводка 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
Публикуйте ci-preflight-summary.json в webhook; при ошибке приложите последние 40 строк stderr mise install. См. ворота gateway status JSON и матрицу sr.ht lockfile.
Матрица решений: Mise concurrency, каталоги кеша, timeout
| Профиль WAN | MISE_PARALLEL_INSTALLS | MISE_HTTP_TIMEOUT (с) | Каталог кеша | Стратегия плагинов |
|---|---|---|---|---|
| RTT < 80 ms | 4 | 60 | ~/.local/share/mise на JOB_ID |
прямые GitHub releases |
| Потери 120–200 ms | 2 | 120 | ~/.cache/mise на NVMe |
Node mirror + retries 4 |
| Нестабильный канал | 1 | 180 | /var/ci/mise-cache prefetch |
корп. proxy + bundle |
Пять шагов runbook: install, кеш, validate, build на удалённом Mac CI
- Установите Mise официальным installer; версию зафиксируйте в
mise.toml. - Restore кеш Actions/GitLab по
mise.lock.toml. - Экспортируйте mirror env; выполните
mise install --check. - Пройдите три шага drift lockfile; сохраните JSON для OpenClaw.
- Запускайте
xcodebuildили Fastlane только после зелёного preflight.
mise install --check git diff --exit-code mise.lock.toml mise exec -- xcodebuild -scheme App \ -destination 'platform=iOS Simulator,name=iPhone 16'
Цифры для дизайн-дока и цитирования
- Прогретый кеш Mise: 2–8 ГБ на lane M4 NVMe; ключ — SHA-256
mise.lock.toml. - Plugin pull при RTT 150 ms: 30–90 с на инструмент; держите
MISE_PARALLEL_INSTALLS=2до стабильных метрик. - Порог APFS: прерывайте job при < 25 ГБ свободно до распаковки плагинов.
FAQ: Mise, алиас rtx и политика lockfile на удалённом Mac CI
Выбирайте Mise при mise.lock.toml и параллельных backend. asdf — только для legacy-плагинов без backend Mise.
Да: rtx — legacy-имя бинарника; в новых pipeline стандартизируйте вызов mise.
Проверьте JSON gateway и порт 18789; коды drift должны попадать в payload сводки OpenClaw.
Итог: арендуйте удалённый Mac CI-узел с воспроизводимыми lane Mise
Трансграничный iOS CI предсказуем, когда pin Mise, retry зеркал и ворота lockfile используют одну историю ключей кеша. Сравните узлы на главной, изучите матрицу Rust Cargo, затем арендуйте NVMe MacPull рядом с регионом зеркала. Без входа: покупка, тарифы, блог CI.
Аренда Mac Mini M4 под lane Mise и lockfile CI
Кеш mise на job, зеркала плагинов и ворота lockfile — сравните тарифы без обязательного входа.