Но не могу же я просто картинку запостить (ПОЧЕМУ?!), поэтому расскажу о семантическом версионировании, SemVer. Само по себе версионирование библиотек — очень простая вещь, и хорошо в двух экранах описано на сайте (RU, EN), поэтому расскажу о всяком интересном сбоку.
Как версионировать сайты, приложения c UI?
Никак, семвер неприменим для продуктов без публичного API как основной функции.
Чаще всего не версионируют вовсе, либо используют календарное версионирование (CalVer, 26.05.11), что по сути сводится к Pride Versioning как на картинке выше.
Делается это преимущественно для адресации внутри команды разработки ("сломалось в версии 26.7.12").
Можно ли доверять номеру версии при обновлении библиотеки?
Совсем нет, это социальный контракт. Меня, как автора библиотеки, от публикации чего-то ломающего или даже вредоносного в патч-версии останавливает только уровень инженерной культуры.
Понятно, что чем более популярен пакет и чем большего размера организация за ним стоит, тем меньше этот риск, но, как известно, вероятность встретить гужевую повозку в центре города мала, но никогда не равна нулю. Я встречал ломающие изменения в патч-версиях пакетов с миллионами загрузок в неделю.
Если изменение не ломающее, но болезненное — как быть?
dart-sass, например, очень любит в рамках минорных релизов deprecate'ить какие-то функции. Формально всё продолжает работать, но в терминал сыпется миллион предупреждений, что делает работу настолько некомфортной, что изменения в код всё равно приходится вносить (как минимум — отключить предупреждения). Stylelint тоже таким отличался, что привело к массовому недовольству и авторам плагинов пришлось в спешном порядке вносить изменения.
Хороших решений здесь нет. Никак не говорить о том, что какая-то функциональность будет изменена/не рекомендуется к использованию — плохо, в момент мажорного релиза потребителям придётся проделать очень много работы единоразово плюс переучивать наработанные паттерны. Если добавлять предупреждения — хорошо, если это можно сделать так, чтобы было только одно сообщение в консоли для каждого использования, но это архитектурно не всегда возможно.
Мне видится, что авторы вышеуказанных инструментов всё делают правильно — нужно готовить сообщество заранее. А что до болезненности — да, неприятно, но автоматика не упадёт, всё продолжит работать. Вполне в духе SemVer.
➿➿➿
Тема версионирования, на самом деле, как и любая другая, очень широкая, можно много чего рассказать.
Если есть какие-то вопросы на тему версионирования — напишите, расскажу :)
А мог бы просто смешную картинку запостить, ну...
