График выхода релизов AMP
- Релизные каналы
- Канал Nightly
- Еженедельные каналы
- Долгосрочный стабильный канал (lts)
- Как определить, попало ли ваше изменение в релиз
- Периодичность выхода релизов
- Подробный график
- Заморозка релизов
Переход на новый релиз AMP для всех AMP-страниц происходит каждый вторник. После того как изменение попадает в ветку master, обычно проходит 1–2 недели, прежде чем оно распространится на всех пользователей.
Релизные каналы
Среда выполнения AMP и расширения для AMP распространяются по ряду различных релизных каналов. Каждый канал служит определенной цели как для разработчиков, так и для самого проекта AMP HTML. Подробнее о том, как и когда код из репозитория ampproject/amphtml
попадает в релизные сборки, читайте в разделе о периодичности выхода релизов.
Определить, вошел ли тот или иной пул-реквест в один из релизных каналов, перечисленных ниже, можно по меткам PR Use: In Canary, PR Use: In Production или PR Use: In LTS на GitHub (подробности смотрите в разделе о том, как определить, попало ли ваше изменение в релиз).
Канал Nightly
Релизный канал nightly обновляется (как следует из названия) вечером каждого буднего дня. Этот процесс автоматизирован, и нет никакой гарантии, что случайно выбранный ночной релиз не будет содержать ошибок и иных проблем. Каждую ночь после полуночи (по тихоокеанскому времени) система выбирает последний из «зеленых» коммитов, сделанных за прошедший день, и использует его в качестве основы для очередного релиза. «Зеленое» состояние сборки означает, что она прошла все автоматизированные тесты.
Ночные релизы позволяют оперативно выявлять и устранять ошибки, чтобы не допустить их попадания в еженедельные релизные каналы, на которые приходится больше трафика. Они также позволяют снизить число пользователей, затрагиваемых новыми ошибками при их появлении.
Вы можете присоединиться к каналу nightly, для того чтобы тестировать пул-реквесты, которые были включены в код в течение последних нескольких дней. О том, как присоединяться к каналам, читайте в [DEVELOPING.md].
Еженедельные каналы
Еженедельные релизные каналы — это основные каналы для получения актуальных релизов. Каждую неделю релиз, опубликованный на прошлой неделе на канале beta, попадает на канал stable, а последний релиз nightly, опубликованный на прошлой неделе, попадает на каналы experimental и beta (см. подробный график).
Для создания релизных сборок используются два набора конфигураций сборки: canary и production. Сборки для релизных каналов experimental и beta генерируются на основе одного и того же коммита, но канал experimental использует конфигурацию canary, тогда как канал beta — конфигурацию production. Конфигурация canary активирует экспериментальные компоненты и функции, которые могут быть неактивны при сборке с конфигурацией production. Присоединиться к каналу experimental или beta можно на странице экспериментов.
Релизный канал stable использует конфигурацию сборки production, и на него приходится большая часть AMP-трафика. Поскольку релизный канал beta также использует конфигурацию сборки production, публикуемые на нем сборки идентичны сборкам, которые будут опубликованы на канале stable спустя неделю (за исключением изменений, внесенных в последний момент при помощи операции cherry-pick; см. Внесение кода).
Каналы Beta и Experimental
На каналах Beta и Experimental публикуются предварительные сборки, являющиеся кандидатами на роль следующего стабильного релиза AMP. Каждый вторник (за исключением тех недель, когда происходит заморозка релиза) сборка nightly за последний день прошедшей недели попадает на каналы beta и experimental для разработчиков. Если по истечении 1 дня в новой сборке не будет выявлено изменений, негативным образом отражающихся на функциональности и производительности, то в среду мы переводим на новый релиз небольшую часть обычного трафика. Этот же релиз затем попадает на канал stable в следующий вторник.
Вы можете присоединиться к одному из этих каналов. О том, как это сделать, читайте в [DEVELOPING.md].
Канал Beta предназначен для того, чтобы:
- экспериментировать с новыми версиями среды выполнения AMP перед их релизом;
- адаптировать сайты для совместимости со следующей версией AMP в рамках процедур контроля качества (QA).
Канал Experimental предназначен для того, чтобы:
- экспериментировать с новыми функциями, которые пока недоступны остальным пользователям;
- адаптировать сайты для работы с новыми функциями AMP, которые еще находятся в разработке, в рамках процедур контроля качества (QA).
Сборки на канале Experimental могут быть менее стабильными и содержать функции, которые пока недоступны остальным пользователям.
Долгосрочный стабильный канал (lts)
На релизном канале lts публикуются сборки с канала stable с интервалом в один месяц. Каждый месяц во второй понедельник актуальная сборка с канала stable получает статус lts. Этот канал рекомендуется использовать не всем издателям AMP-страниц. Он предоставляется для того, чтобы издатели сайтов могли сократить частоту проверок качества (QA), установив канал lts для конкретных веб-страниц (см. справку по lts).
Если второй понедельник месяца является праздничным днем, публикация сборки происходит по окончании заморозки релиза.
Важно: издатели, которые выбрали релизный канал lts, не смогут использовать недавно добавленные функции. Из-за более длительного релизного цикла сборка на канале lts может отставать от текущей (HEAD
) версии в репозитории ampproject/amphtml
на срок до семи недель. О том, как узнать о доступности того или иного изменения в рамках выбранного вами релизного цикла, читайте в разделе Как определить, попало ли ваше изменение в релиз.
Как определить, попало ли ваше изменение в релиз
Задачи с Type: Release на GitHub используются для того, чтобы отслеживать состояние текущих и прошлых релизов, начиная с первоначального среза и тестирования на каналах experimental и beta и заканчивая публикацией на каналах stable и lts. Анонсы о релизах доступны на канале #release проекта AMP в Slack (зарегистрироваться в Slack можно по этой ссылке).
Определить, какие изменения содержит та или иная сборка, можно следующими способами:
- Задачи с Type: Release на GitHub для каждого релиза содержат ссылку на страницу соответствующего релиза со списком содержащихся в нем изменений.
- Как только пул-реквест попадает в еженедельную сборку или сборку на канале lts, ему присваивается метка PR Use: In Beta / Experimental, PR Use: In Stable или PR Use: In LTS. Между созданием сборки и присвоением ей метки может пройти какое-то время.
Периодичность выхода релизов
Мы намеренно осторожно подходим к расчету периодичности выхода релизов.
Принимая решение о частоте распространения новых версий AMP среди всех пользователей, мы должны учитывать множество факторов, таких как:
- стабильность работы миллионов сайтов и миллиардов страниц, созданных с использованием AMP;
- инвалидация кеша, которая может происходить в результате выпуска новой версии;
- наше стремление оперативно предоставлять доступ к новым функциям.
Взвесив все эти факторы, мы решили, что лучше всего нам подходит одно-двухнедельный релизный цикл. На данный момент это кажется разумным компромиссом, но мы продолжим оценивать эти факторы, и в будущем это решение может быть пересмотрено.
Подробный график
Мы стараемся как можно точнее следовать этому графику, хотя из-за осложнений могут возникать задержки. Вы можете отслеживать текущее состояние любого релиза при помощи задач с параметром Type: Release в GitHub, а также на канале #release проекта AMP в Slack (зарегистрироваться в Slack можно по этой ссылке).
- Вторник, 11:00 по тихоокеанскому времени: на основе последней сборки из ветки master, которая проходит все наши тесты, создаются новые сборки experimental и beta, которые затем распространяются среди пользователей AMP, присоединившихся к каналам Experimental и Beta соответственно.
- Среда: мы проверяем отчеты об ошибках от пользователей на каналах Experimental и Beta и, если проблем не обнаружено, активируем сборку beta для 1 процента AMP-страниц.
- Четверг — понедельник: мы продолжаем следить за данными о частоте возникновения ошибок и отчетами об ошибках, поступающими от пользователей на каналах Experimental и Beta, а также с 1 процента страниц, использующих сборки experimental и beta.
- Вторник следующей недели: сборка beta публикуется на канале stable (т. е. все AMP-страницы теперь будут использовать эту сборку).
Заморозка релизов
Иногда мы пропускаем выпуск очередного релиза AMP в продакшн — это называется заморозкой релиза.
Если анонсирована однонедельная заморозка релиза, затрагивающая неделю N:
- Релиз, собранный на предыдущей неделе, остается на каналах experimental/beta в течение еще одной недели; следовательно, релиз, основанный на снимке за неделю N-1, не попадает на канал stable на неделе N, как это происходит обычно. Вместо этого он попадет на канал stable на неделе N+1.
- Новая релизная сборка не генерируется на неделе, затронутой заморозкой (неделе N).
- Начиная с недели N+1 возобновляется обычный график, т. е. сборки experimental/beta будут созданы на неделе N+1 и получат статус stable на неделе N+2.
- Если релиз stable, опубликованный на неделе N-1, изначально должен был получить статус lts на неделе N, присвоение ему статуса lts откладывается до понедельника недели N+1.
- Релизы nightly продолжают генерироваться и публиковаться на других каналах, так как являются полностью автоматизированными.
Заморозка релиза может произойти по следующим причинам:
- Нехватка людей, готовых опубликовать релиз AMP на канале stable и отслеживать его состояние. В настоящее время большинство людей, занимающихся релизами AMP, живет в США, поэтому большая часть таких заморозок будет приходиться на недели крупных американских праздников: День независимости (4 июля), День благодарения (четвертый четверг ноября), Рождество (25 декабря) и Новый год (31 декабря / 1 января).
- Чрезвычайная ситуация (например, проблема, затрагивающая безопасность или конфиденциальность), объявленная Техническим руководящим комитетом (TSC) или людьми, отвечающими за выпуск релиза.
- Другие ситуации, требующие особенного контроля за стабильностью кодовой базы (по решению TSC).
Во всех случаях, кроме чрезвычайных ситуаций, о заморозке релиза будет объявлено не позднее чем за месяц.
Обратите внимание, что заморозка релиза не подразумевает заморозки кода (если не было объявлено об обратном). Во время заморозки релиза код по-прежнему можно писать, рецензировать и включать в основную ветку.