Как я могу объединить семантические версии?

#semantic-versioning

#семантическое управление версиями

Вопрос:

У меня есть продукт, который поставляется в двух форматах: отдельные пакеты и объединенный единый пакет. Единый пакет программно генерируется из отдельных пакетов. Семантические версии отдельных пакетов определяются и устанавливаются вручную.

Как я могу рассчитать семантическую версию для одного пакета на основе семантических версий каждого отдельного пакета, которая учитывает правила управления семантическими версиями отдельных пакетов?

Для целей обсуждения предположим, что у меня есть три отдельных пакета:

 a - 1.0.3
b - 2.1.0
c - 1.1.1
  

Как бы я рассчитал версию одного пакета?

Ответ №1:

Если вы хотите создать уникальную версию для каждой комбинации из трех, самый простой способ — явно показать каждый компонент:

 a - 1.0.3
b - 2.1.0
c - 1.1.1

mainprog-a1.0.3-b2.1.0-c1.1.1
  

Это помогает вам идентифицировать каждый отдельный компонент, который составляет целое. Это немного длинновато, поэтому альтернативно вы могли бы хэшировать это:

 sha256(a1.0.3-b2.1.0-c1.1.1)[1..10] = 6b5da1e87f
  

Вы хотели бы сохранить таблицу каждой суммы для базовых компонентов, которые ее создали, чтобы вы могли легко искать компоненты. Либо это, либо вы могли бы найти обратимый алгоритм хэширования для использования вместо этого.

Вы могли бы, конечно, просто суммировать числа, как в другом ответе:

 a - 1.0.3
b - 2.1.0
c - 1.1.1

result - (1 2 1).(0 1 1).(3 0 1)
result - 4.2.4
  

Но здесь неясно, какие три компонента составили 4.2.4. Вам нужно было бы придумать какую-то сложную математическую формулу, чтобы гарантировать, что отдельные версии всегда будут складываться в сопоставление 1 к 1 с окончательной версией пакета.

Ответ №2:

Числа станут довольно большими, но одним из решений является суммирование отдельных компонентов:

 a - 1.0.3
b - 2.1.0
c - 1.1.1

result - (1 2 1).(0 1 1).(3 0 1)
result - 4.2.4