Процесс выпуска Wagtail
Официальные выпуски
Нумерация версий работает следующим образом:
- Версии нумеруются в формате
A.BилиA.B.C. A.B— это номер версии релиза функций. Каждая версия будет в основном совместима с предыдущим релизом. Исключение из этого правила будет указано в примечаниях к релизу.C— это номер версии исправительного релиза, который увеличивается для исправлений ошибок и обновлений безопасности. Эти релизы будут на 100% совместимы с предыдущим исправительным релизом. Исключением является случай, когда ошибку безопасности или потерю данных невозможно исправить без нарушения обратной совместимости. Если это произойдёт, примечания к релизу предоставят подробные инструкции по обновлению.- Перед новым релизом с новыми функциями мы создадим по крайней мере один релиз-кандидат. Эти релизы имеют формат
A.BrcN, что означает кандидатский релизNthверсииA.B.
В git каждый релиз Wagtail будет иметь тег, указывающий его номер версии. Кроме того, каждый ряд релизов имеет свою ветвь, называемую stable/A.B.x, и исправительные/безопасность релизы будут выпущены из этих веток.
Релиз с новыми функциями
Релизы с новыми функциями (A.B, A.B+1 и т. д.) происходят каждые три месяца — см. график выпуска для подробностей. Эти релизы будут содержать новые функции и улучшения существующих функций.
Исправительный релиз
Исправительные релизы (A.B.C, A.B.C+1 и т. д.) будут выпускаться по мере необходимости для исправления ошибок и/или проблем безопасности.
Эти релизы будут на 100% совместимы с соответствующим релизом с новыми функциями, если это невозможно по соображениям безопасности или для предотвращения потери данных. Поэтому ответ на вопрос «следует ли мне обновить до последнего исправительного релиза?» всегда будет «да».
Релиз с долгосрочной поддержкой
Некоторые релизы с новыми функциями будут обозначены как релизы с долгосрочной поддержкой (LTS). Эти релизы получат исправления безопасности и проблем с потерей данных в течение гарантированного периода времени, обычно в течение шести месяцев.
График выпуска
Wagtail использует свободную форму семантического векторирования. SemVer упрощает наглядное представление совместимости релизов друг с другом. Это также помогает предвидеть, когда будут удалены плагины совместимости. Это не чистая форма SemVer, поскольку каждый релиз с новыми функциями будет по-прежнему содержать несколько документированных обратных несовместимостей, где путь устаревания невозможен или не стоит затрат.
Политика устаревания
Релиз с новыми функциями может устаревать некоторые функции предыдущих релизов. Если функция устаревает в релизе A.B, она будет продолжать работать в следующей версии, но вызовет предупреждение. Функции, устаревшие в релизе A.B, будут удалены в релизе A.B+2, чтобы обеспечить выполнение устаревания не менее чем за 2 релиза с новыми функциями.
Например, если мы решили начать устаревание функции в Wagtail 1.4:
- Wagtail 1.4 будет содержать обратную совместимую копию функции, которая будет вызывать
RemovedInWagtail16Warning. - Wagtail 1.5 будет по-прежнему содержать обратную совместимую копию.
- Wagtail 1.6 удалит функцию полностью.
Предупреждения по умолчанию не отображаются. Вы можете включить отображение этих предупреждений с помощью параметра python -Wd.
Поддерживаемые версии
В любой момент времени команда разработчиков Wagtail будет поддерживать набор релизов на разных уровнях.
- Текущая разрабатываемая ветвь
mainполучит новые функции и исправления ошибок, требующие нетривиальной рефакторизации. -
Исправления, примененные к ветке
main, также должны быть применены к последней ветке релиза с новыми функциями, чтобы быть выпущенными в следующем исправительном релизе этого ряда, когда они исправляют критические проблемы:- Проблемы безопасности.
- Ошибки потери данных.
- Ошибки сбоя.
- Серьезные ошибки функциональности в новых функциях.
- Регрессии из более ранних версий Wagtail.
Правило большого пальца состоит в том, что исправления будут перенесены обратно в последний релиз с новыми функциями для ошибок, которые предотвратили выпуск в первую очередь (блокаторы выпуска).
- Исправления безопасности и ошибки потери данных будут применяться к текущей ветви
main, последней ветке релиза с новыми функциями и любым другим поддерживаемым веткам релизов с долгосрочной поддержкой. - Исправления документации, как правило, будут более свободно перенесены обратно в последнюю ветку релиза. Это связано с тем, что очень важно, чтобы документация последнего релиза была актуальной и правильной, а риск внесения регрессий является гораздо меньшим беспокойством.
В качестве конкретного примера рассмотрим момент времени, находящийся посредине между выпуском Wagtail 1.6 и 1.7. На данный момент:
- Функции будут добавлены в
main, чтобы быть выпущенными как Wagtail 1.7. - Критические исправления ошибок будут применены к ветке
stable/1.6.x, и выпущены как 1.6.1, 1.6.2 и т. д. - Исправления безопасности и исправления ошибок потери данных будут применены к
mainи к веткамstable/1.6.xиstable/1.4.x(LTS). Они будут вызывать выпуск1.6.1,1.4.8и т. д. - Исправления документации будут применены к
main, и, если легко перенести обратно, к последней стабильной ветке,1.6.x.
Поддерживаемые версии Django
Каждый релиз Wagtail объявляет, какие версии Django он поддерживает.
Как правило, новый релиз Wagtail с новыми функциями поддерживает последнюю версию с долгосрочной поддержкой и все последующие версии Django.
Например, рассмотрим момент времени до выпуска Wagtail 1.5 и после следующих релизов:
- Django 1.8 (LTS)
- Django 1.9
- Wagtail 1.4 (LTS) — Выпущен до Django 1.10 и поддерживает Django 1.8 и 1.9
- Django 1.10
Wagtail 1.5 будет поддерживать Django 1.8 (LTS), 1.9, 1.10. Wagtail 1.4 по-прежнему будет поддерживать только Django 1.8 (LTS) и 1.9.
График выпуска
Wagtail использует график выпуска на основе времени, с выпусками новых функций каждые три месяца.
После каждого выпуска с новыми функциями менеджер выпуска объявит график для следующего выпуска с новыми функциями.
Цикл выпуска
Каждый цикл выпуска состоит из трех частей:
Фаза один: предложение функций
Первая фаза процесса выпуска будет включать в себя определение основных функций, которые следует включить в следующую версию. Это должно включать в себя значительную предварительную работу над этими функциями — рабочий код лучше, чем большое проектирование.
Фаза два: разработка
Вторая часть графика выпуска — это период работы «с головой в проекте». Используя дорожную карту, созданную в конце фазы один, мы все очень усердно будем работать, чтобы завершить все запланированные задачи.
В конце фазы два все незавершенные функции будут отложены до следующего выпуска.
На этом этапе ветвь stable/A.B.x будет ответвлена от ветви main.
Фаза три: исправление ошибок
Последняя часть цикла выпуска посвящена исправлению ошибок — новые функции не будут приниматься в течение этого времени.
После того, как все известные блокирующие ошибки будут устранены, будет доступен релиз-кандидат для тестирования. Обычно окончательный выпуск следует через две недели, хотя этот период может быть продлён, если будут обнаружены новые блокирующие ошибки.
В течение этой фазы коммитеры будут всё более консервативны с обратными переносами, чтобы избежать введения регрессий. После кандидата релиза, будут перенесены только блокирующие ошибки выпуска и исправления документации.
Разработчики должны избегать добавления новых переводимых строк после кандидата релиза — это гарантирует, что у переводчиков есть весь период между кандидатом релиза и окончательным релизом, чтобы обновить переводы. Переводы будут повторно импортированы непосредственно перед окончательным выпуском.
Параллельно с этой фазой main может получать новые функции, которые будут выпущены в цикле A.B+1.
Выпуски с исправлениями ошибок
После релиза A.B с новыми функциями, предыдущий релиз переходит в режим исправления ошибок.
Ветка предыдущего релиза с новыми функциями stable/A.B-1.x будет содержать исправления ошибок. Критические ошибки, исправленные в main, должны быть также исправлены в ветке с исправлениями ошибок; это означает, что коммиты должны чётко разделять исправления ошибок от добавления функций. Разработчик, который внёс исправление в main, будет нести ответственность за его применение также и в текущей ветке с исправлениями ошибок.
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/contributing/release_process.html