Thank you for your interest in contributing to the Cloud Stove. Please note that the project adheres to the Contributor Covenant code of conduct. By participating in this project you are expected to uphold its terms.
Currently, the Cloud Stove is split across two repositories: the backend Rails app, and the frontend AngularJS application. This guide focuses on the backend Rails app.
-
Clone the Cloud Stove repository
git clone [email protected]:sealuzh/cloud-stove.git cd cloud-stove
-
Install an appropriate Ruby version (the currently required version is specified in .ruby-version). Install Ruby using rbenv or RVM.
- If you're using rbenv, run
rbenv install $(cat .ruby-version)
. - For RVM, run
rvm install $(cat .ruby-version)
.
- If you're using rbenv, run
-
Install
phantomjs
for headless UI tests (integration tests fail without phantomjs): http://phantomjs.org/download.htmlmacOS:
brew install phantomjs
Linux:
export PHANTOMJS_FILE=phantomjs-2.1.1-linux-x86_64 export PHANTOMJS_URL=https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOMJS_FILE.tar.bz2 export PHANTOMJS_DIR=/usr/local/share curl -sSL $PHANTOMJS_URL | tar -xj -C $PHANTOMJS_DIR ln -s $PHANTOMJS_DIR/$PHANTOMJS_FILE/bin/phantomjs /usr/local/bin/phantomjs
-
Set up dependencies and database for the Rails app:
bin/setup
-
Install the or-tools MiniZinc distribution. There are pre-packaged binaries for macOS, Linux, and Windows (64 bit):
macOS:
curl -sSL https://github.com/inz/minizinc-dist/releases/download/minizinc-2.0.13_or-tools-v2016-06/minizinc-2.0.13_or-tools-v2016-06-darwin-vendor.tar.gz | tar xz -
Linux:
curl -sSL https://github.com/inz/minizinc-dist/releases/download/minizinc-2.0.13_or-tools-v2016-06/minizinc-2.0.13_or-tools-v2016-06-linux64-vendor.tar.gz | tar -xz
Windows (64 bit only):
curl -sSL https://github.com/inz/minizinc-dist/releases/download/minizinc-2.0.13_or-tools-v2016-06/minizinc-2.0.13_or-tools-v2016-06-win64-vendor.tar.gz | tar xz -
Add
vendor/minizinc/bin
to yourPATH
:export PATH=$PWD/vendor/minizinc/bin:$PATH
-
Start the Rails server and job worker
# Start the app server rails s -p 5000 # In another terminal, start the worker job rake jobs:work # Alternatively, you can launch both simultaneously using foreman gem install foreman foreman start
-
You should now be able to access the backend at http://localhost:5000
-
To set up the front check out the front end contribution guide
-
Build the image
docker build -t cloud-stove .
-
Start the container
docker run -p 3000:3000 cloud-stove
-
Login with an interactive shell
docker run --rm -it cloud-stove /bin/bash
-
Fork the project
-
Pick a story from the backlog in the List of issues and assign it to yourself.
-
Create a topic branch for your changes.
git checkout -b <feature/my-awesome-feature>
Namespaces:
feature/*
,fix/*
,hotfix/*
,support/*
-
Make your change. Add tests for your change. Make the tests pass:
bundle exec rake test
-
If tests fail with
sh: minizinc: command not found
make sure that your or-tools MiniZinc installation is in yourPATH
. If yourPATH
is set correctly and you still get the error, make sure thatspring
starts with the correctPATH
:bin/spring stop PATH=vendor/minizinc/bin/:$PATH bundle exec rake test
This should set the correct environment for the newly started
spring
process. -
If tests fail with
Cannot access include directory .../share/minizinc/or-tools/
, make sure that the first MiniZinc binary in thePATH
points to the or-tools distribution and not to any other MiniZinc implementation. -
The wiki has further troubleshooting tips.
-
-
Make sure that your code always has good test coverage.
-
Push your topic branch and submit a pull request. To keep our project history clean, always rebase your changes onto master.
You should also periodically push your topic branches during development. That way, there will always be a reasonably current backup of your work in the upstream repository, and the whole team can get a feel on what others are working on.
Heroku ignores Gemfiles that are created on Windows. This might lead to unpredictable build failures. So far, we only committed Gemfile.lock
changes on non-Windows machines. Refer to Heroku Dev Center for other options how to mitigate this problem.
-
Continuous test execution and live reload:
bundle exec guard
- Automatically runs affected tests on file edit. Type
all
to manually run all tests. - Automatically reloads a page on asset modification via the following browser plugin: http://livereload.com/extensions/
- Automatically runs affected tests on file edit. Type
-
Lint factories
rake factory_girl:lint
-
Test Wercker CI build locally
wercker build
- Requires wercker CLI: http://wercker.com/cli/
- Use
--attach-on-error
to debug failing builds - Use
--docker-local
to use locally cached containers
- Controller tests using
ActionController::TestCase
automatically create the@user
and set the authentication headers for each request - Integration tests can use the
sign_in(user)
helper method
-
Access response as parsed JSON (e.g.,
json_response['num_simultaneous_users']
)json_response
-
Login a certain user:
sign_in(user)
-
Save a snapshot of the page during an integration test:
show_page
This will even sideload assets if a Rails server is running.
-
Reload the current page:
reload_page(page)