AndreG
Posts: 57
Joined: Tue Jun 10, 2014 11:41 am

Workflow Question - Best way to keep track of AI project updates?

I believe the points I'm looking into here are slightly outside the scope of the Advanced Installer program itself, but I'm hoping to get a few ideas on how best to handle this from other members who deal with similar scenarios.. I work with a small team of devs, building apps on various platforms, but the creation and distribution of our Windows based apps is still a very manual and tedious process, which I would love to streamline a bit more.

When we create a new "release" build for an app, we keep a copy of all built files in a network share, where the folder path itself includes identifying information for the release, including the version string: "\\network\builds\[brand]\[product]\[version]\".

Each time I build a new installer package, I end up copying the contents of the new release folder into the AI project folder, then update any required installer settings, bump the version number and build. This process does get rather time consuming when I have multiple setup packages to build, but I'm pretty sure this is a case of me simply not using the most appropriate workflow here.

Anyone willing to share a few pointers on their own workflow?

---

Beyond the general question, here are a few more pointed questions to help give some context to my current train of thought in this issue:
  • Should I spend some time investigating AI's CLI tool for this?
  • Should I rather try create a new project for each release (perhaps from a template)?
  • Should I store the ".aip" file with source code, copy it as part of the build and try script the creation of an installer from a "known folder structure"?
  • Is there some secret magic tool that will just do my work for me??
For what it's worth, the apps in question are mostly Java based, sources in Git, built offline using Apache Ant (we'll be migrating them to Maven in the "Near Future"). They are not uploaded to any artefact distribution repository, everything other than code storage is currently handled within our work network.
AndreG
Posts: 57
Joined: Tue Jun 10, 2014 11:41 am

Re: Workflow Question - Best way to keep track of AI project updates?

Just adding a little bit to the context of this question, the other part of AI that confuses me slightly is the prompt that comes up when I update the product version number. I haven't quite wrapped my head around creating patch installers, so I tend to generate a new product code and build a full setup package each time.

If I've got version 1.0.0 already released (we follow SemVer here) and we do a feature release as 1.1.0, what should I do to have both a full setup package for a fresh install of 1.1.0 and a smaller patch setup to upgrade from 1.0.0 to 1.1.0?

From the docs, I saw something about creating a patch setup from the difference between two releases, which is pretty great in itself, but then as more feature and patch release versions are built, the number of "patch setups" that need to be created each time would grow exponentially (1.0.0 to 1.1.0, 1.0.0 to 1.2.0, 1.1.0 to 1.2.0, etc.), surely there must be a better way of handling this? I have a span of full setup packages to test theories with, so I'm open to any ideas here.
Catalin
Posts: 6586
Joined: Wed Jun 13, 2018 7:49 am

Re: Workflow Question - Best way to keep track of AI project updates?

Hello Andre,

First of all, I apologize for the delayed reply.
When we create a new "release" build for an app, we keep a copy of all built files in a network share, where the folder path itself includes identifying information for the release, including the version string: "\\network\builds\[brand]\[product]\[version]\".
Keeping track of the released builds is a really good practice.
Each time I build a new installer package, I end up copying the contents of the new release folder into the AI project folder, then update any required installer settings, bump the version number and build. This process does get rather time consuming when I have multiple setup packages to build, but I'm pretty sure this is a case of me simply not using the most appropriate workflow here.
I think that, given your scenario, you may find useful having a look over our "Working with Synchronized Folders" article. The Synchronized Folders functionality from Advanced Installer allows you to create a synchronization link between a folder located on you hard-drive and one created in your project. This means that every time a project is open, built or you press the [ Refresh ] button in the "Files and Folders" page, the content of that folder is synchronized to the content of the source folder on disk.

Any modification made to the source folder on the disk will also be made to the synchronized folder in your project. For example, if you add some files in the source folder on the disk they will be added automatically to the synchronized folder in your project.

Quick note for later on: Synchronized folders shouldn't be used in patches because they might generate new components when their content is re-added to the project.

In what regards the Product Version manual update, you can try to set the file version from a file. To retrieve the Product Version from a file (EXE file for example), right-click in the edit box and select the “Set version from file...” menu item. This will allow you to select a file from Files and Folders page. You can change the source file by clicking the [ ... ] button in the edit box.

The version must be contained by the file metadata, not as a string in a text file.

You can revert to a simple string value by right-clicking in the edit box and selecting the “Set version to string value” menu item.
Should I spend some time investigating AI's CLI tool for this?
Advanced Installer CLI tool can be really helpful if you plan to automate some of the processes. This may reduce the time consumed during the setup creation process considerably. For more information about Advanced Installer CLI tool, you can have a look on the following article:

https://www.advancedinstaller.com/user- ... -line.html
Should I rather try create a new project for each release (perhaps from a template)?
The "Save as Template" option is very useful when you already created a project with many configurations and want to duplicate it for creating another similar project. All information and settings in the template will be added to the new project, except for all the GUIDs which will be changed. This way, the resulted package will be seen as a completely different package compared to other packages created from the same template.
Should I store the ".aip" file with source code, copy it as part of the build and try script the creation of an installer from a "known folder structure"?
I am not sure what you mean by this. Could you please give me some more details (maybe exemplify)?
Is there some secret magic tool that will just do my work for me??
I am afraid that I am not aware of any "magic" tool that will do the work for you.
If I've got version 1.0.0 already released (we follow SemVer here) and we do a feature release as 1.1.0, what should I do to have both a full setup package for a fresh install of 1.1.0 and a smaller patch setup to upgrade from 1.0.0 to 1.1.0?
- A major upgrade actually means the uninstallation of the old product and the installation of the new product. Its main advantage is the fact that it can act as both an upgrade and a first-time-install.

