[openstack-dev] [Horizon] How do we move forward with xstatic releases?
Monty Taylor
mordred at inaugust.com
Wed Mar 9 15:53:20 UTC 2016
On 03/07/2016 10:52 PM, Richard Jones wrote:
> We've solved *most* of the issues around releasing new xstatic packages,
> documented here[1] (and related documentation).
>
> We have one final issue that's blocking us, which is that during the
> xstatic release there will be a point at which Horizon may be broken
> from an integrated point of view - some of the interfaces may not work
> and fail tests. The process goes something like this:
>
> Note: this assumes that depends-on can reliably bring in patches from
> all over the place into a gate environment, which is technically
> possible, but not necessarily correct today.
>
> The problem is that because we can't atomically update both
> upper-constraints *and* Horizon at the same time (or upper-constraints
> *and* xstatic-angular, or Horizon *and* xstatic-angular) we run into a
> situation where Horizon will be running against the wrong version of
> xstatic-angular.
>
> So we break one of the basic assumptions of the OpenStack world: that
> every single commit in every repository for the integrated environment
> will pass tests.
>
> In the Python world, we code around this by making Horizon compatible
> with both the X and X1 versions of xstatic-angular (if it was a Python
> library). In Javascript land this is much more difficult - Javascript
> libraries tend to break compatibility in far more interesting ways.
Yah. Honestly, this is one of the main places where I think we get into
trouble in linux-distro land in trying to apply the tools/techniques
developed for one set of problems with another.
> Maintaining compatibility across CSS and font releases is also a
> difficult problem, though changes here are unlikely to break Horizon
> enough that gate tests would fail. So, solution 1 to the problem is:
>
> SOLUTION 1: always maintain Horizon compatibility across xstatic library
> releases.
>
> This is potentially very difficult to guarantee. So, a second solution
> has been proposed:
>
> SOLUTION 2: move the upper-constraints information for *the xstatic
> libraries only* from the global upper-constraints file into Horizon's
> repository.
>
> This allows us to atomically update both Horizon and the xstatic library
> version, removing the potential to break because of the version
> mismatch. Unfortunately it means that we have version compatibility
> issues with anything else that wants to install alongside Horizon that
> also uses xstatic packages. For example, Horizon plugins. We could move
> Horizon plugins into the Horizon repository to solve this. /ducks
I actually like this one a lot. I know that there is a plugin problem
... but ... plugin installers could also consume the horizon xstatic
constraints when installing xstatic packages?
xstatic packages are specifically workarounds for doing javascript in a
python-centric world. Putting then in upper-constraints and actually
treating them like actual python packages rather than what they are
which is a clever utilization of the python ecosystem to deliver
javascript libraries is vexing at best.
> A variation on this solution is:
>
> SOLUTION 3: allow Horizon to locally override upper-constraints for the
> time needed to merge a patch in devstack.
>
> This solution allows Horizon to atomically update itself and the xstatic
> library, but it also means installing Horizon in a CI/CD environment
> becomes more difficult due to the need to always pull down the
> upper-constraints file and edit it. We could code this in to tox, but
> that doesn't help eg. devstack which needs to also do this thing.
Or people who are deploying horizon CD from master from source and
applying upper-constraints to get the tested version. Those people would
have to duplicate the tox logic.
> SOLUTION 4: vendor the javascript
>
> Heh.
Heh indeed.
SOLUTION 4.alt: use npm/bower instead of xstatic to pull the javascript.
>
> SOLUTION 5: have dependencies on xstatic move from global requirements
> to Horizon
>
> This is similar to 2 & 3 with some of the same drawbacks (multiple users
> of xstatic) but also we'd need a change to global-requirements handling
> to ignore some entries in Horizon's requirements.
>
> Your thoughts on any and all of the above are requested.
Thanks for your work on this - it's a hard problem - especially with
sets of potentially conflicting desires from your consumers.
More information about the OpenStack-dev
mailing list