Семантическое Версионирование

Семантическое Версионирование (англ. Semantic Versioning), также известный как semver (семвер) — спецификация о том, как присваивать версии релизам программного обеспечения.

Основная идея в том, что версия должна состоять из трёх обязательных номерных версий: {major}.{minor}.{patch}.

  • Мажорная версия — та версия, в которой можно полностью менять поведение, API, удалять старый код и т.д. Изменение данной версии, как правило, требует очень тщательного изучения различий между той, что используется на данный момент проектом. Они могут быть совершенно несовместимы. То, насколько мягким будет переход, зависит только от разработчиков.
  • Минорная версия — предназначена для добавления нового функционала или внесения больших изменений, которые соблюдают обратную совместимость (BC).
  • Патч версия — используется для внесения мелких изменений, в основном, исправлений ошибок или легкий рефакторинг кода.

Семантическое версионирование также поддерживает и дополнительные части, идущие после патч версии. Например, там могут быть метки о том что это предварительный релиз или какой-то конкретный билд. Например: 1.2.3-beta.1, 1.2.3+abc123 или 1.2.3-beta.1+abc123 — обратите внимание что билд отделяется + (плюс), а наименование предварительного релиза - (дефис). Данные дополнительные указатели говорят о том, что релиз не стабильный, и в нём могут как всё поменять, так и вовсе удалить, либо добавить совершенной новый функционал в будущем.

Зная как устроено данное именование, можно легко управлять зависимостями, например в Composer, который также использует семантическое версионирование. Это позволяет делать более точные ограничения, например, разрешить обновлять пакет только в пределах патч релиза, и вы будете уверены, что никакой новый API не попадёт на проект, а будут поступать только исправления ошибок.

Семантическое версионирование в Drupal

Drupal всегда использовал некое подобие семантического версионирования {drupal_core}-{major}.{minor}. То есть, ядро и модули были лишены патч версии, и все обновления поступали в минорной версии. Это могло вызывать некоторые сложности и не всегда понятно, чего ожидать от релиза, зная лишь новую версию.

Начиная с Drupal 8 в ядре адаптировали семантическое версионирование. Таким образом, начиная с данной мажорной версии друпала, именование ведётся в соответствии с данной спецификацией.

При нумерации версий ядра используются только {major}.{minor}.{patch}-{pre_release}. Единственное что может броситься в глаза, это то, что пред-релизное именование у нас ведётся без точки: alpha1, beta2, rc3, вместо того как это приводится в примерах alpha.1, beta.2, rc.3. Тем не менее это соответствует спецификации, но не забывайте о данной особенности когда будете именовать свои релизы!

Смотрите также

Ссылки

🌱 Помогите нам сделать документацию лучше!

Вся документация Druki с отрытым исходным кодом. Нашли ошибку или неточность? Создайте pull request.

Редактировать текущий документ Обсудить улучшение

Или узнайте как контрибутить.

🤔 По-прежнему нужна помощь?

Не нашли ответа на свой вопрос? Попросите помощи у сообщества!

Задайте вопрос на GitHub Смотрите другие ресурсы сообщества