Процесс выпуска Wagtail
Официальные выпуски
Нумерация версий работает следующим образом:
- Версии пронумерованы в формате
A.BилиA.B.C. -
A.B— это номер версии релиза с новыми функциями. Каждая версия будет в основном совместима с предыдущей версией. Исключение из этого правила будут указаны в примечаниях к релизу. -
C— это номер версии релиза с исправлениями, который увеличивается при выпуске исправлений ошибок и обновлений безопасности. Эти релизы будут на 100% совместимы с предыдущим релизом с исправлениями. Единственное исключение — это когда проблему безопасности или потери данных нельзя исправить без нарушения обратной совместимости. В этом случае примечания к релизу содержат подробные инструкции по обновлению. - Перед выпуском новой версии с новыми функциями мы сделаем по крайней мере один релиз-кандидат. Эти релизы имеют вид
A.BrcN, что означает релиз-кандидатNthверсииA.B.
В git каждый релиз Wagtail будет иметь тег, указывающий его номер версии. Кроме того, каждый ряд релизов имеет свою собственную ветку, называемую stable/A.B.x, и исправления ошибок/безопасности будут выпускаться из этих веток.
График выпуска
Wagtail использует свободную форму семантического управления версиями. SemVer упрощает наглядное представление совместимости релизов друг с другом. Он также помогает предвидеть, когда будут удалены совместимые пласты. Это не чистая форма SemVer, поскольку каждый релиз с новыми функциями будет по-прежнему содержать несколько документированных обратных несовместимостей, где путь устаревания невозможен или не стоит затраченных усилий.
Политика устаревания
Релиз с новыми функциями может устаревать определённые функции предыдущих релизов. Если функция устарела в релизе A.B, она будет продолжать работать в следующей версии, но будет выводить предупреждения. Функции, устаревшие в релизе A.B, будут удалены в релизе A.B+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/v3.0.3/contributing/release_process.html