Re: [openstack-dev] [oslo] versioning and releases

2014-06-17 Thread Doug Hellmann
On Tue, Jun 17, 2014 at 6:42 PM, Robert Collins
 wrote:
> On 11 June 2014 04:24, Doug Hellmann  wrote:
> ...
>> Incubated libraries have been released at the end of a release cycle,
>> as with the rest of the integrated packages. Adopted libraries have
>> historically been released "as needed" during their development. We
>> would like to synchronize these so that all oslo libraries are
>> officially released with the rest of the software created by OpenStack
>> developers.
>
> So I see a fairly big problem with this - its going to impact heavily
> on anyone that isn't part of oslo using oslo.* as a library. For
> instance, the openstack clients which use oslo.config - they will not
> be able to get new features or bugfixes from trunk without waiting 6
> months. And that means either:
>  - carrying conditional code (version checking the version of oslo) in
> their trunk,
>  - or not consuming new features until up to 6 months after release
>  - or making their trunk *uninstallable* (because it will have either
> an dep on a non-existing version, or a dep on an old version that
> doesn't actually include the needed feature).
>
> The last option is what I suspect will happen, and that will be very
> sad, since it seems unneeded. It will also make version management
> hard for CD deployers (like TripleO's deploy-trunk default) because
> incorrect requirements files are anaethema.

I don't follow that. What does synchronizing the release cycles have
to do with whether or not things are installable? In order to make use
of the library in unit tests, the project will have to have the
correct versions in their requirements file so the package can be
installed from pypi -- including allowing an alpha release if that's
where the feature is. To allow unit tests to work on developer
systems, we will tag alpha releases and publish them to pypi. AFAICT,
the only thing that's special about those releases is that they will
be wheels instead of sdists.

> Markmc's mail about wanting the same rhythm doesn't make sense to me
> since more than half the openstack artifacts *do not have* the 6 month
> rhythm - client libraries have always been semver, release when ready.
>
> AIUI the stable branches thing in the server space exists to give us
> freedom to evolve the code super rapidly, in these large, fairly
> monolithic APIs; we need it because we are always
> backward-incompatible between server /releases/ (only of the server
> HTTP API) - if we do semver, we'd be doing a breaking release every 6
> months. So stable branches is a valve to balance trunk velocity of
> independent codebases vs user demands for bugfixes and security fixes.
>
> The other basic model we have as software releasers is to do stable
> branches only when a backwards incompatible change has happened -
> thats what we demand from projects like setuptools *and our client
> libraries*: we want to be able to fork at that point, but the default
> behaviour is not to fork, and instead just not break things.

And that's what I plan to do with Oslo. I mentioned stable branches as
a solution for security fixes mainly, though I wouldn't say "only". I
don't expect to be doing a lot of back-porting of insignificant fixes,
since we hardly have enough reviewers to cover the changes we're
trying to make now.

>
> "Not break things" is roughly proportional to the size of the
> codebase, and the oslo projects are typically small focused projects
> where this seems reasonable to expect. *More than that*, I believe its
> essential, or we'll have a very hard time propogating new releases out
> amongst the servers.

Believe me, I know how hard it can be to update the version of a
library used by more than one project in OpenStack. That's why I have
been focusing so much attention on figuring out how to handle the
cross-testing at the unit test level, so we know in the gate when a
change in a library is going to break one of the servers, and can
reject the patch.

>
> tl;dr there seems to be no reason to do one release every 6 months of
> olso.*, and doing so seems likely to only incur costs, since the
> discipline needed to do regular semver with good backwards compat is a
> discipline we're going to have to exercise anyway.

As you point out, most of these libraries are small. I don't actually
expect to create new releases of all of them every cycle. In fact, I
expect most of them to be extremely stable over time.

Doug

>
> -Rob
>
> --
> Robert Collins 
> Distinguished Technologist
> HP Converged Cloud
>
> ___
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-17 Thread Robert Collins
On 11 June 2014 04:24, Doug Hellmann  wrote:
...
> Incubated libraries have been released at the end of a release cycle,
> as with the rest of the integrated packages. Adopted libraries have
> historically been released "as needed" during their development. We
> would like to synchronize these so that all oslo libraries are
> officially released with the rest of the software created by OpenStack
> developers.

So I see a fairly big problem with this - its going to impact heavily
on anyone that isn't part of oslo using oslo.* as a library. For
instance, the openstack clients which use oslo.config - they will not
be able to get new features or bugfixes from trunk without waiting 6
months. And that means either:
 - carrying conditional code (version checking the version of oslo) in
their trunk,
 - or not consuming new features until up to 6 months after release
 - or making their trunk *uninstallable* (because it will have either
an dep on a non-existing version, or a dep on an old version that
doesn't actually include the needed feature).

The last option is what I suspect will happen, and that will be very
sad, since it seems unneeded. It will also make version management
hard for CD deployers (like TripleO's deploy-trunk default) because
incorrect requirements files are anaethema.

Markmc's mail about wanting the same rhythm doesn't make sense to me
since more than half the openstack artifacts *do not have* the 6 month
rhythm - client libraries have always been semver, release when ready.

AIUI the stable branches thing in the server space exists to give us
freedom to evolve the code super rapidly, in these large, fairly
monolithic APIs; we need it because we are always
backward-incompatible between server /releases/ (only of the server
HTTP API) - if we do semver, we'd be doing a breaking release every 6
months. So stable branches is a valve to balance trunk velocity of
independent codebases vs user demands for bugfixes and security fixes.

The other basic model we have as software releasers is to do stable
branches only when a backwards incompatible change has happened -
thats what we demand from projects like setuptools *and our client
libraries*: we want to be able to fork at that point, but the default
behaviour is not to fork, and instead just not break things.

"Not break things" is roughly proportional to the size of the
codebase, and the oslo projects are typically small focused projects
where this seems reasonable to expect. *More than that*, I believe its
essential, or we'll have a very hard time propogating new releases out
amongst the servers.

tl;dr there seems to be no reason to do one release every 6 months of
olso.*, and doing so seems likely to only incur costs, since the
discipline needed to do regular semver with good backwards compat is a
discipline we're going to have to exercise anyway.

-Rob

-- 
Robert Collins 
Distinguished Technologist
HP Converged Cloud

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-13 Thread Doug Hellmann
Since I think we have consensus on this, I have published a slightly
modified version (cleaning up verb tense and clarifying how Juno and
post-Juno will differ) to the wiki:
https://wiki.openstack.org/wiki/Oslo/VersioningPolicy

On Thu, Jun 12, 2014 at 3:33 PM, Doug Hellmann
 wrote:
> On Thu, Jun 12, 2014 at 12:03 PM, Thierry Carrez  
> wrote:
>> Mark McLoughlin wrote:
>>> On Thu, 2014-06-12 at 12:09 +0200, Thierry Carrez wrote:
 Doug Hellmann wrote:
> On Tue, Jun 10, 2014 at 5:19 PM, Mark McLoughlin  
> wrote:
>> On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
>> [...]
>>> Background:
>>>
>>> We have two types of oslo libraries. Libraries like oslo.config and
>>> oslo.messaging were created by extracting incubated code, updating the
>>> public API, and packaging it. Libraries like cliff and taskflow were
>>> created as standalone packages from the beginning, and later adopted
>>> by the oslo team to manage their development and maintenance.
>>>
>>> Incubated libraries have been released at the end of a release cycle,
>>> as with the rest of the integrated packages. Adopted libraries have
>>> historically been released "as needed" during their development. We
>>> would like to synchronize these so that all oslo libraries are
>>> officially released with the rest of the software created by OpenStack
>>> developers.

 Could you outline the benefits of syncing with the integrated release ?
>>>
>>> Sure!
>>>
>>> http://lists.openstack.org/pipermail/openstack-dev/2012-November/003345.html
>>>
>>> :)
>>
>> Heh :) I know why *you* prefer it synced. Was just curious to see if
>> Doug thought the same way :P
>
> At first I didn't want to bother with alpha releases, because they
> introduce a special case. I've since come around to the same line of
> thinking as Mark, especially now that releasing alphas works without
> having to point to tarballs in requirements files.
>
>>
 Personally I see a few drawbacks to this approach:

 We dump the new version on consumers usually around RC time, which is
 generally a bad time to push a new version of a  dependency and detect
 potential breakage. Consumers just seem to get the new version at the
 worst possible time.

 It also prevents from spreading the work all over the cycle. For example
 it may have been more successful to have the oslo.messaging new release
 by milestone-1 to make sure it's adopted by projects in milestone-2 or
 milestone-3... rather than have it ready by milestone-3 and expect all
 projects to use it by consuming alphas during the cycle.

 Now if *all* projects were continuously consuming alpha versions, most
 of those drawbacks would go away.
>>>
>>> Yes, that's the plan. Those issues are acknowledged and we're reasonably
>>> confident the alpha versions plan will address them.
>>
>> I agree that if we release alphas often and most projects consume them
>> instead of jump from stable release to stable release, we have all the
>> benefits without the drawbacks.
>>
>> --
>> Thierry Carrez (ttx)
>>
>> ___
>> OpenStack-dev mailing list
>> OpenStack-dev@lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-12 Thread Doug Hellmann
On Thu, Jun 12, 2014 at 12:03 PM, Thierry Carrez  wrote:
> Mark McLoughlin wrote:
>> On Thu, 2014-06-12 at 12:09 +0200, Thierry Carrez wrote:
>>> Doug Hellmann wrote:
 On Tue, Jun 10, 2014 at 5:19 PM, Mark McLoughlin  wrote:
> On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
> [...]
>> Background:
>>
>> We have two types of oslo libraries. Libraries like oslo.config and
>> oslo.messaging were created by extracting incubated code, updating the
>> public API, and packaging it. Libraries like cliff and taskflow were
>> created as standalone packages from the beginning, and later adopted
>> by the oslo team to manage their development and maintenance.
>>
>> Incubated libraries have been released at the end of a release cycle,
>> as with the rest of the integrated packages. Adopted libraries have
>> historically been released "as needed" during their development. We
>> would like to synchronize these so that all oslo libraries are
>> officially released with the rest of the software created by OpenStack
>> developers.
>>>
>>> Could you outline the benefits of syncing with the integrated release ?
>>
>> Sure!
>>
>> http://lists.openstack.org/pipermail/openstack-dev/2012-November/003345.html
>>
>> :)
>
> Heh :) I know why *you* prefer it synced. Was just curious to see if
> Doug thought the same way :P

