Highlights of the OBS frontend development - Sprint 29

Here are the results the OBS frontend team has achieved in the last two weeks (2017-12-11 to 2017-12-21).

Features

Allow users to show the full diff of large diffs

The user will see now a message if there are diffs, between versions of a file, which are truncated because they are very large. If this is the case, they have the option to load the full diff. That was done in the pull request PR#4262.

Cloud upload prototype

In the Open Build Service it is already possible to build appliances for Open Stack, Amazon Web Services or Microsoft Azure. Wouldn't it be awesome to upload your appliances to one of these cloud providers directly from OBS? We thought the same and started to research, meeting people and finally implemented a prototype in this sprint.

For now the prototype only covers Amazon EC2 as there was already some awesome toolbelt like ec2uploadimg existent which made it really easy to implement the prototype. To get things rolling, we met with the backend people and started to deploy yet another backend service which will handle the cloud upload jobs. In the OBS frontend we started to implement configuration and upload job pages. At the end of this sprint, the "only" missing part is the integration of the frontend and the backend part, both parts already work in isolation. If you want to get some impression, have a look at this PR.

Bug fixes

Group deletion results in error 500

When an admin deleted a group this was failing with a server error. The bug got fixed some weeks ago with PR 3901. But there was still some code to clean up, eg. we were still keeping the table entries around that stored the connection between users and groups after a group got deleted.

This has been cleaned this up now:-)

Attribute system regression

Additional to our planned work in this sprint, we also fixed a bug from the fast lane. As we organize our work in SCRUM, we plan our work at the beginning of a two week sprint. However, sometimes there are urgent issues which can not wait till the next sprint starts. We handle this issues on a "fast lane"

The mentioned bug made it impossible to set new attributes to a project or package. After some research, we found out that this bug was already present since a few years but nobody recognized it. The fix was basically only one line of code, however, finding the issue was a whole different story. Have a look at this PR if you want to know more.

Maintenance

Cleanup rubocop configuration and apply missing cops

Rubocop is a static code analyzer for ruby, based on a community Ruby style guide. We've been using rubocop for some years now. But we never took the effort to decide on and apply all of the existing cops.

Some weeks ago we agreed that it's time to do this. We started this sprint to go through all existing rubocops and apply them. In some cases there were some disagreements about which rule we want to pick. We created a list of these cops and are going to discuss them later on.

By now we applied 56 rubocop rules. There are 6 cops were we are not sure yet which rule want to use.

Move ProjectLogRotate to 1 event per job

This is part of our efforts to restructure the architecure of our event system. In this sprint we have changed how we create ProjectLogEntries. In OBS any project or package related event is causing the creation of a ProjectLogEntry. These entries are tracking activities that are passed to our rss feeds.

But before we could start this we had to refactor the event models. This was done in PR#4191.

Once this was done we did the actual change. With the changes made we don't rely any longer on the clock job, which was creating new ProjectLogEntries every 10 minutes. Instead we schedule this task right after the event got created.

For scheduling these jobs we now use delayed jobs, the database based asynchronous priority queue system. This means that, unless there is realy huge load on our servers, new ProjectLogEntries get created within seconds instead of being queued for up to 10 minutes.

Test suite migration

We continued migrating tests to Rspec and fixing flickering tests:

  • Improve testing of Authentication – Kerberos, PR#4211