- A patch actually means the diffs between two versions of the same product. Its main advantage is the fact that it is much smaller than an upgrade (memory wise), but it can not be installed as long as the previous version is not installed on the target machine (it can not act as a first-time-install).

The ProductCode property is a unique GUID used to identify your application. This identifier varies from version to version or between different languages of the same installer. You can check this first hand from Advanced Installer by going to Project->Options->Project IDs

If, for example, you want to create a major upgrade but you do not change the "ProductCode" when changing the "ProductVersion", you will be prompted the following message upon trying to install your new version:

Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Programs and Features in the Control Panel.


In what regards the patch, it is quite the opposite. Since the patch means only the diffs between two products and since it can not act as a first-time-install, it needs to "attach" to an already existing (and installed) product. How does it do that? It's pretty simple, through the "ProductCode". This is why you are being asked to keep the same "ProductCode" upon changing the version from the "Product Details" page (if you plan to create patches).

Hope this helps.

All the best,
Catalin
Catalin Gheorghe - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube
AndreG
Posts: 57
Joined: Tue Jun 10, 2014 11:41 am

Re: Workflow Question - Best way to keep track of AI project updates?

Catalin wrote:Hello Andre,

First of all, I apologize for the delayed reply.
No worries, this is an open-ended question anyway, there won't be only one correct answer.. :)
I think that, given your scenario, you may find useful having a look over our "Working with Synchronized Folders" article.
I believe I am already using this concept, but I am keeping the installer contents folder inside the project folder.. The AI project looks for install contents in the relative path of `./ai_src`, so I just change the folder contents then open and build the setup.
In what regards the Product Version manual update, you can try to set the file version from a file.
Looked into this feature previously, but I couldn't really find a good way to make use of it.. Most of our applications are written in Java, so we don't have any `exe` or `dll` files with custom version strings to reference here, if we could read this from a text file, then I could get this from the meta data that is generated alongside the build..
The "Save as Template" option is very useful when you already created a project with many configurations and want to duplicate it for creating another similar project.
I've looked into the template idea briefly, but at that point in time it didn't seem to fit with what I needed. I do have another idea worth trying now, which would actually involve keeping the `aip` file for each release version, so perhaps a template for distributed product would actually work quite well for this then.. I'll spend a bit more time digging into that and see what I can do. :)
Should I store the ".aip" file with source code, copy it as part of the build and try script the creation of an installer from a "known folder structure"?
I am not sure what you mean by this. Could you please give me some more details (maybe exemplify)?
We use Git as our version control system, pushing source code into private groups/projects on GitLab, so I was considering storing the actual `aip` project configuration inside the same repository alongside our source code, effectively merging the process of updating installers directly into our standard "bump versions and release a product" process.

I thought it may make it simpler to keep the AI project in our source control system, this way we have the ability to revert source code, build scripts and setup package configuration to what we had at any specific release version. My only concern here is that the `aip` files are not text-based, which tends to add a great deal of "history bloat" to Git repositories over time.
I am afraid that I am not aware of any "magic" tool that will do the work for you.
That one was just a joke, btw.. :)
If I've got version 1.0.0 already released (we follow SemVer here) and we do a feature release as 1.1.0, what should I do to have both a full setup package for a fresh install of 1.1.0 and a smaller patch setup to upgrade from 1.0.0 to 1.1.0?
- A major upgrade actually means the uninstallation of the old product and the installation of the new product. Its main advantage is the fact that it can act as both an upgrade and a first-time-install.

- A patch actually means the diffs between two versions of the same product. Its main advantage is the fact that it is much smaller than an upgrade (memory wise), but it can not be installed as long as the previous version is not installed on the target machine (it can not act as a first-time-install).

The ProductCode property is a unique GUID used to identify your application. This identifier varies from version to version or between different languages of the same installer. You can check this first hand from Advanced Installer by going to Project->Options->Project IDs

If, for example, you want to create a major upgrade but you do not change the "ProductCode" when changing the "ProductVersion", you will be prompted the following message upon trying to install your new version:

Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Programs and Features in the Control Panel.


In what regards the patch, it is quite the opposite. Since the patch means only the diffs between two products and since it can not act as a first-time-install, it needs to "attach" to an already existing (and installed) product. How does it do that? It's pretty simple, through the "ProductCode". This is why you are being asked to keep the same "ProductCode" upon changing the version from the "Product Details" page (if you plan to create patches).
I understand the differences between the full and the patch setups, what confuses me is when to use which option.. So going back to my original question: if I want to have the option of doing a completely new installation of version 1.1.0, but also have a smaller patch setup that allows version 1.0.0 to be upgraded, would I need to create a new Advanced Installer "Patch" project for "1.0.0 to 1.1.0"? Taking this one step further, if we release 1.2.0, then I assume the main AI project would be updated to 1.2.0 as a full setup package, with an extra "Patch" project for "1.0.0 to 1.2.0" and "1.1.0 to 1.2.0". Is that correct?

My problem with this pattern is we'll end up with a exponentially increasing number of Advanced Installer "Patch" project files as time goes on.. For example, one of our products currently has a version of "3.131.2", imagine how many "Patch" setups we would have if this pattern had been used from the start.... If this assumption is indeed correct, then I would need to put some process restrictions in place to prevent the creation of an unnecessary amount of AI projects.

So, thank you for the long write up, but unfortunately this doesn't really help much more than what I've already discovered from reading the documentation. I'm hoping for some real-world workflow examples for the use cases that I've mentioned.. In the mean time, at least I do still have a few ideas to try out (when I actually have the time).

Return to “Building Installers”