At first I didn't want to bother with alpha releases, because they
introduce a special case. I've since come around to the same line of
thinking as Mark, especially now that releasing alphas works without
having to point to tarballs in requirements files.

>
>>> Personally I see a few drawbacks to this approach:
>>>
>>> We dump the new version on consumers usually around RC time, which is
>>> generally a bad time to push a new version of a  dependency and detect
>>> potential breakage. Consumers just seem to get the new version at the
>>> worst possible time.
>>>
>>> It also prevents from spreading the work all over the cycle. For example
>>> it may have been more successful to have the oslo.messaging new release
>>> by milestone-1 to make sure it's adopted by projects in milestone-2 or
>>> milestone-3... rather than have it ready by milestone-3 and expect all
>>> projects to use it by consuming alphas during the cycle.
>>>
>>> Now if *all* projects were continuously consuming alpha versions, most
>>> of those drawbacks would go away.
>>
>> Yes, that's the plan. Those issues are acknowledged and we're reasonably
>> confident the alpha versions plan will address them.
>
> I agree that if we release alphas often and most projects consume them
> instead of jump from stable release to stable release, we have all the
> benefits without the drawbacks.
>
> --
> Thierry Carrez (ttx)
>
> ___
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-12 Thread Thierry Carrez
Mark McLoughlin wrote:
> On Thu, 2014-06-12 at 12:09 +0200, Thierry Carrez wrote:
>> Doug Hellmann wrote:
>>> On Tue, Jun 10, 2014 at 5:19 PM, Mark McLoughlin  wrote:
 On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
 [...]
> Background:
>
> We have two types of oslo libraries. Libraries like oslo.config and
> oslo.messaging were created by extracting incubated code, updating the
> public API, and packaging it. Libraries like cliff and taskflow were
> created as standalone packages from the beginning, and later adopted
> by the oslo team to manage their development and maintenance.
>
> Incubated libraries have been released at the end of a release cycle,
> as with the rest of the integrated packages. Adopted libraries have
> historically been released "as needed" during their development. We
> would like to synchronize these so that all oslo libraries are
> officially released with the rest of the software created by OpenStack
> developers.
>>
>> Could you outline the benefits of syncing with the integrated release ?
> 
> Sure!
> 
> http://lists.openstack.org/pipermail/openstack-dev/2012-November/003345.html
> 
> :)

Heh :) I know why *you* prefer it synced. Was just curious to see if
Doug thought the same way :P

>> Personally I see a few drawbacks to this approach:
>>
>> We dump the new version on consumers usually around RC time, which is
>> generally a bad time to push a new version of a  dependency and detect
>> potential breakage. Consumers just seem to get the new version at the
>> worst possible time.
>>
>> It also prevents from spreading the work all over the cycle. For example
>> it may have been more successful to have the oslo.messaging new release
>> by milestone-1 to make sure it's adopted by projects in milestone-2 or
>> milestone-3... rather than have it ready by milestone-3 and expect all
>> projects to use it by consuming alphas during the cycle.
>>
>> Now if *all* projects were continuously consuming alpha versions, most
>> of those drawbacks would go away.
> 
> Yes, that's the plan. Those issues are acknowledged and we're reasonably
> confident the alpha versions plan will address them.

