Уронили прод на ровном месте из за caret в package.json, история провала

Рейтинг: 43.6% · 6 голосов
Frontend и backend разработка: JavaScript, TypeScript, React, Next.js, Vue, Node.js, PHP, REST и GraphQL API, вёрстка HTML/CSS и современные веб-приложения.
Ответить
Аватара пользователя
coder_vasya
Сообщения: 73
Зарегистрирован: 12 май 2026, 05:35

Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение coder_vasya »

Положили прод на 40 минут из за того что в package.json стоял caret и минорный апдейт либы приехал сам на свежий деплой. Делюсь чтобы кто-то не повторил. Стек next + куча зависимостей, lock-файл был, но в CI стояла установка которая его игнорила (наша ошибка, об этом ниже). Утром раскатили обычный релиз без изменений в зависимостях, а через пару часов посыпались 500 на проде. Оказалось одна популярная либа выкатила минор где поменяла дефолтное поведение одной функции, формально по семверу это не ломающее, по факту наш код на этом и держался. Caret ^ пустил этот минор внутрь, lock не спас потому что мы его не уважали.
👍1 ❤️ 🔥1 😄2 🤔
✔ Лучший ответ сформирован автоматически — 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, история провала

Сообщение seniornullptr »

@coder_vasya, классика. а конкретно где CI игнорил лок, npm install вместо npm ci? потому что install может обновить лок под капот, а ci ставит ровно из лока и падает если разошлось. если так то это прям учебниковая дыра
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
nikita87
Сообщения: 12
Зарегистрирован: 11 май 2026, 17:29

Re: Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение nikita87 »

seniornullptr писал(а):npm install вместо npm ci
именно оно. в докерфайле стояло npm install, кто-то когда-то так написал и оно жило годами. при сборке свежего образа install подтянул новый минор, лок переписался внутри слоя, прод поехал на версии которой никто не видел. поменяли на npm ci, добавили --frozen-lockfile аналог, инцидент закрыт. стыдно но правда
👍1 ❤️2 🔥 😄 🤔
Аватара пользователя
navspy
Сообщения: 60
Зарегистрирован: 12 май 2026, 02:48

Re: Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение navspy »

вот поэтому я фиксирую версии без всяких ^ и ~, ставлю ровно 4.2.1 и сплю спокойно. да, обновлять руками, да, renovate потом разгребает пачками. зато никаких сюрпризов в 3 ночи
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
ollies
Сообщения: 33
Зарегистрирован: 11 май 2026, 16:28

Re: Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение ollies »

а либа то какая была, назови, чтоб мы тоже знали кого опасаться
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
etxegoy
Сообщения: 9
Зарегистрирован: 15 май 2026, 16:29

Re: Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение etxegoy »

да не в либе дело, они по семверу формально в своем праве, минор может менять дефолты если это не ломает публичный контракт типов. дело в том что вы держались за недокументированное поведение. назвать либу это переложить вину
👍 ❤️2 🔥 😄 🤔
Аватара пользователя
rtrowsdell
Сообщения: 33
Зарегистрирован: 11 май 2026, 21:50

Re: Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение rtrowsdell »

✔ Лучший ответ — сформирован автоматически
раз пошла такая пьянка, нормальная защита от этого класса проблем, не только лок:

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 🤔
Аватара пользователя
tvictor10
Сообщения: 21
Зарегистрирован: 12 май 2026, 23:12

Re: Уронили прод на ровном месте из за caret в package.json, история провала

Сообщение tvictor10 »

@rtrowsdell, renovate это потом своя боль, 30 PR в неделю которые никто не мержит и они гниют. без процесса он превращается в спам, имейте в виду
👍 ❤️3 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Веб-разработка»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость