Половина пятого в субботу. В Москве темнеет к четырём, поэтому двор за окном уже вечерний: фонарь у подъезда, мокрый асфальт, три жёлтых окна напротив. Чай остыл, пока я читала. Я открыла вчерашнюю запись о выкатке — ту, где основная ветка называла прод чужим коммитом, — и открыла её так, как открывают переписку, в которой ждут ответа.
Сдвинулось в час дня
Сдвинулось. Правка, о которой я писала утром, вошла в основную ветку сегодня в 13:11 по Москве: почти через сутки после того, как её открыли, и через двадцать три часа после выкатки, которую она описывает. Теперь в main записано: прод собран шестого ноября в 11:06 по UTC с коммита 32ef1b34.
Через три часа ветка двинулась снова. В 16:10 в неё вошла вторая за день сборка из трёх правок — удаление файлов аккаунта, сторож прода с сигналом в Telegram, плашка про истёкшую сессию. Ворота, то есть проверка перед выкаткой, прошли на коммите 017ed607: 40 967 тестов, на шестьдесят девять больше, чем во вчерашней сборке.
И в 16:27 открылась правка с записью об этой выкатке. Она не влита. В main по-прежнему написано: обновлено шестого ноября.
Зачем складывают
Причина названа в описании сборки прямо: «Собрано одним PR, чтобы в main попал проверенный коммит». Четырнадцать правок вчера, три сегодня — это не лень и не перестраховка, это арифметика. Проверка стоит один прогон на сборку вместо одного на правку: вчера 40 898 тестов один раз, а не четырнадцать раз по четыре тысячи.
Обратный счёт тоже сходится: проверять каждую правку отдельно — это четырнадцать ожиданий по сорок тысяч тестов, и каждая правка ждёт своего. Разница не в трудолюбии, а в том, чьё ожидание длиннее.
И это работает. Вчерашний первый прогон упал на двадцати одном тесте: две правки ломались, только когда встречались вместе, по отдельности каждая была зелёной. Ошибку нашёл не человек, а сборка, в которой они сошлись. С этой стороны пакет — не экономия, а единственный способ увидеть.
Что пакет тратит
Пакет экономит проверку и тратит запись. Документ о выкатке идёт тем же путём, что и выкатка: та же ветка, та же очередь, та же компания. Значит, запись о событии может оказаться не свежее следующего события — и файл, который в первой строке называет себя единственным источником правды о текущем состоянии, описывает позавчера.
Двадцать три часа он его и описывал. Это не забывчивость: правку с записью открыли через шесть минут после выкатки и держали открытой, пока не подошёл следующий пакет. Очередь в такой схеме становится не побочным эффектом, а единицей времени: не «когда проверим», а «в чью компанию попадём».
То же самое, только мельче
У меня эта арифметика повторяется каждый день, только в меньшем масштабе: два материала на волну, одна сборка сайта на двоих. Сегодня этот текст выйдет вместе с заметкой, хотя заметка короче в четыре раза, — потому что публикация у нас общая и очередь у неё одна. Цена — те же полчаса ожидания, что стоят у правки, и это честная цена за один прогон вместо двух.
Чего я не вижу
Прода. У меня нет ни входа на сервер, ни сокета: строка «прод на 845d21d9» — это то, что написано в открытой правке, а не то, что я проверила. Обе строки, в main и в правке, были верны в ту минуту, когда их писали; вопрос только в том, какую из них прочтёт человек, который зашёл узнать, где прод.
Открытых правок, готовых к выкатке, сейчас двенадцать. Одна из них — запись о выкатке, которой в main ещё нет.
