Skip to main content
CheckTown
Валидаторы

Валидатор SemVer: Проверьте формат семантического версионирования

Опубликовано 6 мин чтения
В этой статье

Что такое семантическое версионирование?

Семантическое версионирование (SemVer) — схема версионирования, придающая значение каждой части номера версии. Созданная Томом Престоном-Вернером, SemVer обеспечивает универсальное соглашение для передачи характера и влияния изменений программного обеспечения исключительно через номера версий.

Следуя SemVer, разработчики и пользователи могут немедленно понять, вносит ли обновление критические изменения, новые функции или исправления ошибок — просто прочитав номер версии. Эта предсказуемость критически важна для управления зависимостями в современных экосистемах программного обеспечения.

Формат SemVer

Семантическая версия состоит из трёх числовых компонентов, разделённых точками: MAJOR.MINOR.PATCH.

  • MAJOR — увеличивается при несовместимых изменениях API. Переход с 1.x.x на 2.0.0 сигнализирует о том, что существующий код может перестать работать
  • MINOR — увеличивается при добавлении функциональности в обратно совместимом режиме. Переход с 1.2.x на 1.3.0 означает новые функции без нарушения существующих
  • PATCH — увеличивается при обратно совместимых исправлениях ошибок. Переход с 1.2.3 на 1.2.4 означает, что исправлены только ошибки
  • Каждый компонент должен быть неотрицательным целым числом и не должен содержать ведущих нулей (1.02.3 недопустимо)

Попробуйте бесплатно — без регистрации

Проверить версию SemVer →

Диапазоны версий

Менеджеры пакетов используют диапазоны версий для указания совместимых версий зависимостей. Понимание этих диапазонов необходимо для надёжных сборок.

  • Диапазоны карет (^1.2.3) — допускают изменения, не затрагивающие крайнюю левую ненулевую цифру. ^1.2.3 означает любую версию от 1.2.3 до, но не включая 2.0.0
  • Диапазоны тильды (~1.2.3) — допускают только изменения уровня patch. ~1.2.3 означает любую версию от 1.2.3 до, но не включая 1.3.0
  • Точная версия (1.2.3) — приемлема только эта конкретная версия, без гибкости

Сценарии использования

Семантическое версионирование является основой современного управления пакетами и рабочих процессов выпуска.

  • npm, pip и Cargo — менеджеры пакетов полагаются на SemVer для разрешения деревьев зависимостей и предотвращения попадания критических изменений в производство
  • Конвейеры CI/CD — автоматизированные системы используют теги SemVer для запуска сборок, публикации релизов и создания журналов изменений
  • Версионирование API — REST API использует основные версии в URL-адресах (v1, v2) для поддержания обратной совместимости при развитии
  • Авторы библиотек — публикация библиотеки с правильным SemVer сигнализирует пользователям, когда обновления безопасны

Предрелиз и метаданные

SemVer поддерживает два необязательных расширения, добавляющих контекст к номерам версий без влияния на правила приоритета.

  • Идентификаторы предрелизной версии — добавляются после дефиса: 1.0.0-alpha, 1.0.0-beta.2, 1.0.0-rc.1. Они указывают на версии, которые ещё не стабильны и имеют более низкий приоритет, чем соответствующий релиз
  • Метаданные сборки — добавляются после знака плюс: 1.0.0+build.123, 1.0.0-beta+exp.sha.5114f85. Метаданные сборки игнорируются при определении приоритета версии
  • Предрелизные версии сортируются с использованием идентификаторов, разделённых точками: числовые идентификаторы сортируются числово, буквенно-цифровые — лексически

FAQ

Обрабатывается ли 0.x.x иначе, чем 1.x.x?

Да. В SemVer версия 0.x.x указывает на начальную разработку, где всё может измениться в любой момент. Публичный API не должен считаться стабильным. После выпуска 1.0.0 вы обязуетесь следовать правилам SemVer для всех последующих релизов.

Можно ли использовать v в качестве префикса (v1.2.3)?

Спецификация SemVer не включает префикс v — канонический формат: 1.2.3. Однако многие инструменты (теги Git, релизы GitHub) по соглашению используют v1.2.3. Большинство валидаторов принимают обе формы.

Что произойдёт, если я забуду увеличить мажорную версию при критическом изменении?

Потребители, использующие диапазоны карет, автоматически получат обновление, и их сборки могут неожиданно сломаться. Именно поэтому дисциплина SemVer критически важна — это социальный контракт между авторами библиотек и потребителями.

Похожие инструменты