[Development] New Coin feature: automatic provisioning

Jędrzej Nowacki jedrzej.nowacki at qt.io
Wed Jul 27 13:47:45 CEST 2016


  Good news everyone! Last month we managed to deploy a new automatic 
provisioning system to Coin. What does it mean to you? Now you can modify 
existing VM templates used by Coin. Installing additional packages should be 
trivial and more or less safe from now.

  I. The goal:
  - Coin should use VMs with vanilla OS installations (aka base template)
  - Anything that needs to be installed in addition should be documented, 
reproducible in an automatic way (create a provisioned template)
  - templates may be only modified in such way that the _whole_ Qt still works 
on a VM create from it
  - It should not be required to log in to a VM to modify it

  II. So how it works now:
  Qt5 is our product repository. The product repository contains directory 
called "coin/provisioning", which contains provisioning scripts used against 
base templates to produce provisioned templates. When an integration starts on 
a certain platform, it checks for the directory. If base platform template 
name matches one of the subdirectories then all scripts in the subdirectory 
are used to provision the new template. Of course the result is cached and re-
used for all integrations that needs it.

  III. Qt Developer oriented example:
  We need to install FooBar on Ubuntu 14.04
  1. Prepare bash script that installs it:
     #!/bin/env bash
     # Package FooBar is need to ... and can be safely removed if ...
     apt install FooBar
  2. Place it in the product repository (Qt5) in coin/provisioning/qtci-linux-
Ubuntu-14.04-x86_64/ under foobar.sh name. 
  3. Commit it to the right branch (5.6..dev) depending where the package is 
  4. Get through the review, by default we do __not__ want any additional 
software on VMs, so you need to have a good reason to install something
  5. Stage the change together with a recent submodule update
  6. If it pass then you can enjoy FooBar in your code
  7. Follow-up on Qt5 merges, to ensure that FooBar is installed in right 
branches and only in them

  Be aware that provisioning scripts are tested against Qt5 state while newly 
provisioned templates are used for all integrations. So technically it is 
possible to break stuff if Qt5 is old or if a breakage was integrated during 
Qt5 testing. In reality I do not think it would affect anyone, but that is why 
in point 5 I recommend to staging together with a recent submodule update.

  Currently only bash and powershell are supported.

  If you want to share a script between different platforms (for example 
Ubuntu 14.04, and Ubuntu 16.04) you place it in "coin/provisioning/common". 
Then you can call it from any other "coin/provisioning" subdirectory.

  The current naming convention for base templates is suboptimal and it will 
be changed in a reasonable future, but you should not worry about that, the 
process will be transparent (TM).


ps. The feature consists of a few dozen patches and the probability says that 
there is at least one bug, so keep your eyes open.

More information about the Development mailing list