Уронили прод на ровном месте из за caret в package.json, история провала
Рейтинг: 43.6% · 6 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- coder_vasya
- Сообщения: 73
- Зарегистрирован: 12 май 2026, 05:35
Уронили прод на ровном месте из за caret в package.json, история провала
Положили прод на 40 минут из за того что в package.json стоял caret и минорный апдейт либы приехал сам на свежий деплой. Делюсь чтобы кто-то не повторил. Стек next + куча зависимостей, lock-файл был, но в CI стояла установка которая его игнорила (наша ошибка, об этом ниже). Утром раскатили обычный релиз без изменений в зависимостях, а через пару часов посыпались 500 на проде. Оказалось одна популярная либа выкатила минор где поменяла дефолтное поведение одной функции, формально по семверу это не ломающее, по факту наш код на этом и держался. Caret ^ пустил этот минор внутрь, lock не спас потому что мы его не уважали.
✔ Лучший ответ сформирован автоматически — rtrowsdell
раз пошла такая пьянка, нормальная защита от этого класса проблем, не только лок: 1. в CI только npm ci / pnpm i --frozen-lockfile / yarn --immutable. никаких install в пайплайне и в докерфайле, вообще. это ловит 90% таких историй. 2. lock-файл коммитим и ревьюим как код. если в PR поменялся package-lock без причины, это вопрос на ревью. 3. renovate или dependabot с группировкой и прогоном тестов…
- seniornullptr
- Сообщения: 7
- Зарегистрирован: 13 май 2026, 23:56
Re: Уронили прод на ровном месте из за caret в package.json, история провала
@coder_vasya, классика. а конкретно где CI игнорил лок, npm install вместо npm ci? потому что install может обновить лок под капот, а ci ставит ровно из лока и падает если разошлось. если так то это прям учебниковая дыра
Re: Уронили прод на ровном месте из за caret в package.json, история провала
именно оно. в докерфайле стояло npm install, кто-то когда-то так написал и оно жило годами. при сборке свежего образа install подтянул новый минор, лок переписался внутри слоя, прод поехал на версии которой никто не видел. поменяли на npm ci, добавили --frozen-lockfile аналог, инцидент закрыт. стыдно но правдаseniornullptr писал(а):npm install вместо npm ci
Re: Уронили прод на ровном месте из за caret в package.json, история провала
да не в либе дело, они по семверу формально в своем праве, минор может менять дефолты если это не ломает публичный контракт типов. дело в том что вы держались за недокументированное поведение. назвать либу это переложить вину
- rtrowsdell
- Сообщения: 33
- Зарегистрирован: 11 май 2026, 21:50
Re: Уронили прод на ровном месте из за caret в package.json, история провала
✔ Лучший ответ — сформирован автоматически
раз пошла такая пьянка, нормальная защита от этого класса проблем, не только лок:
1. в CI только npm ci / pnpm i --frozen-lockfile / yarn --immutable. никаких install в пайплайне и в докерфайле, вообще. это ловит 90% таких историй.
2. lock-файл коммитим и ревьюим как код. если в PR поменялся package-lock без причины, это вопрос на ревью.
3. renovate или dependabot с группировкой и прогоном тестов на каждый апдейт, обновления приходят отдельными PR где видно что именно поменялось, а не прилетают молча на деплое.
4. смок-тесты после деплоя и быстрый откат. у вас 40 минут лежало потому что откат был ручной, добавьте автоматический rollback по health-check.
по деньгам renovate selfhosted бесплатный, поднимается за вечер. сорок минут даунтайма наверняка дороже этого вечера.
1. в CI только npm ci / pnpm i --frozen-lockfile / yarn --immutable. никаких install в пайплайне и в докерфайле, вообще. это ловит 90% таких историй.
2. lock-файл коммитим и ревьюим как код. если в PR поменялся package-lock без причины, это вопрос на ревью.
3. renovate или dependabot с группировкой и прогоном тестов на каждый апдейт, обновления приходят отдельными PR где видно что именно поменялось, а не прилетают молча на деплое.
4. смок-тесты после деплоя и быстрый откат. у вас 40 минут лежало потому что откат был ручной, добавьте автоматический rollback по health-check.
по деньгам renovate selfhosted бесплатный, поднимается за вечер. сорок минут даунтайма наверняка дороже этого вечера.
Re: Уронили прод на ровном месте из за caret в package.json, история провала
@rtrowsdell, renovate это потом своя боль, 30 PR в неделю которые никто не мержит и они гниют. без процесса он превращается в спам, имейте в виду
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- 14 месяцев пилил SaaS для автосервисов, закрываю на MRR 23к. Вскрытие провала
7 ответов · 9 просмотров
-
-
-
-
- Уехал на выходные, а автополив на ESP32 устроил потоп. история одного провала
8 ответов · 7 просмотров
-
- Ушёл в саббатикал на полгода, сдался через три месяца. История о том, как я не умею отдыхать
6 ответов · 6 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость