GH GambleHub

Семантикалык версиялоо

Семантикалык чыгаруу

1) Эмне SemVer жана эмне үчүн керек

SemVer керектөөчүлөр жаңылануудан эмнени күтөөрүн түшүнүшү үчүн артефакттарга (китепканаларга, APIлерге, кызматтарга, схемаларга) версияларды ыйгаруунун болжолдуу эрежелерин белгилейт:
  • MAJOR - шайкеш келбеген өзгөрүүлөр (breaking changes).
  • MINOR - API менен шайкеш келген жаңы функционалдык.
  • PATCH - кайтарылма ылайыктуу кемчиликтерди оңдоо.

Максаты: келишимдердин туруктуулугу жөнүндө макулдашуу жана жаңыртуулардын баасын төмөндөтүү.

2) Версия формат

Негизги формат:
  • `MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD]`

`1. 4. 7 '- туруктуу чыгаруу.
`1. 5. 0-rc. 2 '- pre-релиз (release candidate № 2).
`2. 0. 0+linux. arm64 '- build-метадеректер (версияларды салыштырууга таасир этпейт).

Салыштыруу эрежелери:

1. Адегенде "MAJOR", андан кийин "MINOR", андан кийин "PATCH" салыштырылат.

2. Pre-релиздер тиешелүү туруктуу чыгаруу аз: '1. 2. 0-rc. 1 < 1. 2. 0`.

3. Build-метадеректер ('...') тартипке таасир этпейт: '1. 2. 0+001 == 1. 2. 0`.

3) Эмне breaking change болуп эсептелет

Breaking change - керектөөчүнүн аракетин талап кылган ар кандай өзгөртүү:
  • Коомдук ыкмалар/эндпоинттердин белгисин алып салуу/атын өзгөртүү/өзгөртүү.
  • Кирүү/чыгуу форматын өзгөртүү (JSON схемасы, түрлөрү).
  • Ката келишимдерин өзгөртүү (коддор/структуралар).
  • side-effects/SLAs өзгөртүү (мисалы, катуу чектер же жаңы милдеттүү талаалар).

Эмес breaking (туура ишке ашырууда): кошумча талааларды кошуу, жаңы баалуулуктар менен enum кеңейтүү (эгерде кардар аларды этибарга албаса), жаңы эндпоинттер, учурдагы чакырыктарга таасир этпеген дефолттор менен жаңы желектер.

4) Pre-релиздер жана каналдык стратегиялар

Pre-релиздер SemVer убадаларын бузбастан сыноого мүмкүндүк берет:
  • Tags: 'alpha', 'beta', 'rc'. Мисал: '2. 3. 0-beta. 3`.
  • Каналдар: nightly → alpha → beta → rc → stable.
  • Саясат: Pre-релиздер демейки өндүрүштүк чогултуу үчүн транзиттик көз карандылык катары түшпөшү керек.

5) Версия диапазондору жана көз карандылык тактыгы

Чыныгы экосистемаларда диапазондордун экспрессиялары колдонулат:

5. 1 Node/npm (SemVer демейки)

`^1. 4. 2` ≈ `>=1. 4. 2 <2. 0. 0 '(MINOR/PATCH уруксат берет, MAJOR бекитет).
`~1. 4. 2` ≈ `>=1. 4. 2 <1. 5. 0 '(MINOR ичинде PATCH жол).
`1. 4. x '- 1 ар кандай жамоо. 4.
Так пин: '1. 4. 2`.

5. 2 Python (PEP 440, pip)

`~=1. 4. 2` ≈ `>=1. 4. 2,==1. 4.`.
`>=1. 4,<2. 0 '- так чек аралар.

5. 3 Maven/Gradle (Java)

`[1. 4,2. 0) '- кошо алганда/гана.
Прод-критикалык экспонаттар үчүн катуу тепкилөө сунушталат.

5. 4 Go modules

Ар дайым толук теги 'vMAJOR. MINOR. PATCH ';' v2 + 'модулунун суффиксин талап кылат '/v2'.

Сунуш: тиркемелер үчүн - так пиндер (reproducible builds). Китепканалар үчүн - caret диапазондору (жаңылоону сынбастан жеңилдетүү).

6) CHANGELOG и Conventional Commits

Структураланган өзгөртүү журналы ачык-айкындуулукту жогорулатат.

Conventional Commits:

feat(payments): add PIX refund endpoint fix(api): correct 400 → 422 on invalid payload perf(cache): reduce p99 by 20%
refactor(core): extract rule engine docs: update API usage examples chore(deps): bump lodash to 4. 17. 21 feat!: remove legacy webhook v1 (BREAKING CHANGE:...)

Типы: `feat`, `fix`, `perf`, `docs`, `refactor`, `chore` и т. д.
Кыйытма белгиси же блок 'BREAKING CHANGE' MAJOR жогорулатуу жарыялайт.
CHANGELOG коммиттердин тарыхынан (release-notes bots) пайда болот.

7) API үчүн чыгаруу саясаты

Коомдук API: катуу SemVer; breaking → MAJOR.
HTTP/REST: URL версиясы/аталышы: '/v1/... ', '/v2/...' же 'Accept: application/vnd. org. service. v2+json`.
JSON схемалар: майда кеңейтүү - жаңы кошумча талаалар; major - милдеттүү түрдө алып салуу/өзгөртүү.
gRPC/Protobuf: жаңы сандар менен жаңы талааларды кошуу; талаа номурларын кайра колдонбоңуз; жок → deprecate, эмес, "сындырып" бар.

8) Маалыматтар жана миграция схемалары

DD миграциялары тиркеменин версиялары менен синхрондоштурулат: 'app @ 1. 8. 0 'талап' schema @ 1. 8. x`.
Схеманы өзгөртүү үчүн - фазалар: expand (кошуу), migrate, contract (алып салуу). Эски келишимди алып салганда гана MAJOR версиясын көтөрүңүз.
Миграция учурунда кош жазууну/окууну колдоо.

9) Монорепо жана микросервис

Multi-package: ар бир пакети өзүнүн 'MAJOR. MINOR. PATCH`; мета-артефакттар үчүн гана жалпы тамыр релиздер цикли.

Стратегияларды өзгөртүү:
  • Independent versions (Lerna/Changesets) - изоляцияны күчөтөт.
  • Lock-кадам - жөнөкөй байланыш, бирок көбүрөөк жалган MAJORs.
  • Микросервистер үчүн контракттарды (OpenAPI/Protobuf) өзүнчө версия менен бекитиңиз: 'contract @ 2. 1. 0 ', кызмат ага ылайык келет.

10) CI/CD релиздерди автоматташтыруу

Conventional Commits негизинде Auto версиясы:
  • `fix` → `PATCH`, `feat` → `MINOR`, `!`/`BREAKING` → `MAJOR`.
Автотегдер жана артефакттардын кол тамгасы:
yaml
Pseudo-workflow steps:
- run: npx semantic-release
- run: git tag v$NEW_VERSION && git push --tags
- run: cosign sign ghcr. io/org/app:v$NEW_VERSION

CHANGELOG генерациясы, релиз-ноут жарыялоо, GitOps-репо көз карандылыкты жаңыртуу, 'main' дайыма акыркы туруктуу тегин көрсөтүп турат.

11) Депривация саясаты (deprecation policy)

кулактандыруу: MINOR-релизинде deprecated катары белгилөө, EOL мөөнөтү (мисалы, 90 күн).
Байкоо: колдонуучу/tenant контекстинде эскирген End Points колдонуу Логин.
Алып салуу: кийинки MAJOR. Миграция жолун документтештириңиз.

12) мисалдар жана үлгүлөр

12. 1 SemVer валидациясынын үзгүлтүксүз билдирүүсү

regex
^(0    [1-9]\d)\.(0    [1-9]\d)\.(0    [1-9]\d)(?--([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))? (?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))?$

12. 2 салыштыруу мисалдар

`1. 2. 3` < `1. 10. 0 '(MINOR салыштыруу).
`2. 0. 0-rc. 1` < `2. 0. 0`.
`1. 2. 3+build. 5` == `1. 2. 3`.

12. 3 Көз карандылык саясаты (YAML мисалы)

yaml policy:
libraries:
default_range: "^MAJOR. MINOR. PATCH"
pin_security_critical: true services:
pin_exact: true allow_prerelease_in_nonprod: true api_contract:
require_same_minor: true forbid_major_mismatch: true

13) Анти-үлгүлөрү

'latest '/сүзүүчү тегтерди прод.
Чыныгы сыныктары жок MAJOR жогорулатуу ("маркетинг нускалары").
Жашыруун breaking-өзгөрүүлөр 'PATCH' деген ат менен.
Pre-релиздер өткөөл көз карандылыкта прод-тиркемелер.
Жаңы тегсиз артефактты өзгөртүү (мутабель версиялары).
Коддун жана БД схемасынын макулдашылбаган версиялары.

14) киргизүү чек-тизмеси (0-45 күн)

0-10 күн

SemVer милдеттүү стандарт катары кабыл алуу, сынык критерийлерин бекитүү.
Conventional Commits жана 'BREAKING CHANGE' талаасы менен PR үлгүсүн киргизүү.

11-25 күн

semantic-release/changesets, автогенерация CHANGELOG туташтыруу.
Кол коюу жана артефакттарды vX теги боюнча жарыялоону тууралаңыз. Y.Z`.

26-45 күн

Эски APIлерди колдонуу үчүн deprecation policy жана телеметрия киргизиңиз.
Контракттардын (OpenAPI/Proto) жана кызматтардын версияларын синхрондоштуруу.
Тыюу 'latest' жана саясат деъгээлинде мутабель теги (ORA/CI регламенттери).

15) Жетилүү метрикасы

SemVer тегинде гана чыгарылган экспонаттардын%.
MINOR версияларынын ортосундагы орточо миграция убактысы.
улам жашыруун breaking-өзгөрүүлөр менен окуялар саны.
Кампа Conventional Commits (> 95%).
сууда сүзүүчү диапазондору жок көз карандылыктын үлүшү (> 90%).

16) Качан SemVer кереги жок

Тышкы керектөөчүлөрдүн жок ички тез прототиптери (даталанган чыгаруу ылайыктуу).
Маалыматтар/эксперименталдык сүрөттөр менен моделдер (мыкты конвертер деъгээлинде шайкештиги менен Model/Schema Versioning).
туруктуу коомдук API жок мазмун пакеттери.

17) Корутунду

SemVer - өндүрүүчү менен керектөөчүнүн ортосундагы ишеним келишими. Шайкештикти бузган нерсени так аныктаңыз, релиздердин түрлөрүн таанууну жана артефакттарды жарыялоону автоматташтырыңыз, ачык-айкын CHANGELOG жүргүзүңүз жана депривация саясатын сактаңыз. Ошондо жаңыртуулар күнүмдүк, болжолдонгон жана коопсуз болот - ал эми инфраструктура жана API бизнес үчүн шок жок өнүгөт.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.