-
Notifications
You must be signed in to change notification settings - Fork 505
Travis CI
The formatting is a work in progress as we move this from our internal wiki
Travis-CI is an OpenSource Continuous Integration platform. When it's hooked up, every time a pull request is submitted to the otwcode/otwarchive repository on GitHub, Travis-CI will grab a copy of the code changes, merge them into a master copy, and then run our test suite against that new copy of the code. It will run the tests again whenever a pull request is merged into master.
Results will be sent to the #otw-dev channel on freenode and the otw-coders-extra mailing list as detailed in the [How It Looks section](#How it looks). Additionally, project members with merge permissions will be able to see the build status near the merge button on each pull request.
You can also [set up Travis-CI to work with your copy of the otwarchive repo](#Travis-CI/GitHub Link Setup) so you can test your changes before submitting a pull request. It requires some setup, but it is well worth it -- Travis-CI runs our test suite much faster than most development environments.
Last updated 13 July 2016.
Should all else be lost, you can use these steps in order to set up a fresh copy of otwarchive so that it integrates itself with Travis-CI. Changes to pre-existing files have been marked in bold.
- Create the
.travis.yml
file in the root directory:
language: ruby
sudo: required
env:
- TEST_GROUP="./script/check_syntax"
- TEST_GROUP="rspec spec"
- TEST_GROUP="cucumber -f progress -r features features/admins"
- TEST_GROUP="cucumber -f progress -r features features/bookmarks"
- TEST_GROUP="cucumber -f progress -r features features/collections"
- TEST_GROUP="cucumber -f progress -r features features/comments_and_kudos"
- TEST_GROUP="cucumber -f progress -r features features/gift_exchanges"
- TEST_GROUP="cucumber -f progress -r features features/importing"
- TEST_GROUP="cucumber -f progress -r features features/other_a"
- TEST_GROUP="cucumber -f progress -r features features/other_b"
- TEST_GROUP="cucumber -f progress -r features features/prompt_memes_a"
- TEST_GROUP="cucumber -f progress -r features features/prompt_memes_b"
- TEST_GROUP="cucumber -f progress -r features features/prompt_memes_c"
- TEST_GROUP="cucumber -f progress -r features features/tags_and_wrangling"
- TEST_GROUP="cucumber -f progress -r features features/users"
- TEST_GROUP="cucumber -f progress -r features features/works"
rvm:
- "2.1.9"
services:
- elasticsearch
- redis-server
- memcached
script:
- rm -f structure.sql
- RAILS_ENV=test bundle exec rake db:create:all --trace
- RAILS_ENV=test bundle exec rake db:schema:load --trace
- RAILS_ENV=test bundle exec rake db:migrate --trace
- travis_retry bundle exec $TEST_GROUP
before_script:
- bash script/travis_configure.sh
- bash script/travis_elasticsearch_upgrade.sh
notifications:
email:
recipients:
- [email protected]
on_success: change
on_failure: always
irc:
channels:
- "irc.freenode.org#otw-dev"
on_success: change
on_failure: change
- Create the
/config/database.travis.yml
file:
test:
adapter: mysql2
database: otwarchive_test
username: root
encoding: utf8
- Create the
/config/redis.travis.example
file:
redis_resque:
test: localhost:6379
redis_kudos:
test: localhost:6379
redis_general:
test: localhost:6379
redis_rollout:
test: localhost:6379
- Edit
/config/initializers/gem-plugin_config/redis.rb
as follows:
require 'redis_test_setup' include RedisTestSetup if ENV['TRAVIS'] rails_root = ENV['TRAVIS_BUILD_DIR'] rails_env = 'test' else rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../../..' rails_env = ENV['RAILS_ENV'] || 'development' end unless ENV['TRAVIS'] if rails_env == "test" # https://gist.github.com/441072 start_redis!(rails_root, :cucumber) end end redis_config = YAML.load_file(rails_root + '/config/redis.yml') redis_host, redis_port = redis_config[rails_env].split(":") $redis = Redis.new(:host => redis_host, :port => redis_port)
- Edit
config/initializers/gem-plugin_config/resque.rb
as follows:
require 'resque' if ENV['TRAVIS'] rails_root = ENV['TRAVIS_BUILD_DIR'] rails_env = 'test' else rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../../..' rails_env = ENV['RAILS_ENV'] || 'development' end redis_config = YAML.load_file(rails_root + '/config/redis.yml') Resque.redis = redis_config[rails_env] # in-process performing of jobs (for testing) doesn't require a redis server Resque.inline = ENV['RAILS_ENV'] == "test" Resque.after_fork do Resque.redis.client.reconnect end
-
Log in to Travis-CI with GitHub
- In your browser, navigate to http://travis-ci.org
- Choose 'Sign in with GitHub' in the top right-hand corner of your screen
- If you're not signed in to GitHub, you'll need to enter your GitHub credentials
-
Get a list of your repositories
- Hover over your name in the upper right corner of the page and select 'Accounts', or go straight to your Travis-CI profile
- Choose 'Sync account' to grab a list of your repositories.
-
Turn on and set up Travis-CI for your otwarchive repository
- Use the switch next to YOUR_GITHUB_USERNAME/otwarchive to turn on Travis-CI
- Select the name of your repository to go to its page on GitHub, e.g. https://github.com/YOUR_GITHUB_USERNAME/otwarchive
- Go to your repository's settings page by choosing the the 'Settings' link/gear icon link or go directly to https://github.com/YOUR_GITHUB_USERNAME/otwarchive/settings on your repo's page
- Go to the 'Webhooks & services' section of your settings, i.e. https://github.com/YOUR_GITHUB_USERNAME/otwarchive/settings/hooks
- Find and click the 'Travis CI' hook. You should see that the settings have already been filled in for Travis.
- If for some reason the settings are not correct, enter your GitHub username in the 'User' section and the token from your Travis-CI profile in the 'Token' and choose 'Update service'
- At this point, you can now merge in the code changes from the Code Setup section above and Travis-CI will automatically see that you have merged something and look for your .travis.yml file. Once it finds it, your tests will run!
If you used the settings above, this is what should happen:
- When a coder submits a pull request, Travis-CI will automatically grab a copy of the changes and run our full test suite against it.
- No notifications will be sent out for pull request failures.
- When a pull request is merged into master, Travis-CI grabs a copy of the new master branch and runs it against our tests.
- If the build fails, an email will be sent to the otw-coders-extra mailing list saying that the new code does not pass testing.
- When a build passes without a state change (the build wasn't previously failing), no email will be generated.
- If the build goes from failing to passing, there will be an email.
- #otw-dev on freenode will be informed of every pass/fail merger of code.
If you have any questions regarding code development, please don't hesitate to send an email to [email protected] and we will try to get back to you as soon as possible!
- Home
- Set Up Instructions
- Docker (All platforms)
- Gitpod (Cloud-based development)
- Linux
- OS X
- Creating Development Data
- Writing and Tracking Code
- Automated Testing
- Architecture
-
Getting Started Guide
- Getting Set Up
- Your First Pull Request
- More About Git
- Jira