Hear Ye! Hear Ye!
Today we pushed a maintenance release for Axiom v0.8 ( crickhollow ). While there are not a lot of tickets closed for this release, a lot of work when into the build system to automate the release process. It now takes 45 minutes to pull a clean working copy from the subversion repository, build all the assemblies and documentation, create the zip distribution packages and the Nuget Packages, build the Project Templates ( new feature! ), and finally upload the files to CodePlex, SourceForge, Nuget Gallery and The Visual Studio Extensions Gallery. It almost took 45 minutes just to write what it does. There are still a few manual steps in the process and a couple of bugs, but overall I’m very pleased with the results. Now that this is in place, it will make creating maintenance releases much easier. I’m hopeful that more frequent and regular releases will now be possible.
The Version Numbering Scheme
This is the second maintenance release for v0.8. The full version number listed above might look a little odd, but there is a pattern, and more importantly, a reason to it. We all know what version numbers are used for, and more times they are a fairly arbitrary scheme. When recreating the build system, I wanted something that not only made sense, but was also reproducible and hard to screw up. With the addition of the Nuget Packages, it was import to make sure that any release would always take precedence over a previous release. The first three parts are pretty standard, Major, Minor. These are set inside the build system and need to be manually updated if they change. The last two parts are automatically configured via the build system. The third part is fairly straightforward, it’s the Subversion Revision number. This will be a steadily increasing number until the maximum for a version number part is reached, which according to the documentation is 65534. So I think that we are safe for a while.
The final portion of the version number is the most important, as it needs to protect the version number from failing to be greater than any build of the same revision. So if two builds of revision 3367 happen days apart then the later build should be used over the earlier build if both were released to the public. To make this happen, the final component is based on the current date. To make the number always increasing, and yet stay within the boundry of 65534, the following scheme is used : YYWWw where
- YY is the 2 digit year of the current date
- WW is the week number of the current date
- w is the day of the week of the current date
So if we look at the last part of the release, 12322, means the year is 2012, week 32 and weekday 2, which correlates to Tuesday, August 8th 2012. This scheme will be valid until Thursday December 31st, 2065 (65524). On Friday January 1st 2066, or later the build will fail. If Axiom is still around by then, whoever is the current maintainer can come up with a new scheme, but that is 53 years worth of version numbers, and I’m ok with that.
Visual Studio Templates
New with this release are Visual Studio Templates. Currently there is only one that has been published, DirectX. The template is a very simple canned project that will get you started creating a game or application using Axiom and DirectX as the rendering API. The template uses Nuget to install the packages into the newly created project, and when new Nuget Packages are released, you can upgrade the packages without having to recreate your project. We will be releasing additional Project Templates in the upcoming months. You can download the Templates from either the Visual Studio Gallery site or use the Extension Manager in Visual Studio 2010, All Editions ( Tools->Extension Manager ) to install the Templates. Just search for ‘Axiom’ in the Online Gallery.
To make working with Axiom easier we have started creating Nuget packages and releasing them to the Nuget Gallery. One of the pain points in working with Axiom is the mixture of Native and Manage libraries that you need in order to get started. With the wonderful tool that Nuget is, we have managed to make that setup very simple and easy. By adding the right combination of packages to your project, you will get the proper combination of Managed Assemblies, Managed Wrapper Assemblies and if needed the native dll. The easierst way to get started is by using the VS Template, however if you want to go closer to the metal and use the Nuget Packages, you will need :
- (1) Axiom
- (1) Platform Manager ( Axiom.Platforms.* )
- (1) RenderSystem ( Axiom.RenderSystems.* )
- (1) Image Decoder ( Axiom.Plugins.*Codecs )