Two things I forgot to mention: Currently there is another break point in the diagram of releases when X1 is released. Currently Horizon does not use upper-constraints and thus will immediately pick up the new xstatic release file, potentially breaking things. This is easy to fix - I will be proposing a patch soon.
SOLUTION 6 - make zuul capable of performing atomic cross-repository commits. Richard Sent from my portable device, please excuse the brevity. On 8 Mar 2016 15:52, "Richard Jones" <r1chardj0...@gmail.com> 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. 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 > > 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. > > SOLUTION 4: vendor the javascript > > Heh. > > 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. > > > Richard > > [1] https://review.openstack.org/#/c/289142/ > >
__________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev