TGViewer
Сохранёнки программиста Сохранёнки программиста @prog_stuff · 6.53K subscribers
Post #2789 950
В блоге NixCI вышла отличная статья, которая ставит под сомнение привычный всем нам процесс работы с непрерывной интеграцией. Обычно мы воспринимаем CI как удалённый сервер (GitHub Actions, GitLab CI), куда мы пушим код и ждём заветную зелёную галочку. Но у этого подхода есть огромный минус — длинная петля обратной связи.

Классический флоу выглядит так: закоммитил → запушил → подождал раннер → подождал установку зависимостей и тесты → переключил контекст на другую задачу → вернулся, увидел красный крестик и пытаешься вспомнить, что вообще делал.

Автор предлагает концепцию Local-First CI. Идея в том, что вся пайплайн-логика должна быть описана так, чтобы она могла локально выполниться на машине разработчика до пуша в репозиторий.

Какие плюсы у локального CI:

Скорость. Рабочие машины разработчиков (особенно современные Mac) часто гораздо мощнее стандартных бесплатных раннеров (у тех же GitHub Actions всего 4 vCPU и 16 GB RAM).

Фокус. Вы не переключаете контекст. Ошибка падает сразу, и вы фиксите её, оставаясь в потоке.

Отсутствие вендор-лока. Если весь ваш CI — это условный баш-скрипт ./ci.sh в корне проекта, вам всё равно, где его запускать. Вы не привязаны к специфичным YAML-файлам конкретного провайдера.

Локальная воспроизводимость. Больше не нужно делать коммиты с названиями fix ci, try again, maybe now?, пытаясь вслепую угадать, почему тест падает на сервере, но работает у вас.

Есть и минусы, конечно.

Главная проблема наивного подхода с ./ci.sh — рассинхрон сред. У вас локально macOS и gcc 15, а на сервере Ubuntu и gcc 14. У вас замусоренная папка с билдами и завалявшийся .env, а CI стартует с чистого листа.

Решением автор логично называет воспроизводимые сборки (reproducible builds), в частности — использование Nix. Команда nix flake check гарантирует, что локальное и удалённое окружение будут абсолютно идентичными вплоть до версий системных библиотек . Но даже без Nix, максимальный перенос логики проверок в локальную среду (например, через Docker) — это отличная практика для ускорения разработки.

Полная статья: https://blog.nix-ci.com/post/2026-03-09_ci-should-fail-on-your-machine-first

@prog_stuff
  • ❤ 2
  • 👍 2
  • 💯 1
More from @prog_stuff
  1. Sep 22, 2026Как одну проверку Clippy ускорили в 3133 раза Казалось бы, проверить скобки в вызовах макр…
  2. Sep 22, 2026Как SQLite обеспечивает атомарный коммит Транзакция выглядит так, будто записалась целиком…
  3. Sep 21, 2026Как выбрать равновероятную выборку из потока неизвестной длины Интерактивный разбор объясн…
  4. Sep 21, 2026Как LMAX вынесла торговую логику в один поток Разбор архитектуры LMAX показывает, почему м…
  5. Sep 20, 2026Как процессор предсказывает ветвления Псевдотранскрипт доклада объясняет тему с нуля. Конв…
  6. Sep 20, 2026Почему одни движки регулярных выражений зависают, а другие нет Обстоятельная статья Расса…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →