Highlights of the OBS frontend development sprint - Sprint 25

Here are the results the OBS frontend team has achieved in the last three weeks (2017-09-19 to 2017-10-06).

Features

Kiwi Editor - Repository Type, support autocompletion for binary packages and more

We only allow apt-deb and rpm-md as repo_type because these repository types are the only ones allowed in the open build service context. When you will importing your kiwi file to the Kiwi Editor, this will replace any invalid repo_type value by rpm-md. Take a look into PR#3826.

We also made some changes in the view. Before, only a package group with a specific type and pattern type was shown. Now we show the first package group with type 'image'.

In the Kiwi Editor, we also implemented a new feature that autocompletes the name of the packages getting the information the repositories setup in the image. Take a look into PR#3884.

The Kiwi Editor documentation was updated with all the new features until now and how to use it. See the documentation.

RabbitMQ

It all started with Coolo requesting a predecessor for the previously used hermes. OBS was using Hermes to send out notifications. You might have read about it in our very first Sprint Report.

After hammering out all the details and requirements, we decided to use RabbitMQ, like Coolo initially suggested. RabbitMQ is an open source message broker, which is widely used to broadcast messages between independent server applications.

Before we started implementing this, we laid the ground by refactoring parts of the event models. This happened step by step in our previous sprints.

This Sprint we started to implement the RabbitMQ message bus and it turned out that adding this to OBS is straigth forward. Every event model now implements a 'message_bus_queue' which defines the queue names.

For example, every comment in a package get's send as 'opensuse.obs.package.comment'. While comments made in a requests can be identified as 'opensuse.obs.request.comment'.

If you have your own OBS instance and want to distinguish between events sent from build.opensuse.org and your own instance, you can configure prefix of the queue name in the options.yml. Setting the 'amqp_namespace' to 'my.obs_instance' would result in messages sent as 'my.obs_instance.package.comment' and 'my.obs_instance.request.comment'.

There are many other options you can configure. All this is documented in our admin guide.

Introduced bcrypt as password hash

We're now using bcrypt for hashing user passwords. Luckily, Ruby on Rails already comes with a has_secure_password function. This is great as it was possible to get rid of some legacy code. Furthermore, for security important functions it is always better to rely on the framework functionality instead of self implemented code. The challenge with this pull request was mostly to provide an upgrade path for passwords stored before this change was introduced. This happens now automatically when the user logs in again or changes their password.

Show request comments in superseded requests

This feature was requested by the openSUSE review team, thanks to Ludwig and Ismail. When using github, when creating a pull request and updating the pull request, you usually force push in the original PR. The reviewer has still the possibility to see outdated comments (comments on code which got overwritten for instance).

However, in OBS it is not possible to change a request after it got created. It is necessary to create a new request and supersede the old one. With this workflow, as reviewer it was necessary to go back to the old request, look at which changes where requested and then going back to the new request to review again. To improve this workflow a little bit we now show also the comments of the superseded request in the new request. Supersed request comment

Bugfixes

Fix deletion of groups

Deleting groups via the API was resulting in an error, as reported in Issue#3393. This happened, because Rails only removed the Group instance, but not the associated GroupUser. This then caused an ActiveRecord::NotNullViolation exception. This is now fixed. Thanks Ichiquitto for report this bug.

Preserve form data in Kiwi editor

We fixed a little bug in the Kiwi Editor, now we preserve the data in the form when something unexpected happens. This was because we redirecting instead of rendering the view, but after fixing it we found another bug. This time was because we were filtering the package groups, so when something was wrong we rendered the form but with the old packages. See how it was solved in the PR's #3888 and #3953

Releases

We released a new update for OBS 2.8. This version (2.8.4) fixes a bug in the LDAP support we released with 2.8.3. Checkout the release notes for more information.

Conferences

Beside working on several feature requests and bug fixes, the OBS team also attended two conferences this sprint. Adrian, Michael and Christian attended SUSEcon in Prague while Ana, Eduardo and David attended EuRuKo2017 in Budapest.

SUSEcon

The annual SUSEcon takes place every year in fall at different locations in Europe and North America. This year it took place in the capitol of Czech, Prague. Beside presenting a talk, Michael and Adrian also organized a container building workshop.

However, the main focus for us was to run the Build Solutions booth in the developer lounge. In this video, Hannes Kühnemund interviews several people including our product manager Adrian in the developer lounge.

One of the highlights was the last keynote, the famous 'Demopalooza', where they even showed a cover version of 'Killing in the name of' starring OBS.

EuRuKo2017

EuRuKo is a Ruby conference that takes place once a year in a European city. This year the EuRuKo Conference was in Budapest, Hungary, and it was the most crowed of all the EuRuKo Conferences, with 690 attendees. As most of you may know, a big part of OBS is written in Ruby, so the team travelled there to hear new things about Ruby and meet people with the same interests.

All the talks were great, we specially recommend you to watch the Yukihiro Matsumoto and Charles Nutter keynotes and Ruby 4.0: To Infinity and Beyond talk by Bozhidar Batsov. All of them were technical talks about Ruby and we found them really interesting.

However, not all of the talks where that technical, but we also enjoyed them. For example, we had a lot of fun with Sebastian Sogamoso post-morten: The overnight failure. The videos are not yet available, but you will be able to watch them soon!

But the OBS team did not only travel there to listen, there was also a lightning talk hold by Ana where she spoke about Property tests, which are being used in OBS to make our test suite unbreakable!

Next year EuRuKo will take place in Viena. We hope that the OBS team can also be there and really encourage everybody interested in Ruby to also attend!

Test suite migration

We continued migrating tests to Rspec and fixing flickering tests:

  • Write rspec tests for app/mixins/webui/load_buildresults.rb, PR#3914
  • Write rspec tests for app/mixins/statistics_calculations.rb, PR#3913
  • Write test for app/controllers/webui/project_controller.rb#save_meta, PR#3933
  • Write rspec for app/mixins/parse_package_diff.rb, PR#3942
  • Write rspec for app/models/backend_info.rb, PR#3876