I agree that if we release alphas often and most projects consume them
instead of jump from stable release to stable release, we have all the
benefits without the drawbacks.

-- 
Thierry Carrez (ttx)

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-12 Thread Mark McLoughlin
On Thu, 2014-06-12 at 12:09 +0200, Thierry Carrez wrote:
> Doug Hellmann wrote:
> > On Tue, Jun 10, 2014 at 5:19 PM, Mark McLoughlin  wrote:
> >> On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
> >> [...]
> >>> Background:
> >>>
> >>> We have two types of oslo libraries. Libraries like oslo.config and
> >>> oslo.messaging were created by extracting incubated code, updating the
> >>> public API, and packaging it. Libraries like cliff and taskflow were
> >>> created as standalone packages from the beginning, and later adopted
> >>> by the oslo team to manage their development and maintenance.
> >>>
> >>> Incubated libraries have been released at the end of a release cycle,
> >>> as with the rest of the integrated packages. Adopted libraries have
> >>> historically been released "as needed" during their development. We
> >>> would like to synchronize these so that all oslo libraries are
> >>> officially released with the rest of the software created by OpenStack
> >>> developers.
> 
> Could you outline the benefits of syncing with the integrated release ?

Sure!

http://lists.openstack.org/pipermail/openstack-dev/2012-November/003345.html

:)

> Personally I see a few drawbacks to this approach:
> 
> We dump the new version on consumers usually around RC time, which is
> generally a bad time to push a new version of a   dependency and detect
> potential breakage. Consumers just seem to get the new version at the
> worst possible time.
> 
> It also prevents from spreading the work all over the cycle. For example
> it may have been more successful to have the oslo.messaging new release
> by milestone-1 to make sure it's adopted by projects in milestone-2 or
> milestone-3... rather than have it ready by milestone-3 and expect all
> projects to use it by consuming alphas during the cycle.
> 
> Now if *all* projects were continuously consuming alpha versions, most
> of those drawbacks would go away.

Yes, that's the plan. Those issues are acknowledged and we're reasonably
confident the alpha versions plan will address them.

> >>> [...]
> >>> Patch Releases:
> >>>
> >>> Updates to existing library releases can be made from stable branches.
> >>> Checking out stable/icehouse of oslo.config for example would allow a
> >>> release 1.3.1. We don't have a formal policy about whether we will
> >>> create patch releases, or whether applications are better off using
> >>> the latest release of the library. Do we need one?
> >>
> >> I'm not sure we need one, but if we did I'd expect them to be aligned
> >> with stable releases.
> >>
> >> Right now, I think they'd just be as-needed - if there's enough
> >> backported to the stable branch to warrant a release, we just cut one.
> > 
> > That's pretty much what I thought, too. We shouldn't need to worry
> > about alphas for patch releases, since we won't add features.
> 
> Yes, I think we can be pretty flexible about it. But to come back to my
> above remark... should it be stable/icehouse or stable/1.3 ?

It's a branch for bugfix releases of the icehouse version of the
library, so I think stable/icehouse makes sense.

Mark.


___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-12 Thread Thierry Carrez
Doug Hellmann wrote:
> On Tue, Jun 10, 2014 at 5:19 PM, Mark McLoughlin  wrote:
>> On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
>> [...]
>>> Background:
>>>
>>> We have two types of oslo libraries. Libraries like oslo.config and
>>> oslo.messaging were created by extracting incubated code, updating the
>>> public API, and packaging it. Libraries like cliff and taskflow were
>>> created as standalone packages from the beginning, and later adopted
>>> by the oslo team to manage their development and maintenance.
>>>
>>> Incubated libraries have been released at the end of a release cycle,
>>> as with the rest of the integrated packages. Adopted libraries have
>>> historically been released "as needed" during their development. We
>>> would like to synchronize these so that all oslo libraries are
>>> officially released with the rest of the software created by OpenStack
>>> developers.

Could you outline the benefits of syncing with the integrated release ?

Personally I see a few drawbacks to this approach:

We dump the new version on consumers usually around RC time, which is
generally a bad time to push a new version of a dependency and detect
potential breakage. Consumers just seem to get the new version at the
worst possible time.

It also prevents from spreading the work all over the cycle. For example
it may have been more successful to have the oslo.messaging new release
by milestone-1 to make sure it's adopted by projects in milestone-2 or
milestone-3... rather than have it ready by milestone-3 and expect all
projects to use it by consuming alphas during the cycle.

Now if *all* projects were continuously consuming alpha versions, most
of those drawbacks would go away.

>>> [...]
>>> Patch Releases:
>>>
>>> Updates to existing library releases can be made from stable branches.
>>> Checking out stable/icehouse of oslo.config for example would allow a
>>> release 1.3.1. We don't have a formal policy about whether we will
>>> create patch releases, or whether applications are better off using
>>> the latest release of the library. Do we need one?
>>
>> I'm not sure we need one, but if we did I'd expect them to be aligned
>> with stable releases.
>>
>> Right now, I think they'd just be as-needed - if there's enough
>> backported to the stable branch to warrant a release, we just cut one.
> 
> That's pretty much what I thought, too. We shouldn't need to worry
> about alphas for patch releases, since we won't add features.

Yes, I think we can be pretty flexible about it. But to come back to my
above remark... should it be stable/icehouse or stable/1.3 ?

-- 
Thierry Carrez (ttx)

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-11 Thread Doug Hellmann
On Tue, Jun 10, 2014 at 5:19 PM, Mark McLoughlin  wrote:
> On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
>> As part of the push to release code from the oslo incubator in
>> stand-alone libraries, we have had several different discussions about
>> versioning and release schedules. This is an attempt to collect all of
>> the decisions we have made in those discussions and to lay out the
>> rationale for the approach we are taking. I don't expect any of this
>> to be a surprise, since we've talked about it, but I haven't actually
>> written it all down in one place before so some of you might not have
>> seen all of the points. Please let me know if you see any issues with
>> the proposal or have questions. If everyone agrees that this makes
>> sense, I'll put it in the wiki.
>
> Nice work Doug, this is looking great.
>
>> Background:
>>
>> We have two types of oslo libraries. Libraries like oslo.config and
>> oslo.messaging were created by extracting incubated code, updating the
>> public API, and packaging it. Libraries like cliff and taskflow were
>> created as standalone packages from the beginning, and later adopted
>> by the oslo team to manage their development and maintenance.
>>
>> Incubated libraries have been released at the end of a release cycle,
>> as with the rest of the integrated packages. Adopted libraries have
>> historically been released "as needed" during their development. We
>> would like to synchronize these so that all oslo libraries are
>> officially released with the rest of the software created by OpenStack
>> developers.
>>
>> The first release of oslo.config was 1.1.0, as part of the grizzly
>> release. The first release of oslo.messaging was 1.2.0, as part of the
>> havana release. oslo.config was also updated to 1.2.0 during havana.
>> All current adopted libraries have release numbers less than 1.0.0.
>>
>> In the past, alpha releases of oslo libraries have been distributed as
>> tarballs on an openstack server, with official releases going to PyPI.
>> Applications that required the alpha release specified the tarball in
>> their requirements list, followed by a version specifier. This allowed
>> us to prepare alpha releases, without worrying that their release
>> would break continuous-deployment systems by making new library
>> releases available to pip. This approach still made it difficult for
>> an application developer to rely on new features of an oslo library,
>> until an alpha version was produced.
>>
>> When the PyPI mirror was introduced in our CI system, relying on
>> tarballs not available on the mirror conflicted with our desire to
>> have the gate system install *only* from the package mirror. As we are
>> now installing only from the mirror, we need to publish our alpha
>> releases in a format that will work with the mirror.
>>
>> We already gate OpenStack applications and oslo libraries using
>> integration tests using the normal devstack-gate jobs. During Icehouse
>> we had a couple of oslo library releases that broke unit tests of
>> applications after the library was released. We plan to address that
>> with separate gating jobs during juno. In addition to that gating, we
>> need to support developers who want to use new features of oslo
>> libraries before official releases are available.
>>
>> A Version Numbering Scheme:
>>
>> At the Juno summit, Josh proposed that we use semantic versioning
>> (SemVer) for oslo libraries [1]. Part of that proposal also included
>> ideas for allowing breaking backwards compatibility at some release
>> boundaries, and I am explicitly *not* addressing
>> backwards-incompatible changes beyond saying that we do not expect to
>> have any during Juno. We do need to solve the problem of breaking API
>> compatibility, but I want to take one step at a time. The first step
>> is choosing a rational release versioning scheme.
>>
>> SemVer is widely used and gives us relatively clear guidelines about
>> choosing new version numbers. It supports alpha releases, which are
>> going to be key to meeting some of our other requirements. I propose
>> that we adopt pbr's modified SemVer [2] for new releases, beginning
>> with Juno.
>>
>> The versions for existing libraries oslo.config and oslo.messaging
>> will be incremented from their Icehouse versions but updating the
>> minor number (1.x.0) at the end of the Juno cycle.
>>
>> All adopted libraries using numbers less than 1.0 will be released as
>> 1.0.0 at the end of the Juno cycle, based on the fact that we expect
>> deployers to use them in production.
>
> Perhaps not directly related to this proposal, but IMHO OpenStack should
> not depend on any semver-versioned libraries which are still on 0.x.
>
> i.e. we should not depend on API unstable projects (because of the pain
> it imposes on everyone), particularly ones that are likely to feel
> empowered to break their API at will because of their version number :)
>
>> Releases during Juno should *all* be marked as alphas of 

Re: [openstack-dev] [oslo] versioning and releases

2014-06-10 Thread Joshua Harlow
I think its a nice ideal to not depend on < 1.0 libraries but I don't
think it's possible currently,

When I did the design session I gathered some stats about this:

Global-requirements.txt installed in a venv (u can try this at home).
 - 206 requirements installed
 - 102 were >= 1.0
 - 104 were < 1.0

I think we'd be shooting ourselves in the foot if we tried this at the
current stage and I'm not sure if we would have as many contributors
involved in openstack if we also do this (sometimes it's actually
beneficial to adopt things even if they are < 1.0, that¹s how software
matures to be 1.0, by users adopting it, and if we aren't helping mature
the openstack community and related communities then I think we failed our
jobs).

Maybe it can be a long-term goal?

-Josh

-Original Message-
From: Mark McLoughlin 
Reply-To: "OpenStack Development Mailing List (not for usage questions)"

Date: Tuesday, June 10, 2014 at 2:19 PM
To: "OpenStack Development Mailing List (not for usage questions)"

Subject: Re: [openstack-dev] [oslo] versioning and releases

>On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
>> As part of the push to release code from the oslo incubator in
>> stand-alone libraries, we have had several different discussions about
>> versioning and release schedules. This is an attempt to collect all of
>> the decisions we have made in those discussions and to lay out the
>> rationale for the approach we are taking. I don't expect any of this
>> to be a surprise, since we've talked about it, but I haven't actually
>> written it all down in one place before so some of you might not have
>> seen all of the points. Please let me know if you see any issues with
>> the proposal or have questions. If everyone agrees that this makes
>> sense, I'll put it in the wiki.
>
>Nice work Doug, this is looking great.
>
>> Background:
>> 
>> We have two types of oslo libraries. Libraries like oslo.config and
>> oslo.messaging were created by extracting incubated code, updating the
>> public API, and packaging it. Libraries like cliff and taskflow were
>> created as standalone packages from the beginning, and later adopted
>> by the oslo team to manage their development and maintenance.
>> 
>> Incubated libraries have been released at the end of a release cycle,
>> as with the rest of the integrated packages. Adopted libraries have
>> historically been released "as needed" during their development. We
>> would like to synchronize these so that all oslo libraries are
>> officially released with the rest of the software created by OpenStack
>> developers.
>> 
>> The first release of oslo.config was 1.1.0, as part of the grizzly
>> release. The first release of oslo.messaging was 1.2.0, as part of the
>> havana release. oslo.config was also updated to 1.2.0 during havana.
>> All current adopted libraries have release numbers less than 1.0.0.
>> 
>> In the past, alpha releases of oslo libraries have been distributed as
>> tarballs on an openstack server, with official releases going to PyPI.
>> Applications that required the alpha release specified the tarball in
>> their requirements list, followed by a version specifier. This allowed
>> us to prepare alpha releases, without worrying that their release
>> would break continuous-deployment systems by making new library
>> releases available to pip. This approach still made it difficult for
>> an application developer to rely on new features of an oslo library,
>> until an alpha version was produced.
>> 
>> When the PyPI mirror was introduced in our CI system, relying on
>> tarballs not available on the mirror conflicted with our desire to
>> have the gate system install *only* from the package mirror. As we are
>> now installing only from the mirror, we need to publish our alpha
>> releases in a format that will work with the mirror.
>> 
>> We already gate OpenStack applications and oslo libraries using
>> integration tests using the normal devstack-gate jobs. During Icehouse
>> we had a couple of oslo library releases that broke unit tests of
>> applications after the library was released. We plan to address that
>> with separate gating jobs during juno. In addition to that gating, we
>> need to support developers who want to use new features of oslo
>> libraries before official releases are available.
>> 
>> A Version Numbering Scheme:
>> 
>> At the Juno summit, Josh proposed that we use semantic versioning
>> (SemVer) for oslo libraries [1]. Part of that proposal also included
>> ideas for allowing break

Re: [openstack-dev] [oslo] versioning and releases

2014-06-10 Thread Donald Stufft

On Jun 10, 2014, at 5:19 PM, Mark McLoughlin  wrote:

>> 
>> The new CI system can create packages as
>> Python wheels and publish them to the appropriate servers, which means
>> projects will no longer need to refer explicitly to pre-release
>> tarballs.
> 
> The details are a bit more nuanced here - pip won't install alpha
> libraries unless you explicitly request them with a command line flag to
> install any alphas available or you explicitly require the alpha
> version.

It doesn’t have to explicitly require the alpha, it just has to include 
pre-releases
so stuff like >=1.2a0,<1.3 would include 1.2a0 and higher, and “less than 1.3”.
Unfortunately that’s a bit wonky still because 1.3a0 is technically < 1.3 so
it’d match too. At least until we finish implementing PEP 440.

-
Donald Stufft
PGP: 0x6E3CBCE93372DCFA // 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA



signature.asc
Description: Message signed with OpenPGP using GPGMail
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [oslo] versioning and releases

2014-06-10 Thread Mark McLoughlin
On Tue, 2014-06-10 at 12:24 -0400, Doug Hellmann wrote:
> As part of the push to release code from the oslo incubator in
> stand-alone libraries, we have had several different discussions about
> versioning and release schedules. This is an attempt to collect all of
> the decisions we have made in those discussions and to lay out the
> rationale for the approach we are taking. I don't expect any of this
> to be a surprise, since we've talked about it, but I haven't actually
> written it all down in one place before so some of you might not have
> seen all of the points. Please let me know if you see any issues with
> the proposal or have questions. If everyone agrees that this makes
> sense, I'll put it in the wiki.

Nice work Doug, this is looking great.

> Background:
> 
> We have two types of oslo libraries. Libraries like oslo.config and
> oslo.messaging were created by extracting incubated code, updating the
> public API, and packaging it. Libraries like cliff and taskflow were
> created as standalone packages from the beginning, and later adopted
> by the oslo team to manage their development and maintenance.
> 
> Incubated libraries have been released at the end of a release cycle,
> as with the rest of the integrated packages. Adopted libraries have
> historically been released "as needed" during their development. We
> would like to synchronize these so that all oslo libraries are
> officially released with the rest of the software created by OpenStack
> developers.
> 
> The first release of oslo.config was 1.1.0, as part of the grizzly
> release. The first release of oslo.messaging was 1.2.0, as part of the
> havana release. oslo.config was also updated to 1.2.0 during havana.
> All current adopted libraries have release numbers less than 1.0.0.
> 
> In the past, alpha releases of oslo libraries have been distributed as
> tarballs on an openstack server, with official releases going to PyPI.
> Applications that required the alpha release specified the tarball in
> their requirements list, followed by a version specifier. This allowed
> us to prepare alpha releases, without worrying that their release
> would break continuous-deployment systems by making new library
> releases available to pip. This approach still made it difficult for
> an application developer to rely on new features of an oslo library,
> until an alpha version was produced.
> 
> When the PyPI mirror was introduced in our CI system, relying on
> tarballs not available on the mirror conflicted with our desire to
> have the gate system install *only* from the package mirror. As we are
> now installing only from the mirror, we need to publish our alpha
> releases in a format that will work with the mirror.
> 
> We already gate OpenStack applications and oslo libraries using
> integration tests using the normal devstack-gate jobs. During Icehouse
> we had a couple of oslo library releases that broke unit tests of
> applications after the library was released. We plan to address that
> with separate gating jobs during juno. In addition to that gating, we
> need to support developers who want to use new features of oslo
> libraries before official releases are available.
> 
> A Version Numbering Scheme:
> 
> At the Juno summit, Josh proposed that we use semantic versioning
> (SemVer) for oslo libraries [1]. Part of that proposal also included
> ideas for allowing breaking backwards compatibility at some release
> boundaries, and I am explicitly *not* addressing
> backwards-incompatible changes beyond saying that we do not expect to
> have any during Juno. We do need to solve the problem of breaking API
> compatibility, but I want to take one step at a time. The first step
> is choosing a rational release versioning scheme.
> 
> SemVer is widely used and gives us relatively clear guidelines about
> choosing new version numbers. It supports alpha releases, which are
> going to be key to meeting some of our other requirements. I propose
> that we adopt pbr's modified SemVer [2] for new releases, beginning
> with Juno.
> 
> The versions for existing libraries oslo.config and oslo.messaging
> will be incremented from their Icehouse versions but updating the
> minor number (1.x.0) at the end of the Juno cycle.
> 
> All adopted libraries using numbers less than 1.0 will be released as
> 1.0.0 at the end of the Juno cycle, based on the fact that we expect
> deployers to use them in production.

