gem2rpm and upgrades of existing rpms
Vít Ondruch
vondruch at redhat.com
Wed Jun 25 15:14:28 UTC 2014
Dne 25.6.2014 16:15, Joe Rafaniello napsal(a):
>
>
>
> ----- Original Message -----
>
>
> ----- Original Message -----
>> Dne 24.6.2014 20:47, Joe Rafaniello napsal(a):
>>> ----- Original Message -----
>>>> On 06/23/2014 09:58 PM, Joe Rafaniello wrote:
>>>>> If gem2rpm could handle both initial and updates to the spec, we can
>>>>> cleanly separate the responsibilities and just delegate to gem2rpm for
>>>>> all
>>>>> or some of that work.
>>>>> I would be happy to have polisher be the wrapper around gem2rpm for
>>>>> larger
>>>>> "workflows."
>>>>>
>>>>> I have only glanced at the gem2rpm code and don't know how much effort it
>>>>> is to handle "updates", this is just a curiosity at this point.
>>>>>
>>>>> For example, I'm curious how are changes in packaging conventions
>>>>> currently
>>>>> handled?
>>>>> Through new gem2rpm templates?
>>>> Yes. By default is uses this template[0] which was recently updated to
>>>> reflect new ruby 2.1 changes.
>>>>
>>>>> Is there a migration path for updating an existing rpm spec from an old
>>>>> template to a new template?
>>>>> Is this all done manually currently? Are there tools to enforce/verify
>>>>> packaging conventions?
>>>> Vit, has written a set of scripts which update the specs to current
>>>> guidelines[1], I don't know if some edge cases are missed though. You
>>>> can follow a previous discussion[2].
>>>>
>>>> And to chime in the discussion, changing only the sections you mentioned
>>>> should not be that big a deal.
>>>>
>>>> - version is easy to be fetched from rubygems.org
>>>> - Changelog is also easy
>>>> - Requires are not needed for fc21 and above (could use a different
>>>> template for other branches)
>>>> - BR could be tricky, since current implementation [3] (correct me if
>>>> I'm wring) checks development deps from gemspec and eg. tools needed for
>>>> the test suites might not be in that list. So, you can't avoid manual
>>>> intervention after all.
>>>>
>>>> As Josef wrote, ideally what we need is some sort of a web app that
>>>> checks/builds every time a new version is out.
>>>>
>>>>
>>>> [0]
>>>> https://github.com/lutter/gem2rpm/blob/master/templates/fedora-21-rawhide.spec.erb
>>>> [1] https://github.com/voxik/fermig
>>>> [2]
>>>> https://lists.fedoraproject.org/pipermail/ruby-sig/2014-April/001537.html
>>>> [3]
>>>> https://github.com/lutter/gem2rpm/blob/master/templates/fedora-21-rawhide.spec.erb#L21
>>>>
>>>> --
>>>> FAS : axilleas
>>>> GPG : 0xABF99BE5
>>>> Blog: http://axilleas.me
>>>> _______________________________________________
>>>> ruby-sig mailing list
>>>> ruby-sig at lists.fedoraproject.org
>>>> https://admin.fedoraproject.org/mailman/listinfo/ruby-sig
>>> Thanks. Those are all good references.
>>> Does anyone have opinions as to where automation of spec updates belong?
>>> I'm wondering why gem2rpm wasn't used for Vit's "fermig" scripts?
>> Well, what is in the upstream fermig repository and what I am actually
>> using during migration periods is not always the same. From my point of
>> view, it is one shot library, which should be ideally used once a year
>> (or how often the guidelines are updated) and that is it.
>>
>> Actually, I see where are you aiming, i.e. the upgrade of gem is good
>> opportunity to update the .spec, etc. but from tooling POV, it is easier
>> to do it in two steps, e.g. update everything in Fedora when guidelines
>> are updated and upgrade to new version when new version is released.
>>
>> Vít
>>
> Corrected the line 7) below...
>
> Thanks, this is great information.
> I think it's easier to add "update" functionality to gem2rpm by ensuring the template and spec both get updated to latest conventions.
> It's really complicated to try to apply changes from a spec generated with new conventions into a spec using old or no conventions.
>
> 1) Update or at least highlight changes needed to the template we're using to abide by conventions
> 2) Manually or script update the existing template to latest conventions in 1)
> 3) Commit the updated template
> 4) Call the fermig scripts to update the existing .spec to latest conventions
> 5) Commit the .spec with latest conventions
> 6) Use gem2rpm to generate a new .spec from the updated template in 2) for the desired gem version
> 7) Apply the applicable changes from 6) into 5) (requires, buildrequires, version, etc.)
> 8) Take a breathe and see if we broke things ;-)
>
> Do you have any links to distgit repos where the template and spec were upgraded for conventions?
> Vit, the scripts don't appear to be cumulative. So for example, I'd imagine the f19.rb should be run before running update.rb which calls f21.rb.
> Is this correct?
>
I am afraid I don't follow you. But I'll try to make same remarks which
hopefully answers some of your questions.
* No, fermig does not do cumulative updates. It should be the tool,
which should be run after guidelines update and it will update all
packages in Rawhide at once and rebuilds them. Since all packages are
up2date from that moment, you don't need to care about the history and
it does not need to be cumulative. Unfortunately, this is just theory.
* If you maintain several gems, you might create your own template for
gem2rpm. The template would be unique for every gem you maintain. The
template would be basically your latest .spec file, with a few macros
remaining, Ideally, just the version macro. When new gem version is
release, you regenerate the .spec using that template and you are done.
* It should be possible to run fermig on gem2rpm templates and get it
updated. This will get the template up2date with the latest guidelines
and you can continue to use the template for updates. The success rate
will depend on the template complexity.
* Please note, that the rubygem- package updates are bit easier in F21+,
since you don't need to care about Requires. The requires are
autogenerated for you.
* If I should choose what will be my next target in a war for simplified
gem packaging, then I'd love to focus to simplify %files sections. The
first step might be something like %{gem_directories} macro, which would
replace %{gem_instdir}, %{gem_spec} and %{gem_cache} set of macros,
which are repeated in every gem. The next step of evolution might be
something along the way Java (maven) packages do, e.g. you'd do just
%file -f filelist and that was it. This would be one huge step forward
to remove the need of any upgrade tool.
Vít
More information about the ruby-sig
mailing list