The site behind It is the default web interface to download openSUSE distribution and to search for OBS packages.Packages at
Ruby HTML CSS JavaScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
app Switch logo automatically if we are in testing May 24, 2018
bin update rails files Oct 20, 2017
config Add timezone to release information May 24, 2018
doc start a readme for i18n Feb 11, 2010
lib Solve Layout/SpaceBeforeBlockBraces May 20, 2018
locale Translated using Weblate (Portuguese (Brazil)) May 25, 2018
public Remove app lists on explore page. Improve carousel look. May 7, 2018
script Move the downloads calculation from delayed_job to a rake task May 9, 2014
test Merge branch 'master' into timezone May 24, 2018
.editorconfig editorconfig Apr 30, 2018
.gitignore Add vendor to .gitignore Feb 2, 2018
.gitmodules Change git submodules url Jul 25, 2017
.rubocop.yml Disable rubocop Metrics/BlockLength locally May 9, 2018
.rubocop_todo.yml Solve Layout/SpaceBeforeBlockBraces May 20, 2018
.travis.yml travis: add test:system, as it is not included by default May 9, 2018 Contributing guide: Require screenshots for visual changes Feb 22, 2018
Capfile Small bump to next rubocop that works Feb 2, 2018
Dockerfile Get some Vagrant/Docker dev environment going Feb 24, 2017
Gemfile Add search result integration tests May 9, 2018
Gemfile.lock Add search result integration tests May 9, 2018
README.i18n Wrong url in README.i18n Jul 28, 2016 Implement release information as configuration May 18, 2018
Rakefile Small bump to next rubocop that works Feb 2, 2018
TODO improve display of subpackages in search result list Apr 20, 2012
Vagrantfile Small bump to next rubocop that works Feb 2, 2018 Enable Style/ExtraSpacing Rubocop cop Jun 8, 2017
manifest.yml manifest: increase disk quota Oct 20, 2017

Build Status

Ruby on Rails application powering

We hope you'll get involved! Read our Contributors' Guide for details.

Installing dependencies in a (open)SUSE system

We recommend the usage of Ruby 2.4 or higher for the development.

If you are an openSUSE Tumbleweed user, it comes with the latest Ruby releases as default so you can configure your environment doing:

zypper ref
zypper in ruby ruby-devel ruby2.5-rubygem-bundler nodejs gcc make libxml2-devel libxslt-devel

On openSUSE Leap 42.3 you will need to install the Ruby 2.4 environment doing:

zypper ref
zypper in ruby2.4 ruby2.4-devel ruby2.4-rubygem-bundler nodejs6 gcc make libxml2-devel libxslt-devel

You can find more information about Ruby development and packaging on openSUSE distributions here.

Running the application locally

Just for running it in development mode. If you are playing to deploy it in a server, please apply good Ruby on Rails practices (like generating your own keys for secrets.yml).

git clone
cd software-o-o
git submodule init
git submodule update

bundle package
bundle exec rails s

Enjoy your clone at

You can also run the unit tests locally using the command:

bundle exec rails test

and also the System Tests that will simulate user interaction using a headless browser:

bundle exec rails test:system

IMPORTANT: For the System Tests, the project is configured to use Firefox Headless Mode feature, available on:

  • Linux: Firefox 55 or higher;
  • Windows/Mac: Firefox 56 or higher.

See more here.

Running the application in production

The application will take the following environment variables:

  • SECRET_KEY_BASE: See Encrypted Session Storage in Rails documentation.
  • API_USERNAME and API_PASSWORD: Credentials to the Open Build Service API end-point
    • These can be replaced with OPENSUSE_COOKIE if you have admin access to the Open Build Service instance.

Puma will honor other variables too:

  • PORT


  • If SOFTWARE_O_O_RBTRACE is set, you can use rbtrace to debug the application.


memcache should be running. It seems to be hardcoded in environments/production.rb to localhost:11211. This probably needs to be fixed, as the dalli gem, automatically uses MEMCACHE_SERVERS env variable or as default.


If you plan to run the application on PaaS, make sure you set all the above variables correctly.

Official instance

The official instance is deployed using an rpm package. The rpm package bundles all the required gems.

There is a software_opensuse_org.service you can control via systemd.

The systemd service will read the variables described above from /etc/software_opensuse_org.conf in the form of an EnvironmentFile:


Development environment using Vagrant

There is also a Vagrant setup to create our development environment. All the tools needed for this are available for Linux, MacOS and Windows.

  1. Install Vagrant and docker. Both tools support Linux, MacOS and Windows.

  2. Clone this code repository:

    git clone --recurse-submodules
  3. Build your Vagrant box:

    vagrant up
  4. Attach to your new development box

    docker attach software_web
  5. Setup the database

    rake db:setup db:seed
  6. Start the app

    rails server
  7. Enjoy your clone at

If you exit the shell inside the vagrant box your development environment is stopped. Want to continue? Run vagrant up and docker attach software_web again. Happy hacking!

Configuring openSUSE releases

The file config/releases.yml is used by the /distributions end-point to render the right template (leap-$version).

The variables @testing_version, @stable_version and @legacy_version will be set accordingly. @version will be set to the right version of the page you are displaying.

- from: '2018-05-25 10:00:00'
  stable_version: '15'
  legacy_version: '42.3'
- from: '2018-01-31 00:00:00'
  stable_version: '42.3'
  testing_version: '15'
  testing_state: 'Beta'
  legacy_version: '42.2'
- from: '2017-07-26 00:00:00'
  stable_version: '42.3'
  legacy_version: '42.2'
- from: '2017-07-08 00:00:00'
  stable_version: '42.2'
  testing_version: '42.3'
  testing_state: 'RC'
  legacy_version: '42.1'
- from: '2016-11-16 00:00:00'
  stable_version: '42.2'
  legacy_version: '42.1'