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

Семантическое Версионирование (англ. 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. Тем не менее это соответствует спецификации, но не забывайте о данной особенности когда будете именовать свои релизы!

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

Ссылки

Помощь и обратная связь

Если вы обнаружили ошибку или хотите внести улучшения, и желаете внести изменения самостоятельно при помощи Pull Request
Если вы желаете предложить улучшение для этого документа

Обратиться за помощью

Если вы не нашли то что искали, воспользуйтесь поиском.

Если вам нужна помощь с чем-то конкретным, обратитесь к сообществу.