Система управления версиями и расположение ветвей репозитория

С выпуском для бета-тестирования мы переместили версификацию SpongeAPI в семантическую версификацию (см. https://semver.org/). Это изменение означает, что каждый раз, когда мы делаем выпуск, мы должны дополнять версию в соответствии с правилами semver’а.

SemVer

SemVer использует схему `` X.Y.Z``, где X это major версия, Y это minor, а Z — версия patch. Версия, содержащая изменения, которые не являются обратно совместимыми, должна быть на одну версию major выше предыдущей версии. Если есть только новые функции, которые по-прежнему совместимы с предыдущими версиями, то новая версия будет на одну minor версию выше предыдущей версии, и если выпуск содержит только исправления, то будет увеличена только версия patch.

Это означает, что, например, 3.2.0 полностью совместим с 3.0.0, в то время как 4.0.0 не является бинарно совместимой с 3.0.0. 3.1.0 и 3.1.2 полностью взаимозаменяемы, не считая исправленных ошибок.

Расположение наших веток (описанных ниже) предназначено для содействия этому процессу, позволяя нам выпускать небольшие релизы без серьезных изменений и заставляя включать их в основной выпуск. Этот вид ветвления применяется к репозиториям SpongeAPI, SpongeCommon, SpongeForge и SpongeVanilla, но не к SpongeDocs.

SpongeAPI, SpongeCommon, SpongeForge и SpongeVanilla

Ветвь Bleeding

Ядром наших репозиториев является ветка bleeding. Почти все изменения будут добавлены к bleeding, включая новые функции, изменения и исправления. Версия bleeding всегда будет следующей основной версией с добавлением -SNAPSHOT (прим. 6.0.0-SNAPSHOT), чтобы обозначить, что она еще не окончательная сборка и может быть изменена.

Основной причиной наличия ветви bleeding является наличие полигона для внесения изменений. Даже опытные члены команды Sponge могут случайно вызвать сбои в работе или пропустить ошибку. Секция bleeding будет протестирована людьми из сообщества, которые хотят получить самую последнюю версию, а это значит, что мы можем гораздо быстрее исправить возникающие ошибки.

Стабильные ветви

Стабильные ветви представляют собой гораздо более стабильную платформу, на которой могут быть реализованы плагины и серверные реализации. Не будет прерываний API, только неразрушающие дополнения. Существует ветвь, названная в честь каждой крупной версии API, которая содержит новейшие API/реализацию для этой версии, включая любые незначительные выпуски или выпуски исправлений.

Когда придет время выпуска основной версии, новая ветка stable-x будет создана из bleeding, где x это новая основная версия — например, stable-5. bleeding будет соответствующим образом обновлен до следующего крупного релиза, как описано выше.

Изменения, которые были в bleeding на некоторое время, которые не содержат известных ошибок, и которые могут быть применены к предыдущему главному выпуску, будут отправлены в соответствующую ветку stable для будущей версии. Изменения будут сгруппированы в новую второстепенную версию, если только не требуется немедленное исправление, в этом случае вместо этого будет создана версия с исправлением ошибок. Когда будет выпущена версия, в репозитории API будет создан тег, указывающий на коммит релиза.

Ветви функциональностей (Feature Branches)

Новые возможности или изменения должны быть созданы в ветке feature/foo или fix/bar. Это должно быть основано на самой последнем коммите bleeding. Единственное исключение в том случае, если изменения несовместимы с нарушающими изменениями bleeding, в этом случае вы должны основываться на соответствующем stable-x. В своем pull-request запросе вам необходимо указать, почему ваше изменение не может быть включено в bleeding — например, исправление ошибки в функции, которая была удалена Mojang в более поздней версии.

Если внесенные изменения не нарушают предыдущий релиз, команда Sponge также может включить некоторые изменения (cherry-pick) в одну или несколько stable ветвей, предполагая, что после слияния изменений в bleeding проблем не возникнет.

SpongeDocs

Сами SpongeDocs являются неверсированными в соответствии с нашей философией, так как они никогда не будут закончены, а будут постоянно меняться. Однако они нацелены на определенную версию API, как правило, на самую последнюю версию SpongeAPI.

Основная ветвь

Основной веткой для SpongeDocs является stable. Каждый новый коммит в stable вызывает пересборку сайта документации <https://docs.spongepowered.org/>`_. Коммиты в stable чаще всего делаются чтобы описать самый актуальный выпуск SpongeAPI или исправить частые ошибки в документации.

Ветви функциональностей (Feature Branches)

Всякий раз, когда описывается новая функция, старые тексты обновляются или изменяются или документы реструктурируются, это делается в ветке feature/foo или fix/bar. Затем эти ветви будут пересмотрены и, если они будут признаны завершенными, могут быть объединены.

Ветвь функциональностей может быть объединена только с главной, если внесенные в нее изменения/дополнения правильны в отношении SpongeAPI, на которую в настоящий момент направлен SpongeDocs. Любые функциональные ветви, описывающие функции, еще не включенные в релиз, остаются несвязанными до выпуска соответствующей версии API и становятся новой целевой версией для SpongeDocs. Однако команда Docs может собирать дополнения для конкретной версии в одной ветви.

release branch example

Ветвь релиза

SpongeDocs использует ветви release/x.y.z для публикации документации для более старых версий API, таких как API 3.1.0. Более старые выпуски API доступны в соответствующих ветвях. Всякий раз, когда выпускается новая версия API, команда документации создают новую ветвь release/x.y.z и затем перемещает master на новую версию API. коммит в ветвь release также вызывает перестройку более старой версии документации, как и в основной ветке.