---
title: "Версионирование"
description: "Все восемь языковых пакетов делят одну версионную строку на релиз: 1.YYYYMMDD.N."
lang: ru-RU
source: https://valeryverkhoturov.github.io/wb-api-client-docs/guides/versioning
---

# Версионирование

Все восемь языковых пакетов делят одну версионную строку на релиз: **`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:

```bash
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` берут максимальную опубликованную:

**Python**

```bash
pip install valeryverkhoturov-wb-api-client
```

**TypeScript**

```bash
npm install @valeryverkhoturov/wb-api-client
```

**Go**

```bash
go get github.com/ValeryVerkhoturov/wb-api-client-go@latest
```

**Java**

```xml
<version>[1.0.0,)</version>   <!-- диапазон: любая 1.x -->
```

**PHP**

```bash
composer require valeryverkhoturov/wb-api-client
```

**OneScript**

```bash
opm install wb-api-client
```

**C#**

```bash
dotnet add package ValeryVerkhoturov.WbApiClient
```

**Rust**

```bash
cargo add wb-api-client
```

## Фиксация версии

Фиксируйте точный `1.YYYYMMDD.N`, когда важна воспроизводимость (CI, production):

**Python**

```txt
valeryverkhoturov-wb-api-client==1.20260926.0
```

**TypeScript**

```json
"@valeryverkhoturov/wb-api-client": "1.20260926.0"
```

**Go**

```bash
go get github.com/ValeryVerkhoturov/wb-api-client-go@v1.20260926.0
```

**Java**

```xml
<version>1.20260926.0</version>
```

**PHP**

```json
"valeryverkhoturov/wb-api-client": "1.20260926.0"
```

**OneScript**

```bsl
.ЗависитОт("wb-api-client", "1.20260926.0")
```

**C#**

```xml
<PackageReference Include="ValeryVerkhoturov.WbApiClient" Version="1.20260926.0" />
```

**Rust**

```toml
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 убирает поля по собственному графику. Когда это случается:

1. Из спецификации пропадает поле.
2. На следующем прогоне daily-check перегенерирует без поля.
3. Публикуется новая версия без поля.
4. Клиенты на предыдущей версии продолжают работать — в их локальных моделях поле есть, просто приходят null'ы.

Формального окна депрекации нет — источник истины — контракт апстрима. Если нужно время на миграцию, фиксируйте старую версию.

## Расхождение версий между языками — невозможно по построению

Одна и та же строка `1.YYYYMMDD.N` вставляется в манифест каждого языка в одном и том же вызове generate-clients.py, и все языки перегенерируются в каждом релизном прогоне — поэтому получить «Python 1.20260921.0, а Go 1.20260919.0» из одного апстрим-состояния невозможно.

Единственный способ уплыть: сломается публикация одного языка (например, Maven Central отклонит подпись). Тег и исходник уже в GitHub; ручной перезапуск конкретного publish-job для этого языка чинит ситуацию.

<p align="center">
  <img src="/pics/blueberry-calendar-ascii-animated.webp" style="height: 200px; width: auto; max-width: 100%; object-fit: contain" alt="wb-api-client logo">
</p>
