At the start of every year we do a spot of spring cleaning; we tidy up all of our core intellectual property, harvest any useful code that we've written in the previous year, then give it all a thoroughly good refactoring; to ensure that the code is self-referencing all the new patterns and concepts. This has the general effect of shrinking the size of the codebase, while consolidating and reinforcing the architecture. This is also a great opportunity to re-evaluate our engineering practices and processes in the light of anything we've recently learnt; one of my aims for this year is to eliminate all binary files from our source repositories; NuGet has eradicated referenced assemblies from our solutions, but tools required for the build process have remained.
I've written several articles about TeamCity's excellent Meta-Runner feature; the ability to extend TeamCity without having to know Java (or Kotlin); so it's a natural fit for wrapping up build tools so that they live on the build server, rather than in the code repository. The first of the build tools I've attempted to convert into a Meta-Runner is ILMerge, as we have decided to package up 45 assemblies (useful for separation of concerns and reuse during development, but not ideal when it comes to distributing the final product to the consumer) that constitute Vellum, our Azure based CMS system, into a single assembly, rather than having to deal with 45 NuGet packages which take an age to update.
ILMerge is a wonderful tool, but I use it so infrequently that I always have to start from scratch and read all the documentation (there is a great ILMerge GUI project that adds a UI on top of the command line), so one of the things I wanted to do with the Meta-Runner was to incorporate the help copy to make the Meta-Runner easier to use.
The screenshot below shows the configuration options for the Meta-Runner:
You can download the plugin from the releases section of the GitHub repo. If you have any problems, please raise an issue. Although we've tested the Meta-Runner for all of our usage scenarios, there might be issues in some of the other configurations options.
If you're interested in looking at endjin's other Open Source projects, we now have a dedicated page on our site.