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?

Связанные уроки

  • se-02
Версионирование и релизы

0

1

Войти