With the prospect of Installable Packages on the horizon it is starting to become clear that we should establish a versioning/release strategy for the Box itself that goes beyond simple SemVer and more closely mirrors that of a Linux release.
Potentially we apply a name to a major release from a list of names in a category, for example maybe types of birds? So maybe the next major release could be "Hummingbird?"
Hummingbird would get a SemVer version number (e.g. 0.11.0) similar to how Apple OS/X has "El Capitan" which is version 10.11. Maybe we even call this version 1.0; the first major release that can support multiple domains without hacking the box?
Hummingbird could get a "Base Box Specification" which would contain the things that people can be guaranteed Hummingbird would always have, and that would not exceed with newer versions e.g.:
Component
Software
OS
Ubuntu 14.04 LTS
Nginx
1.4.x
PHP/PHP-FPM
7.0.x
MariaDB
10.1.x
XDEBUG
2.4.x
Redis
2.8.x
WP CLI
0.23.x
Nodejs
4.4.x
Note the list above is smaller than the current box, and is certainly not inclusive my any means as it would also contain the PHP extensions and other various things to be added.
We could then set up Installable Package testing that would be based on the Base Box Specification and Installable Packages would be specific to a major release.
Further let's say PHP 7.1 is released then we could create an Installable Package for it, maybe in with the name php7.1-hummingbird.boxpkg. Not yet sure if we'd need more than that to identify the package; would these need version numbers too? Or maybe version numbers are omitted for components developed for the platform vs. ones developed for WPLib Box by us or 3rd parties.
Also, anything that people would want their box to have could be configured using Installable Packages. If for some reason they want a box without PHP 7.0 but with PHP 5.6.x they could add in their "Provision Configuration" [1] that PHP7.0 is a package to remove then PHP5.6 is a package to add.
[1] First time I have mentioned this anywhere. I am thinking maybe we would have a .wplib-box directory in the root of the box install directory on peer with Vagrantfile and also a .wplib-box directory in each project directory. And inside those directories we could have a provision.json file containing a list of tasks or which two types could be remove-package and add-package.
On first vagrant up or vagrant reload --provision our provision script would look in .wplib-box/provision.json to see what tasks to run and then run them. And then when a project is added or removed the add/remove scripts could look in the project-specific .wplib-box/provision.json and see what tasks need to be run specifically for the given project. And obvious we'd need some conflict management built in for these but Debian Packages provide a great roadmap for requirements.
With the prospect of Installable Packages on the horizon it is starting to become clear that we should establish a versioning/release strategy for the Box itself that goes beyond simple SemVer and more closely mirrors that of a Linux release.
Here is a strawman proposal:
Potentially we apply a name to a major release from a list of names in a category, for example maybe types of birds? So maybe the next major release could be "Hummingbird?"
Hummingbird would get a SemVer version number (e.g.
0.11.0
) similar to how Apple OS/X has "El Capitan" which is version10.11
. Maybe we even call this version1.0
; the first major release that can support multiple domains without hacking the box?Hummingbird could get a "Base Box Specification" which would contain the things that people can be guaranteed Hummingbird would always have, and that would not exceed with newer versions e.g.:
Note the list above is smaller than the current box, and is certainly not inclusive my any means as it would also contain the PHP extensions and other various things to be added.
We could then set up Installable Package testing that would be based on the Base Box Specification and Installable Packages would be specific to a major release.
Further let's say PHP
7.1
is released then we could create an Installable Package for it, maybe in with the namephp7.1-hummingbird.boxpkg
. Not yet sure if we'd need more than that to identify the package; would these need version numbers too? Or maybe version numbers are omitted for components developed for the platform vs. ones developed for WPLib Box by us or 3rd parties.Also, anything that people would want their box to have could be configured using Installable Packages. If for some reason they want a box without PHP
7.0
but with PHP5.6.x
they could add in their "Provision Configuration" [1] thatPHP7.0
is a package to remove thenPHP5.6
is a package to add.[1] First time I have mentioned this anywhere. I am thinking maybe we would have a
.wplib-box
directory in the root of the box install directory on peer withVagrantfile
and also a.wplib-box
directory in each project directory. And inside those directories we could have aprovision.json
file containing a list of tasks or which two types could beremove-package
andadd-package
.On first
vagrant up
orvagrant reload --provision
our provision script would look in.wplib-box/provision.json
to see what tasks to run and then run them. And then when a project is added or removed the add/remove scripts could look in the project-specific.wplib-box/provision.json
and see what tasks need to be run specifically for the given project. And obvious we'd need some conflict management built in for these but Debian Packages provide a great roadmap for requirements.Thoughts? Discussion?