[Cubicweb] CW app distribution with a not brand new cw version
Sylvain Thénault
sylvain.thenault at logilab.fr
Tue Apr 20 17:19:26 CEST 2010
On 20 avril 08:58, Florent Cayré wrote:
> Has your debian specialist and package maintainer any clue on this topic ?
Attached is my proposal of how we could handle this. Let's discuss it here,
I'll publish it and we'll start applying it when a consensus will be reached.
--
Sylvain Thénault LOGILAB, Paris (France)
Formations Python, Debian, Méth. Agiles: http://www.logilab.fr/formations
Développement logiciel sur mesure: http://www.logilab.fr/services
CubicWeb, the semantic web framework: http://www.cubicweb.org
-------------- next part --------------
Configuration management with the debian packaging system
=========================================================
This is a proposal to acheive proper configuration management for cubicweb using
the debian packaging system. The idea of this proposal is centered on a version
numbering scheme. This has some cons (see the conclusion) but is still imo the
cheapiest way (and maybe the only maintainable way in long-term) to get things
working properly in this area.
Please provides feedback, other ideas, enhancements to the process, etc...
Goals
-----
1. configuration management of cubicweb applications (though that should be
generalizable to other projects)
2. something like `apt-get install cubicweb=3.8.2` working, with proper
dependencies finally installed
3. no cubicweb upgrade if an installed cube doesn't work with the new version
4. limit number of debian repositories
Numbering scheme
----------------
Based on the standard 3 number scheme: ::
X.Y.Z
* increments Z for bug fixes release
* increments Y for backward compatible evolutions release
* increments Y for release breaking backward compats of public api
(everywhere of course, eg even in cubes, not only in cubicweb).
Then we can set in a cube tested with cubicweb X.Y::
Conflicts: cubicweb-common >= X+1
even though that X+1 release doesn't exist yet.
This, together with proper `Depends` field, should acheive goals 1 and 3.
Apt extension
-------------
Currently, apt-get install isn't able to look for needed version of
[reverse-]dependencies when trying to install a specific version.
Hence we should develop a command to get the whole versioned dependencies and
reverse dependencies by analysing `apt-cache search` results. The result of this
command could then be given to `apt-get install` (which will eventually
detect conflicts with already installed packages).
This should acheive goals 2.
Conclusion
----------
Cons:
* when a X+1 version is going out, this may triggers a lot of package
republication (even though they may actually not be affected by the api change)
- don't do that with cubicweb's dependency such as lgc, rql, yams, but use
explicit conflicts in those packages?
- a cubicweb standard library should limit the number of affected cube
* X may increment fast
Whats to be done:
* the dependencies version detection command (constraint solver)
* always properly set Depends and Conflicts in packages
* tie to the version numbering scheme in all of our projects
* properly defines what api is public or not so one can still reserve
some room for changes without needing a X+1 release
* for customer projects, you should either:
- setup a custom repository, ensuring public repositories aren't referenced
in sources.list
- depends on cubicweb-common=X.Y.Z or cubicweb-common <= X.Y+1
to either block undesired upgrade or only keep bug fix release upgrade
Logilab:
* will maintain two public debian repositories: logilab-public and
logilab-public-stable. The first one being kindof staging place for test of
packages before they are allowed to move on the stable one.
* may decide everytime (once a year) to kill the bw compat code and procuce
a X+1 release
More information about the Cubicweb
mailing list