diff options
author | John Keiser <john@johnkeiser.com> | 2016-04-12 16:04:27 -0700 |
---|---|---|
committer | John Keiser <john@johnkeiser.com> | 2016-04-18 14:21:02 -0700 |
commit | bbc1d6ebccbd7f22fea72a9c2b76ef19f3b5beb3 (patch) | |
tree | 97bd064d63268eb7ff39e1b4416abdff42ad0f34 /tasks/bin/run_external_test | |
parent | 612932e984e4a210891e5d2d00d25723afd6b6a4 (diff) | |
download | chef-bbc1d6ebccbd7f22fea72a9c2b76ef19f3b5beb3.tar.gz |
Simplify external tests and make them work with Gemfile.lock
Diffstat (limited to 'tasks/bin/run_external_test')
-rwxr-xr-x | tasks/bin/run_external_test | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tasks/bin/run_external_test b/tasks/bin/run_external_test new file mode 100755 index 0000000000..f1cefb9138 --- /dev/null +++ b/tasks/bin/run_external_test @@ -0,0 +1,54 @@ +#!/bin/bash + +# Fail fast (e) and echo commands (vx) +set -evx + +# Arguments +TEST_GEM=$1 +shift + +PROJECT_ROOT=$(pwd) +PROJECT_BUNDLE_PATH=${BUNDLE_PATH:-$(grep BUNDLE_PATH: $PROJECT_ROOT/.bundle/config | cut -d' ' -f2-)} +if [ -n "$PROJECT_BUNDLE_PATH" ]; then + PROJECT_BUNDLE_PATH=$PROJECT_ROOT/$PROJECT_BUNDLE_PATH +fi + +TEST_GEM_ROOT=$(bundle show $TEST_GEM) + +# Make a copy of the original Gemfile and stitch in our Gemfile.lock +TEST_GEMFILE=$TEST_GEM_ROOT/Gemfile +MODIFIED_TEST_GEMFILE=$TEST_GEMFILE.externaltest +cat <<EOM > $MODIFIED_TEST_GEMFILE +require_relative "$PROJECT_ROOT/tasks/gemfile_util" +GemfileUtil.include_locked_gemfile(self, "$PROJECT_ROOT/Gemfile", groups: [:default], gems: ["$TEST_GEM"] + "$TEST_WITH_GEMS".split(/\s+/)) +$TEST_GEM_OVERRIDES +EOM +cat $TEST_GEMFILE >> $MODIFIED_TEST_GEMFILE +if [ -f $TEST_GEMFILE.lock ]; then + cp $TEST_GEMFILE.lock $MODIFIED_TEST_GEMFILE.lock +elif [ -f $MODIFIED_TEST_GEMFILE.lock ]; then + rm -f $MODIFIED_TEST_GEMFILE.lock +fi + +# Run the bundle install +cd $TEST_GEM_ROOT +export BUNDLE_GEMFILE=$MODIFIED_TEST_GEMFILE +# Don't read from the project .bundle/config, just our env vars +export BUNDLE_IGNORE_CONFIG=true +# Use the top level bundle cache so we don't have to reinstall their packages +if [ -n "$PROJECT_BUNDLE_PATH" ]; then + export BUNDLE_PATH=$PROJECT_BUNDLE_PATH + export BUNDLE_DISABLE_SHARED_GEMS=1 + export BUNDLE_NO_PRUNE=true +fi +export BUNDLE_FROZEN= +bundle install +export BUNDLE_FROZEN=true + +bundle config + +# Iterate through the remaining arguments as commands +while test ${#} -gt 0; do + bundle exec $1 + shift +done |