Версионирование
Все восемь языковых пакетов делят одну версионную строку на релиз: 1.YYYYMMDD.N.
Формат
| Часть | Значение | Почему |
|---|---|---|
MAJOR | 1 — зафиксирован | Позволяет пути Go-модуля обходиться без суффикса /vN, который требовался бы при MAJOR ≥ 2. Любое действительно ломающее изменение пайплайна отражается мажором репозитория кода, а не новым путём модуля. |
MINOR | YYYYMMDD (UTC-дата релиза) | Монотонно растёт по дням — 20260919 < 20260920 < 20261001. Сортируется как целое по правилам semver. |
PATCH | N — счётчик за день | 0 для первого релиза за день, далее 1, 2, … (редко). |
Пример: 1.20260921.0 — первый релиз 21 сентября 2026 (UTC).
Как считается номер
Прямо в workflow daily-check:
today="$(date -u +%Y%m%d)"
n="$(git tag --list "v1.${today}.*" | wc -l | tr -d ' ')"
version="1.${today}.${n}"Полученная строка вставляется в каждый языковой манифест — pyproject.toml, package.json, тег go.mod, pom.xml, composer.json, Cargo.toml — как есть. Никакой язык не видит переведённой формы.
Что резолвится как «последняя»
Все релизы — стабильные (не prerelease), поэтому @latest / LATEST / ^1.0.0 берут максимальную опубликованную:
pip install valeryverkhoturov-wb-api-clientnpm install @valeryverkhoturov/wb-api-clientgo get github.com/ValeryVerkhoturov/wb-api-client-go@latest<version>[1.0.0,)</version> <!-- диапазон: любая 1.x -->composer require valeryverkhoturov/wb-api-clientopm install wb-api-clientdotnet add package ValeryVerkhoturov.WbApiClientcargo add wb-api-clientФиксация версии
Фиксируйте точный 1.YYYYMMDD.N, когда важна воспроизводимость (CI, production):
valeryverkhoturov-wb-api-client==1.20260926.0"@valeryverkhoturov/wb-api-client": "1.20260926.0"go get github.com/ValeryVerkhoturov/wb-api-client-go@v1.20260926.0<version>1.20260926.0</version>"valeryverkhoturov/wb-api-client": "1.20260926.0".ЗависитОт("wb-api-client", "1.20260926.0")<PackageReference Include="ValeryVerkhoturov.WbApiClient" Version="1.20260926.0" />wb-api-client = "=1.20260926.0"Каденция релизов
Новые версии выпускаются только когда апстрим-спецификации реально меняются. Технически: daily-check.yml запускается в 06:15 UTC, сверяет swaggers/checksums.txt с предыдущим прогоном и перегенерирует + тегает только если что-то изменилось. Спокойная неделя = ноль релизов; выкатка портала WB обычно даёт один релиз следующим утром.
Ручной форс-релиз (например, чтобы забрать client-side фикс): Actions → Daily upstream check → Run workflow с force: true.
Депрекации
WB убирает поля по собственному графику. Когда это случается:
- Из спецификации пропадает поле.
- На следующем прогоне daily-check перегенерирует без поля.
- Публикуется новая версия без поля.
- Клиенты на предыдущей версии продолжают работать — в их локальных моделях поле есть, просто приходят null'ы.
Формального окна депрекации нет — источник истины — контракт апстрима. Если нужно время на миграцию, фиксируйте старую версию.
Расхождение версий между языками — невозможно по построению
Одна и та же строка 1.YYYYMMDD.N вставляется в манифест каждого языка в одном и том же вызове generate-clients.py, и все языки перегенерируются в каждом релизном прогоне — поэтому получить «Python 1.20260921.0, а Go 1.20260919.0» из одного апстрим-состояния невозможно.
Единственный способ уплыть: сломается публикация одного языка (например, Maven Central отклонит подпись). Тег и исходник уже в GitHub; ручной перезапуск конкретного publish-job для этого языка чинит ситуацию.
