Skip to content

NuGet: notes #12

@binali-rustamov

Description

@binali-rustamov

В релизной конфигурации билда отключена прямая линковка к проектам, вместо этого используется линковка нагет пакетов.
Каждый пакет имеет список зависимостей NextApi которые могут настраиваться отдельно.
Разберем пример, используя схему зависимостей выше, давайте представим что мы поменяли что-то в NextApi.Server.
В текущей реализации нужно собирать все пакеты от которых NextApi.Server зависит: NextApi.Server.Common, NextApi.Common.
Последний пакет необходимо перестраивать, потому, что NextApi.Server косвенно через NextApi.Server.Common зависит от NextApi.Common.
Разберем еще один пример, более сложный по части зависимостей. Представим что нам нужно сделать мелкую правочку в NextApi.Testing.
После того как мы выложили код, нам нужно перестроить не только сам измененный пакет, но и все дерево зависимостей, а это: NextApi.Common, NextApi.Server.EfCore, NextApi.Client.
Теперь можно перестраивать только измененные пакеты. Для этого необходимо просто поддерживать конфигурацию минимальных версий для каждого пакета.
Разберем пример данной конфигурации, для пакета NextApi.Testing с правилом постройки:

nugetize-testing:
  <<: *nugetize
  variables:
    projectFolder: src/base/NextApi.Testing
    projectName: NextApi.Testing
    NEXTAPI_CLIENT_VERSION: "3.0"
    NEXTAPI_EFCORE_VERSION: "3.0"

В данной конфигурации NEXTAPI_CLIENT_VERSION со значением '3.0' говорит о том, что данный пакет требует последнюю версию с индексом 3.0.. То есть Nuget понимает, что он может установить максимальную версию зависимость которая не выходит за пределы диапазона 3.0. >= versionToInstall < 3.1.*. Аналогичное описание для NEXTAPI_EFCORE_VERSION.
Мы будем использовать SemVer: https://semver.org, выдержка которая нам нужна:

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards compatible manner, and .
PATCH version when you make backwards compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

В конечном итоге новые версии NextApi будут выходить в формате major.minor.ciBuildId, где ciBuildId номер пайплайна в Gitlab.
Менять мажорную версию мы будем, только в случае breaking change функционала, в других случаях нужно внедрять новые функций с поддержкой обратной совместимости.
Простой случай, когда Nuget будет устанавливать пакет в Ваш проект, он подберет максимально доступную версию для зависимостей по шаблону 3.0.*. Допустим на сервере есть версии 3.0.200, 3.0.201, 3.0.202. Nuget установит 3.0.202. Также можно устанавливать и фиксировать версии вручную.

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions