Могу ли я определить, изменились ли источники пакета Nuget при выполнении CI? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть решение с несколькими проектами netstandard2.0, каждый из которых создает свой собственный пакет Nuget:

+ MySln.sln
--+ MySln.ProjectOne
--+ MySln.ProjectTwo
--+ MySln.ProjectThree

Мой скрипт CI работает над решением и в основном таков:

dotnet restore MySln.sln
dotnet pack /p:PackageVersion=$(buildVersion) MySln.sln
                --configuration release -o $(artifactDirectory)

Это создает три пакета Nuget, по одному для каждого ProjectOne, ProjectTwo и ProjectThree.

Проблема в том, что CI срабатывает при любом коммите, поэтому я строю все три, даже когда я, например, просто изменяю ProjectTwo или что-то, не связанное ни с одним из проектов.

Теперь мне интересно, что лучший (а именно: самый простой в обслуживании, особенно при добавлении новых проектов) подход - это публиковать только пакеты Nuget, в которых фактические источники изменились. Я не могу просто сделать бинарный diff, потому что скомпилированные сборки отличаются на каждой компиляции из-за метки времени компилятора, и номер версии также отличается каждый раз из-за сервера сборки.

Я могу подумать о том, чтобы сделать что-то, где я снимаю отпечатки пальцев со всех источников пакета * (который включает в себя не только файл .cs, например, встроенные ресурсы, файл лицензии и т. Д.), Но прежде чем я соберу свой собственный, Интересно, есть ли какое-то общее решение для этого уже; Я предполагаю, что другие проекты столкнулись с этим.

* Или более разумно, сделайте git log -n 1 --pretty=format:%H -- MySln.ProjectOne для каждого проекта.

...