Skip to content

Commit

Permalink
Updated travis build scripts (from rspec-dev)
Browse files Browse the repository at this point in the history
  • Loading branch information
myronmarston committed Jan 25, 2014
1 parent 8373eb8 commit 8d365c4
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 50 deletions.
18 changes: 8 additions & 10 deletions .travis.yml
@@ -1,25 +1,23 @@
before_install: # This file was generated on 2014-01-25T09:32:04-08:00 from the rspec-dev repo.
- gem update bundler # DO NOT modify it by hand as your changes will get lost the next time it is generated.
- bundle --version
- gem update --system 2.1.11 before_install: "script/clone_all_rspec_repos"
- gem --version bundler_args: "--binstubs --standalone --without documentation --path ../bundle"
bundler_args: "--standalone --binstubs --without documentation" script: "script/run_build"
script: "script/test_all"
rvm: rvm:
- 1.8.7 - 1.8.7
- 1.9.2 - 1.9.2
- 1.9.3 - 1.9.3
- 2.0.0 - 2.0.0
- 2.1.0 - 2.1.0
- ruby-head
- ree
- jruby-18mode - jruby-18mode
- jruby-19mode - jruby-19mode
- jruby-head - jruby-head
- rbx - rbx
- ree
- ruby-head
matrix: matrix:
allow_failures: allow_failures:
- rvm: jruby-head - rvm: jruby-head
- rvm: ruby-head - rvm: ruby-head
fast_finish: true fast_finish: true

1 change: 1 addition & 0 deletions maintenance-branch
@@ -0,0 +1 @@
master
20 changes: 20 additions & 0 deletions script/clone_all_rspec_repos
@@ -0,0 +1,20 @@
#!/bin/bash
# This file was generated on 2014-01-25T09:32:04-08:00 from the rspec-dev repo.
# DO NOT modify it by hand as your changes will get lost the next time it is generated.

set -e -x
source script/functions.sh

if is_mri; then
pushd ..

clone_repo "rspec"
clone_repo "rspec-core"
clone_repo "rspec-expectations"
clone_repo "rspec-mocks"
clone_repo "rspec-support"

popd
else
echo "Not cloning all repos since we are not on MRI and they are only needed for the MRI build"
fi
114 changes: 114 additions & 0 deletions script/functions.sh
@@ -0,0 +1,114 @@
# This file was generated on 2014-01-25T09:32:04-08:00 from the rspec-dev repo.
# DO NOT modify it by hand as your changes will get lost the next time it is generated.

# idea taken from: http://blog.headius.com/2010/03/jruby-startup-time-tips.html
export JRUBY_OPTS='-X-C' # disable JIT since these processes are so short lived
SPECS_HAVE_RUN_FILE=specs.out
MAINTENANCE_BRANCH=`cat maintenance-branch`
BUNDLE_INSTALL_FLAGS=`cat .travis.yml | grep bundler_args | tr -d '"' | grep -o " .*"`

# Taken from:
# https://github.com/travis-ci/travis-build/blob/e9314616e182a23e6a280199cd9070bfc7cae548/lib/travis/build/script/templates/header.sh#L34-L53
travis_retry() {
local result=0
local count=1
while [ $count -le 3 ]; do
[ $result -ne 0 ] && {
echo -e "\n\033[33;1mThe command \"$@\" failed. Retrying, $count of 3.\033[0m\n" >&2
}
"$@"
result=$?
[ $result -eq 0 ] && break
count=$(($count + 1))
sleep 1
done

[ $count -eq 3 ] && {
echo "\n\033[33;1mThe command \"$@\" failed 3 times.\033[0m\n" >&2
}

return $result
}

function is_mri {
if ruby -e "exit(!defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby')"; then
# RUBY_ENGINE only returns 'ruby' on MRI.
# MRI 1.8.7 lacks the constant but all other rubies have it (including JRuby in 1.8 mode)
return 0
else
return 1
fi;
}

function is_mri_192 {
if is_mri; then
if ruby -e "exit(RUBY_VERSION == '1.9.2')"; then
return 0
else
return 1
fi
else
return 1
fi
}

function clone_repo {
if [ ! -d $1 ]; then # don't clone if the dir is already there
travis_retry git clone git://github.com/rspec/$1 --depth 1 --branch $MAINTENANCE_BRANCH
fi;
}

function run_specs_and_record_done {
local rspec_bin=bin/rspec

# rspec-core needs to run with a special script that loads simplecov first,
# so that it can instrument rspec-core's code before rspec-core has been loaded.
if [ -f script/rspec_with_simplecov ]; then
rspec_bin=script/rspec_with_simplecov
fi;

$rspec_bin spec --backtrace --format progress --profile --format progress --out $SPECS_HAVE_RUN_FILE
}

function run_cukes {
if [ -d features ]; then
# force jRuby to use client mode JVM or a compilation mode thats as close as possible,
# idea taken from https://github.com/jruby/jruby/wiki/Improving-startup-time
#
# Note that we delay setting this until we run the cukes because we've seen
# spec failures in our spec suite due to problems with this mode.
export JAVA_OPTS='-client -XX:+TieredCompilation -XX:TieredStopAtLevel=1'

if is_mri_192; then
# For some reason we get SystemStackError on 1.9.2 when using
# the bin/cucumber approach below. That approach is faster
# (as it avoids the bundler tax), so we use it on rubies where we can.
bundle exec cucumber --strict
else
# Prepare RUBYOPT for scenarios that are shelling out to ruby,
# and PATH for those that are using `rspec` or `rake`.
RUBYOPT="-I${PWD}/../bundle -rbundler/setup" \
PATH="${PWD}/bin:$PATH" \
bin/cucumber --strict
fi
fi
}

function run_specs_one_by_one {
for file in `find spec -iname '*_spec.rb'`; do
bin/rspec $file -b --format progress
done
}

function run_spec_suite_for {
if [ ! -f ../$1/$SPECS_HAVE_RUN_FILE ]; then # don't rerun specs that have already run
pushd ../$1
echo
echo "Running specs for $1"
echo
unset BUNDLE_GEMFILE
travis_retry bundle install $BUNDLE_INSTALL_FLAGS
run_specs_and_record_done
popd
fi;
}
19 changes: 19 additions & 0 deletions script/run_build
@@ -0,0 +1,19 @@
#!/bin/bash
# This file was generated on 2014-01-25T09:32:04-08:00 from the rspec-dev repo.
# DO NOT modify it by hand as your changes will get lost the next time it is generated.

set -e -x
source script/functions.sh

run_specs_and_record_done
run_cukes

if is_mri; then
run_specs_one_by_one
run_spec_suite_for "rspec-core"
run_spec_suite_for "rspec-expectations"
run_spec_suite_for "rspec-mocks"
run_spec_suite_for "rspec-support"
else
echo "Skipping the rest of the build on non-MRI rubies"
fi
40 changes: 0 additions & 40 deletions script/test_all

This file was deleted.

0 comments on commit 8d365c4

Please sign in to comment.