Since version 1.3.0611, Nuxeo Drive is able to update itself with a newer or an older version (such a downgrade can be required if the version of the Nuxeo server Nuxeo Drive is connected to is too old for the client version). This is very useful as it allows the user to keep the application up-to-date without having to manually install a new version.
The update process relies on an update site holding the Nuxeo Drive binary packages for Windows (MSI) and OS X (DMG) as well as available updates for both platforms packaged as ZIP files. This page aims to explain how this update site is structured in case you would like to host your own one to manage the update policy instead of relying on the official Nuxeo update site.
The update site URL can be customized using the parameter
update-site-url, its default value being http://community.nuxeo.com/static/drive/. This parameter can be set up through the command line, a config.ini file or with a registry key for the Nuxeo Drive updater point at the custom site. See the Nuxeo Drive configuration parameters documentation for more information.
Of course this update site will need to have the same structure as the one provided by Nuxeo, for the Nuxeo Drive updater to be able to communicate with it.
The Nuxeo Drive update site is currently implemented as a simple directory listing served by Apache and that holds the following items.
The site must hold the Nuxeo Drive binary packages released for Windows (MSI) and OS X (DMG), for instance:
These packages are aimed to be manually downloaded for the first Nuxeo Drive installation, though they can also be used to manually install a newer version in the place of an existing installation of Nuxeo Drive.
It must also hold available updates for both platforms packaged as esky compliant ZIP files (the auto-update framework for frozen Python applications). They must respect the following pattern:&
<application_name>-x.y.zzzz.<platform>, for instance:
The update site must also contain JSON files representing the metadata about client and server versions. For instance:
1.3.0611.jsonholds the minimum Nuxeo server version compatible with Nuxeo Drive 1.3.0611.
5.9.4.jsonholds the minimum client version compatible with a Nuxeo Platform 5.9.4 instance.
This is how the Nuxeo Drive updater is able to compute the update status.
Let's say the Nuxeo Drive client version is 1.3.0611 and the version of the Nuxeo Platform instance it is connected to is 5.9.4. It will first read the
5.9.4.json file to see if the client version is compatible, meaning greater or equal than the
nuxeoDriveMinVersion element. Let's say
nuxeoDriveMinVersion is equal to 1.3.0611, we now know that an upgrade to a newer client is not required.
An update could still be available. To figure this out, the updater will check the JSON metadata files of all client versions compatible with the 5.9.4 server version looking for one more recent than 1.3.0611. Imagine there is a
1.4.0125.json file with 5.9.4 as a value of the
nuxeoPlatformMinVersion element. Then, if the update site holds a ZIP file matching the 1.4.0125 version and the client platform, the update status will be
update_available, allowing Nuxeo Drive to download the ZIP file and launch the update process.
This means that:
For each Nuxeo Drive version deployed on the update site a JSON metadata file with the corresponding version needs to be deployed (for instance 1.3.0611.json). It should have the following structure:
For each Nuxeo Platform version to which Nuxeo Drive might get connected a JSON metadata file with the corresponding version needs to be deployed (for instance 5.9.4.json). It should have the following structure:
Symbolic links to both packages (MSI and DMG) of the latest Nuxeo Drive version available for a given version of the Nuxeo Platform, for instance in http://community.nuxeo.com/static/drive/latest/. This is used for the first download of Nuxeo Drive from the Nuxeo Drive tab of the user's Home on the Nuxeo Platform UI. The download links are generated server-side following this pattern:
<update_site_URL>/latest/<Nuxeo_distribution_version>/nuxeo-drive.<extension>, for instance