puppetlabs/puppet_for_the_win — pull request #14 by jeffmccune (2012-02-22 01:17:20+00:00)
Title: Build brand specific packages and support Major Upgrades

Branding
========

(#12627) Add Puppet Enterprise branding

This patch introduces the ability to produce both Puppet Enterprise and
FOSS branded packages. Without this patch the build system only
produces a "Puppet" branded package. This is a problem because we also
want packages branded as Puppet Enterprise.

This change also eliminates the requirement to set environment variables
when building the UI only. The new build commands are documented in
`README_DEVELOPER.markdown` and now look like:

rake windows:build
rake windows:buildenterprise PE_VERSION_STRING=2.5.0-1-0

rake windows:buildui
rake windows:buildenterpriseui PE_VERSION_STRING=2.5.0-1-0

This patch also introduces dynamic version number calculations inside
the build system itself. In the case of Puppet, the version of the
package will automatically be parsed from `git describe`. In the case
of Puppet Enterprise the version of the package defaults to 2.5.0.0 and
can be overriden using the PE_VERSION_STRING environment variable.

This patch also integrates the package with Microsoft's Add or Remove
Programs feature more clearly. The ARPPRODUCTICON and ARPHELPLINK
public properties are set to provide an Icon and a clickable URL to get
more information and support.

Major Upgrades
==============

(#12488) Support major upgrades of Puppet and PE

Without this patch the MajorUpgrade feature of Microsoft installer is
not explicitly supported. This is a problem because we need to let end
user upgrade from Puppet to Puppet Enterprise easily and also upgrade
from one release to another release of the same branding.

This patch explicitly supports the MajorUpgrade feature. Windows
installer uses the follow product attributes to figure out if an upgrade
is happening or if an installation is happening:

* Id (UUID, set to '*' to change every build)
* Language (Set to 1033 statically)
* UpgradeCode (UUID, MUST REMAIN FIXED, statically defined in puppet.wxi)
* Version (Calculated by the build system and defined in puppet.wxi)

By default Windows installer does not allow downgrading to an older
version. We explicitly allow downgrades because Puppet Enterprise
versions will be "earlier" than older versions of Puppet. For example,
consider the following situation:

* Puppet 2.7.10 installed.
* Puppet Enterprise 2.5.0 is trying to be installed.

In this situation, the installer would refuse to install since 2.5.0 is
older than 2.7.10. We explicitly allow this so the behavior is for
Windows installer to remove the previous package during the installation
phase and then install the Puppet Enterprise components.

Images
======

The following screen shots show the current state of the graphical installer.
These screen shots are generated automatically.

![Screen 0](http://dl.dropbox.com/u/17169007/img/screenshot_1329854437_0.png)
![Screen 1](http://dl.dropbox.com/u/17169007/img/screenshot_1329854437_1.png)
![Screen 2](http://dl.dropbox.com/u/17169007/img/screenshot_1329854437_2.png)
![Screen 3](http://dl.dropbox.com/u/17169007/img/screenshot_1329854437_3.png)
![Screen 4](http://dl.dropbox.com/u/17169007/img/screenshot_1329854437_4.png)