Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What tools exist to help gathering various software elements into complete software release?

Our software product is made of many parts. Let's say it's made of a kernel driver part, a user dll, and a GUI software. During development, we're compiling and using all of them at the latest versions, but it's not the same when it comes to the release.

Indeed, the kernel part has to be frozen much earlier than the other. Then, the dll is frozen, to get extensively tested, and last frozen is the GUI. As QA advances, we need to create newer versions of the full release with a fixed GUI, but still using the previously included kernel driver, and dll.

I was wondering if there were a tool that exist, that would manage what version of each software part is used to create a release?

This tool would possibly integrate into the tool chain, to build the version of each software selected and gather them into a Windows installer, or Linux packages.

Edit: How are we doing now?

As of now, we're using SVN with buildbot as CI tool to Linux/gcc and Windows/VStudio. We're in the mode where the whole repository is branched/tagged as needed. But this hurts and makes release process painful now that there are more and more relatively independent software parts.

We are thinking of changing the repository layout to have several independently branched/tagged projects. This would be a much better fit to the software development and release cycle. But then, we would absolutely need such a tool.

The problem is related to having different pieces of software, each with their own branched/tagged versions, gathered into a full software release.

Edit: What is needed.

In the end, I understood what I need is a package manager for Windows. Package manager in the sense of RPM or DEB manager on Linux.

Does anyone know of a package manager on Windows?

like image 863
Didier Trosset Avatar asked Dec 02 '11 15:12

Didier Trosset


1 Answers

To handle your source, you definitely want to be branching your components individually. Binaries are handled via a package manager. Best practices for that are going to vary based on your target operating system. My company does embedded software, so we manage that with custom scripts we designed. On Linux, you want to make .deb or .rpm packages. Here's a guide for Ubuntu. I'm not very familiar with Windows, but InstallShield is a popular choice in software I've installed.

They should all have mechanisms for specifying ranges of versions of dependencies. You can require an exact version, a certain version or newer, or anything between two versions. Then you have a "parent" package that has no binaries, but just specifies the versions of the component packages. That will let you upgrade one component while retaining the binaries for the other components. If you want to keep it all in one package, there's little reason not to just rebuild the entire thing from source. If your build scripts are version controlled your binaries will be the same.

like image 193
Karl Bielefeldt Avatar answered Sep 17 '22 15:09

Karl Bielefeldt