Skip to content

ApplicationVersion should be SemanticVersion (for nugets version like… - #1

Open
DDemaNN wants to merge 1 commit into
Inceptum:1.3.1from
DDemaNN:SemanticVersion
Open

DDemaNN wants to merge 1 commit into
Inceptum:1.3.1from
DDemaNN:SemanticVersion

Conversation

@DDemaNN

@DDemaNN DDemaNN commented Jun 1, 2015

Copy link
Copy Markdown

ApplicationVersion should be SemanticVersion (for nugets version like "1.4.0-unstable0002")

@tvilkov

tvilkov commented Jun 1, 2015

Copy link
Copy Markdown
Contributor

The feature is seen as a potential problems source.

  1. May introduce conflicts with our current versioning convention for appserver apps:
    major.minor.patch.build, not major.minor.patch as it's in SemVer notation.
    For instance, what version will be considered higher 1.0.0.1 or 1.0.0-alpha?
  2. May introduce issues with app enumerating (in IApplicationRepository) and dependency resolving when mixing stable and prerelease packages.

Must to be carefully tested before applying.

@DDemaNN

DDemaNN commented Jun 1, 2015

Copy link
Copy Markdown
Author
  1. SemVer обратно совместим с нотацией major.minor.patch.build, build по сути расширяется до buildMetadata. 1.0.0.1 старше 1.0.0-alpha согласно SemVer сортировка происходит в лексикографическом порядке.
  2. Замена Version на SemVesion позволит решить несколько текущих багов при работе с SemVer Nuget.
    • AppServer успешно загружает Nuget вида Lib.1.4.0-unstable0002, но падает при попытке старта приложения, т.к. в конфигурации сохраняется версия вида 1.4.0.0
    • AppServer падает при наличии в репозитории двух сборок вида Lib.1.4.0-unstable0002 и Lib.1.4.0-unstable0003

@tvilkov

tvilkov commented Jun 2, 2015

Copy link
Copy Markdown
Contributor
  1. ОК
  2. Можно сказать NugetApplicationRepository.cs игнорировать нерелизные пакеты
public IEnumerable<ApplicationInfo> GetAvailableApps()
{
    var packages = from p in m_ApplicationRepository.GetPackages() where 
        p.Tags != null && p.Tags.Contains("Inceptum.AppServer.Application") 
        orderby p.Id select p;
    /* Меняется на */
    var packages = from p in m_ApplicationRepository.GetPackages() where 
        p.Tags != null && p.Tags.Contains("Inceptum.AppServer.Application") 
        && p.IsReleaseVersion() 
        orderby p.Id select p;
}

Мы у себя SemVer нотацию не используем. Если это действительно нужно, давайте соберем билд и потестируем.
Костя, Майк что думаете?

@DDemaNN

DDemaNN commented Jun 2, 2015

Copy link
Copy Markdown
Author

Мы используем SemVer для Nuget, удобно использовать пререлизные пакеты для сборок из feature branches.

@KonstantinNosov

Copy link
Copy Markdown
Contributor

Проблема с nuget гораздо шире чем поддержка SemVer.
По хорошему - нужно пересмотреть реализацию. nuget расчитан на то, что обновляется в студии, под присмотром. Не все пакеты честно следят за зависимостями, обновление пакета от которого зависит приложение в пределах разрешенных к обновлению границ приводит к неработоспособности и т.д.
Нужно как-то фиксировать зависимости приложения с точностью до конкретных версий (возможно давать UI для перегрузки этих версий).

Можно предусмотреть возможность подсунуть AppServer'у кастомную реализацию IApplicationRepository например через конфиг. Для этого в принципе все готово - уже используется две - NugetApplicationRepository и FolderApplicationRepository. При старте достаются все известные реализации IApplicationRepository и по ним собираются все приложения...

@DDemaNN

DDemaNN commented Jun 3, 2015

Copy link
Copy Markdown
Author

Зависимости приложения можно явно указать в nuspec для привязки к конкретной версии зависимости, по сути SemVer сейчас поддерживается для зависимостей, но не поддерживается для самих HostedApplication.

KonstantinNosov pushed a commit that referenced this pull request Sep 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants