Differences between revisions 1 and 20 (spanning 19 versions)
Revision 1 as of 2015-07-22 02:08:58
Size: 1308
Comment:
Revision 20 as of 2019-11-19 12:40:22
Size: 3808
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
Ruby interpreter transitions are done in phases so that (hopefully) unstable is never broken: Ruby interpreter transitions are done in phases so that (hopefully) unstable is never broken. Examples of past transitions:
Line 5: Line 5:
== phase 0: the new ruby reaches unstable ==  * [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=789077|ruby2.2 transition (#789077)]]
 * [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813237|ruby2.3 transition (#813237)]]
 * ruby2.5 transition ([[Teams/Ruby/ruby2.5|wiki page]])
Line 7: Line 9:
== phase 1: enable both interpreters == == phase 0: get the new ruby in the archive (unstable|experimental) ==

Look at the debian/newruby script in the source package. it will adjust all the files under debian/ for the new rubyX.Y package.

== phase 1: enable both interpreters in experimental ==
Line 12: Line 18:
== phase 2: rebuild/fix == changes needed in ruby-defaults:
Line 14: Line 20:
packages get rebuilt/fixed with support for both the old ruby
and the new ruby
 * edit `ruby_debian_dev.rb` and add a new `has_support_for` block for the new interpreter.
Line 17: Line 22:
ideally, what needs to fixed needs to be fixed in a way that it won't need to be
fixed again in the next transition.
do test rebuilds of all reverse-dependencies. take notes of what breaks, and report bugs with severity important.
Line 20: Line 24:
== phase 3: new interpreter becomes the default == open a transition bug against release.debian.org. using the following parameters for ben (the transition tracker tool), where A.B is the old version, and X.Y is the new one:
Line 22: Line 26:
ruby-defaults gets uploaded with {{{
Affected: (.depends ~ /rubyA.B | .depends ~ /rubyX.Y/) & !.source ~ /^(rubyA.B|rubyX.Y|ruby-defaults)$/)
Good: .depends ~ /rubyX.Y/
Bad: .depends ~ /rubyA.B/ & !.depends ~ /rubyX.Y/
}}}
Line 24: Line 32:
* ruby depending on new interpreter main package (rubyX.Y)
* ruby-dev depending on new interpreter -dev package (rubyX.Y-dev)
== phase 2: enable both interpreters in unstable, rebuild/fix ==
Line 27: Line 34:
this phase may be done in conjunction with the next one tell the release team that you intend to enable builds against the new ruby version in unstable. provide information on which packages still FTBFS with the new Ruby enabled.
Line 29: Line 36:
== phase 4: old ruby is disabled == wait for an ACK from the release team.
Line 31: Line 38:
ruby-defaults gets uploaded telling gem2deb to stop building
for the old ruby, i.e.
upload the new ruby-defaults to unstable and request binNMU of the packages that you know will build fine against the new ruby (and will not only build against the current default ruby)
Line 34: Line 40:
* ruby-all-dev drops dependencies on rubyX.Y/rubyX.Y-dev from old interpreter packages get rebuilt/fixed with support for both the old ruby and the new ruby
Line 36: Line 42:
this phase may be done in conjunction with the previous one ideally, what needs to fixed has to be fixed in a way that it won't need to be
fixed again in the next transition (e.g. harcoded ruby versions need to be removed).
Line 38: Line 45:
== phase 5: rebuild/fix == == phase 3: new interpreter becomes the default, old one is disabled ==
Line 40: Line 47:
packages get rebuilt/fixed to drop support for the old interpreter changes needed in ruby-defaults:
Line 42: Line 49:
== phase 6: old ruby gets removed ==  * edit `ruby_debian_dev.rb` and remove the `has_support_for` block for the old interpreter
 * run `./debian/newruby X.Y` and it will replace the old version with the new one in several places in the package (where X.Y is the version of the new interpreter).
Line 44: Line 52:
* remove from testing first
* remove from unstable later
stage this in experimental first, ask people to test (at least in debian-ruby@lists.debian.org).

in special, test rebuilding all the stuff that links against the current default ruby version and make sure they can be binNMUed when the default really changes.

tell the release team that you intend to switch the default and disable the old interpreter in unstable before doing it; wait for an ACK from them.

upload the new ruby-defaults to unstable

request binNMUs for the packages that build against the default interpreter

== phase 4: remove old interpreter from testing ==

Open a transition:

open a transition bug against release.debian.org. using the following parameters for ben (the transition tracker tool), where A.B is the old version, and X.Y is the new one:

{{{
is_affected = (.depends ~ /rubyA.B | .depends ~ /rubyX.Y/) & !.source ~ /^(rubyA.B|rubyX.Y|ruby-defaults)$/)
is_good = ! .depends ~ /rubyA.B/
is_bad = .depends ~ /rubyA.B/
}}}

Then request binNMU for the packages marked as bad

When there are no bad packages left (i.e. the transition is done), request the removal from testing.

== phase 5: remove old interpreter from unstable ==

just do it.

Ruby interpreter transitions

Ruby interpreter transitions are done in phases so that (hopefully) unstable is never broken. Examples of past transitions:

phase 0: get the new ruby in the archive (unstable|experimental)

Look at the debian/newruby script in the source package. it will adjust all the files under debian/ for the new rubyX.Y package.

phase 1: enable both interpreters in experimental

ruby-defaults gets uploaded telling gem2deb to build for both the old and the new ruby versions.

changes needed in ruby-defaults:

  • edit ruby_debian_dev.rb and add a new has_support_for block for the new interpreter.

do test rebuilds of all reverse-dependencies. take notes of what breaks, and report bugs with severity important.

open a transition bug against release.debian.org. using the following parameters for ben (the transition tracker tool), where A.B is the old version, and X.Y is the new one:

Affected: (.depends ~ /rubyA.B | .depends ~ /rubyX.Y/) & !.source ~ /^(rubyA.B|rubyX.Y|ruby-defaults)$/)
Good: .depends ~ /rubyX.Y/
Bad: .depends ~ /rubyA.B/ & !.depends ~ /rubyX.Y/

phase 2: enable both interpreters in unstable, rebuild/fix

tell the release team that you intend to enable builds against the new ruby version in unstable. provide information on which packages still FTBFS with the new Ruby enabled.

wait for an ACK from the release team.

upload the new ruby-defaults to unstable and request binNMU of the packages that you know will build fine against the new ruby (and will not only build against the current default ruby)

packages get rebuilt/fixed with support for both the old ruby and the new ruby

ideally, what needs to fixed has to be fixed in a way that it won't need to be fixed again in the next transition (e.g. harcoded ruby versions need to be removed).

phase 3: new interpreter becomes the default, old one is disabled

changes needed in ruby-defaults:

  • edit ruby_debian_dev.rb and remove the has_support_for block for the old interpreter

  • run ./debian/newruby X.Y and it will replace the old version with the new one in several places in the package (where X.Y is the version of the new interpreter).

stage this in experimental first, ask people to test (at least in debian-ruby@lists.debian.org).

in special, test rebuilding all the stuff that links against the current default ruby version and make sure they can be binNMUed when the default really changes.

tell the release team that you intend to switch the default and disable the old interpreter in unstable before doing it; wait for an ACK from them.

upload the new ruby-defaults to unstable

request binNMUs for the packages that build against the default interpreter

phase 4: remove old interpreter from testing

Open a transition:

open a transition bug against release.debian.org. using the following parameters for ben (the transition tracker tool), where A.B is the old version, and X.Y is the new one:

is_affected = (.depends ~ /rubyA.B | .depends ~ /rubyX.Y/) & !.source ~ /^(rubyA.B|rubyX.Y|ruby-defaults)$/)
is_good = ! .depends ~ /rubyA.B/                                                 
is_bad = .depends ~ /rubyA.B/                                                    

Then request binNMU for the packages marked as bad

When there are no bad packages left (i.e. the transition is done), request the removal from testing.

phase 5: remove old interpreter from unstable

just do it.