Nuget Updater
Nuget is really good at
Dependencies which are:
Static
External
Rarely-updated
Shallow
For us, Nuget is pretty good at
Creating easy local builds
- only have to check out one repository
- dependencies are specified explicitly – more reliable
Speeding up Teamcity builds
- no snapshot dependencies
- each build can start immediately
- fewer artifacts to download
The state of Compare
Shared Utils
Backup Reader
AST Parser
Compare Engine
SQL Tools UI
Data Compare Engine
SQL Compare UI
Installer
Migrations v2
The state of Compare (reality)
We have to keep the Shared Utils version consistent across the whole build chain
Shared Utils
Every single thing in the entire universe
Tradeoffs
While individual builds are fast ..
Shared Utils
Backup Reader
AST Parser
Compare Engine
SQL Tools UI
Data Compare Engine
SQL Compare UI
Installer
Migrations v2
Time from Engine to UI to installer is longer
- Packages have to be manually updated at each step
Two possible solutions
Semantic versioning
- drop any compatible version of the engine into a UI build
- going to investigate this more in the future (see GrahamH)
Automate NuGet
- this is what we’re trying
Why not vanilla nuget?
We can
- be faster to use (choice of UI vs commandline)
- be easier to automate
- have better dependency resolution (at least compared to nuget v2)
- run across multiple repositories
- have fewer unwanted changes
Fewer unwanted changes
Normalnuget
- Find and replace csproj references
- Add specificversion=False
- Remove private=True
- Remove aliases
- Add additional content from package
- Add app.config file
- Add assembly binding redirects to
app.config
- and so on ..
Us
- Find and replace the right version
numbers
Demo
Commandlines are boring
But we have a shiny new CEF UI!

Nuget updater

  • 1.
  • 2.
    Nuget is reallygood at Dependencies which are: Static External Rarely-updated Shallow
  • 3.
    For us, Nugetis pretty good at Creating easy local builds - only have to check out one repository - dependencies are specified explicitly – more reliable Speeding up Teamcity builds - no snapshot dependencies - each build can start immediately - fewer artifacts to download
  • 4.
    The state ofCompare Shared Utils Backup Reader AST Parser Compare Engine SQL Tools UI Data Compare Engine SQL Compare UI Installer Migrations v2
  • 5.
    The state ofCompare (reality) We have to keep the Shared Utils version consistent across the whole build chain Shared Utils Every single thing in the entire universe
  • 6.
    Tradeoffs While individual buildsare fast .. Shared Utils Backup Reader AST Parser Compare Engine SQL Tools UI Data Compare Engine SQL Compare UI Installer Migrations v2 Time from Engine to UI to installer is longer - Packages have to be manually updated at each step
  • 7.
    Two possible solutions Semanticversioning - drop any compatible version of the engine into a UI build - going to investigate this more in the future (see GrahamH) Automate NuGet - this is what we’re trying
  • 8.
    Why not vanillanuget? We can - be faster to use (choice of UI vs commandline) - be easier to automate - have better dependency resolution (at least compared to nuget v2) - run across multiple repositories - have fewer unwanted changes
  • 9.
    Fewer unwanted changes Normalnuget -Find and replace csproj references - Add specificversion=False - Remove private=True - Remove aliases - Add additional content from package - Add app.config file - Add assembly binding redirects to app.config - and so on .. Us - Find and replace the right version numbers
  • 10.
    Demo Commandlines are boring Butwe have a shiny new CEF UI!