Perhaps not directly related to this proposal, but IMHO OpenStack should
not depend on any semver-versioned libraries which are still on 0.x.

i.e. we should not depend on API unstable projects (because of the pain
it imposes on everyone), particularly ones that are likely to feel
empowered to break their API at will because of their version number :)

> Releases during Juno should *all* be marked as alphas of the
> anticipated upcoming SemVer-based release number (1.0.0.0aN or
> 1.2.0.0aN or whatever).

Why not simply 1.2.0aN btw?

>  The new CI syste

[openstack-dev] [oslo] versioning and releases

2014-06-10 Thread Doug Hellmann
As part of the push to release code from the oslo incubator in
stand-alone libraries, we have had several different discussions about
versioning and release schedules. This is an attempt to collect all of
the decisions we have made in those discussions and to lay out the
rationale for the approach we are taking. I don't expect any of this
to be a surprise, since we've talked about it, but I haven't actually
written it all down in one place before so some of you might not have
seen all of the points. Please let me know if you see any issues with
the proposal or have questions. If everyone agrees that this makes
sense, I'll put it in the wiki.

Doug



Background:

We have two types of oslo libraries. Libraries like oslo.config and
oslo.messaging were created by extracting incubated code, updating the
public API, and packaging it. Libraries like cliff and taskflow were
created as standalone packages from the beginning, and later adopted
by the oslo team to manage their development and maintenance.

Incubated libraries have been released at the end of a release cycle,
as with the rest of the integrated packages. Adopted libraries have
historically been released "as needed" during their development. We
would like to synchronize these so that all oslo libraries are
officially released with the rest of the software created by OpenStack
developers.

The first release of oslo.config was 1.1.0, as part of the grizzly
release. The first release of oslo.messaging was 1.2.0, as part of the
havana release. oslo.config was also updated to 1.2.0 during havana.
All current adopted libraries have release numbers less than 1.0.0.

In the past, alpha releases of oslo libraries have been distributed as
tarballs on an openstack server, with official releases going to PyPI.
Applications that required the alpha release specified the tarball in
their requirements list, followed by a version specifier. This allowed
us to prepare alpha releases, without worrying that their release
would break continuous-deployment systems by making new library
releases available to pip. This approach still made it difficult for
an application developer to rely on new features of an oslo library,
until an alpha version was produced.

When the PyPI mirror was introduced in our CI system, relying on
tarballs not available on the mirror conflicted with our desire to
have the gate system install *only* from the package mirror. As we are
now installing only from the mirror, we need to publish our alpha
releases in a format that will work with the mirror.

We already gate OpenStack applications and oslo libraries using
integration tests using the normal devstack-gate jobs. During Icehouse
we had a couple of oslo library releases that broke unit tests of
applications after the library was released. We plan to address that
with separate gating jobs during juno. In addition to that gating, we
need to support developers who want to use new features of oslo
libraries before official releases are available.

A Version Numbering Scheme:

At the Juno summit, Josh proposed that we use semantic versioning
(SemVer) for oslo libraries [1]. Part of that proposal also included
ideas for allowing breaking backwards compatibility at some release
boundaries, and I am explicitly *not* addressing
backwards-incompatible changes beyond saying that we do not expect to
have any during Juno. We do need to solve the problem of breaking API
compatibility, but I want to take one step at a time. The first step
is choosing a rational release versioning scheme.

SemVer is widely used and gives us relatively clear guidelines about
choosing new version numbers. It supports alpha releases, which are
going to be key to meeting some of our other requirements. I propose
that we adopt pbr's modified SemVer [2] for new releases, beginning
with Juno.

The versions for existing libraries oslo.config and oslo.messaging
will be incremented from their Icehouse versions but updating the
minor number (1.x.0) at the end of the Juno cycle.

All adopted libraries using numbers less than 1.0 will be released as
1.0.0 at the end of the Juno cycle, based on the fact that we expect
deployers to use them in production.

Releases during Juno should *all* be marked as alphas of the
anticipated upcoming SemVer-based release number (1.0.0.0aN or
1.2.0.0aN or whatever). The new CI system can create packages as
Python wheels and publish them to the appropriate servers, which means
projects will no longer need to refer explicitly to pre-release
tarballs.

Releases after Juno will follow a similar pattern, incrementing the
minor number and using alpha releases within the development cycle.

[1] https://etherpad.openstack.org/p/juno-oslo-semantic-versioning
[2] http://docs.openstack.org/developer/pbr/semver.html

Frequent Alpha Releases:

While we can run gate jobs using the master branch of oslo libraries,
developers will have to take extra steps to run unit tests this way
locally. To reduce this process overhead,