Open Source
Версионирование и релизы
В 2016 году автор популярного npm пакета изменил поведение в patch версии. Миллионы проектов обновились автоматически через `^1.0.0` range и сломались в production. Semver - это договор. Нарушить его однажды значит потерять доверие навсегда.
- React 16 → 17: zero breaking changes, migration guide объяснял каждое изменение
- Angular: строгое semver, каждый major выходит раз в полгода по расписанию
- semantic-release: используется в Babel, Jest, Electron для полностью автоматических релизов
- Vue 2 → 3: два года migration period, compatibility builds - пример как делать major change
Semantic Versioning: major.minor.patch
**Semver (Semantic Versioning)** - соглашение о том что значат цифры в версии пакета. Это контракт с пользователями: изменив версию определённым образом, вы сообщаете что именно изменилось. Нарушение semver - одна из самых токсичных вещей которые может сделать OSS-автор.
**Нарушение semver - доверие сложно восстановить.** Если PATCH изменяет поведение которое сломало prod проект - это нарушение контракта. Пользователи будут pin exact versions (`1.2.3` вместо `^1.2.3`) и перестанут автоматически обновляться. Это особенно болезненно для security patches.
Вы добавляете в функцию новый обязательный параметр. Какой version bump правильный?
CHANGELOG и автоматизация релизов
**CHANGELOG.md** - история изменений для пользователей. Не для вас - для них. Хороший CHANGELOG отвечает: «мне нужно обновиться и что сломается?». Conventional commits позволяют генерировать CHANGELOG автоматически.
Почему conventional commits (feat:, fix:, chore:) важны не только для стиля, но и для автоматизации?
Ключевые идеи
- patch: bug fix без breaking changes. minor: новые фичи без breaking changes. major: breaking changes
- Нарушение semver - доверие сложно восстановить, пользователи начинают pin exact versions
- CHANGELOG.md - для пользователей, не для разработчиков: что изменилось и как мигрировать
- Conventional commits + release-it/semantic-release = автоматический CHANGELOG и version bump
- Pre-release: alpha → beta → rc перед major версией
Связанные темы
Публикация освоена. Переходим к карьерному аспекту: как OSS строит репутацию.
- Следующий урок курса — Логическое продолжение
Вопросы для размышления
- Вы хотите переименовать функцию (она называется плохо). Как это сделать с минимальным disruption для пользователей? Опишите migration path.
- Почему некоторые проекты выпускают major версию каждые полгода по расписанию (Angular), а не по мере готовности breaking changes?