Skip to content

Release 0.5.0

Latest

Choose a tag to compare

@batarelkin batarelkin released this 14 Sep 09:38

Релиз переводит библиотеку на Jackson 3 и Spring Boot 4.

В релизе есть изменения, ломающие совместимость как по исходному коду,
так и бинарно: модуль max-bot-api-jackson работает только с Jackson 3,
стартер — только со Spring Boot 4. Модели, MaxBotAPI и остальные модули
не изменились.

Координаты артефактов: ru.etsft.max:max-bot-api-*:0.5.0.

ЛОМАЮЩИЕ ИЗМЕНЕНИЯ

  • max-bot-api-jackson построен на Jackson 3 (tools.jackson.*, 3.1.5) и
    транзитивно подтягивает tools.jackson.core:jackson-databind вместо
    com.fasterxml.jackson.core. С Jackson 2 модуль не работает.
  • JacksonMaxSerializer.getObjectMapper() возвращает
    tools.jackson.databind.ObjectMapper. Собственные сериализаторы и
    десериализаторы, зарегистрированные в этом mapper-е, нужно перевести на
    API Jackson 3 (ValueSerializer, ValueDeserializer, SerializationContext).
    Аннотации остаются в com.fasterxml.jackson.annotation.
  • max-bot-api-spring-boot требует Spring Boot 4.x. Для webhook-режима
    вместо spring-boot-starter-web нужен spring-boot-starter-webmvc.

СОХРАНЁННОЕ ПОВЕДЕНИЕ

  • JSON на входе и выходе такой же, как в 0.4.1. Там, где у Jackson 3
    изменились значения по умолчанию, выставлено прежнее поведение:
    null-поля не сериализуются (NON_NULL), null для примитивов не вызывает
    ошибку (FAIL_ON_NULL_FOR_PRIMITIVES отключён).
  • Перечисления по-прежнему пишутся в нижнем регистре: Jackson 3 не
    спрашивает findSerializer для enum, поэтому сериализатор
    зарегистрирован через findEnumSerializer. Без этого значения ушли бы в
    MAX в верхнем регистре.

ЗАВИСИМОСТИ

  • Jackson 2.21.1 → 3.1.5, Spring Boot 3.5.12 → 4.1.1,
    SLF4J 2.0.17 → 2.0.19.
  • Только для сборки и тестов: JUnit 5.14.3 → 6.0.3, JsonUnit 4.1.1 → 6.2.0,
    WireMock 3.13.1 → 3.13.2, Checkstyle 10.20.1 → 14.1.0,
    плагин SpotBugs 6.4.8 → 6.5.11, Gradle 9.4.1 → 9.7.1 (wrapper и образы
    в CI).

СБОРКА И ВЫПУСК

  • Новая задача ./gradlew centralBundle: собирает подписанные артефакты
    всех публикуемых модулей в build/central-bundle/
    max-bot-api-java-<версия>-bundle.zip с раскладкой Maven в корне — архив,
    который раньше приходилось собирать вручную.
  • Подпись обязательна, если передан ключ (signing.keyId или
    signingInMemoryKey): ошибка в настройке ключа роняет сборку, а не даёт
    неподписанный бандл.
  • GitLab CI, job publish: запускается вручную на тегах строго вида
    vX.Y.Z; проверяет, что тег совпадает с version в gradle.properties;
    подписывает ключом из защищённых переменных; убеждается, что .asc на
    месте; загружает бандл через Central Publisher API
    (scripts/central-upload.sh) в режиме USER_MANAGED и ждёт валидации.
    Окончательная публикация подтверждается в Central Portal.

ДОКУМЕНТАЦИЯ

  • README и README_RU: Jackson 3.x, Spring Boot 4.x,
    spring-boot-starter-webmvc для webhook-режима, версия 0.5.0 в примерах
    подключения.

ПРОВЕРКА

  • ./gradlew clean build: 680 модульных тестов, Checkstyle, SpotBugs,
    пороги покрытия — без ошибок. Тесты Jackson и клиента проходят и на
    Jackson 3.1.5 из BOM Spring Boot 4.1.1.
  • ./gradlew centralBundle: бандл содержит 7 модулей с jar, sources,
    javadoc, pom, module, подписями и контрольными суммами. Сборка с
    некорректным ключом падает; загрузка с неверным токеном завершается
    ошибкой 401.
  • liveTest против боевого MAX API на Jackson 3: 52 теста, 48 успешно,
    0 падений. Сериализация и разбор ответов сервера через Jackson 3 проходят
    на реальных данных. 4 теста пропущены окружением: deleteChat — MAX
    отказывает боту (нужно владение чатом), webhookRoundTrip — не задан
    MAX_IT_WEBHOOK_URL, unsubscribe — зависит от него и пропускается, так
    как подписка не создавалась, getChatByLink — в MAX_IT_CHAT_LINK
    ссылка-приглашение.