summaryrefslogtreecommitdiff
path: root/tasks/bin/run_external_test
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/bin/run_external_test')
-rwxr-xr-xtasks/bin/run_external_test62
1 files changed, 20 insertions, 42 deletions
diff --git a/tasks/bin/run_external_test b/tasks/bin/run_external_test
index 74f76d3229..1925c3e125 100755
--- a/tasks/bin/run_external_test
+++ b/tasks/bin/run_external_test
@@ -1,47 +1,25 @@
-#!/bin/bash
+#!/usr/bin/env ruby
-# Fail fast (e) and echo commands (vx)
-set -evx
+$:.unshift(File.expand_path("../../lib", File.dirname(__FILE__)))
-# Arguments
-TEST_GEM=$1
-shift
+require "tmpdir"
+require "bundler"
+require "chef/mixin/shell_out"
-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
+include Chef::Mixin::ShellOut
-TEST_GEM_ROOT=$(bundle show $TEST_GEM)
+github_repo = ARGV.shift
+git_thing = ARGV.shift
-# 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", 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
-fi
-export BUNDLE_FROZEN=
-bundle install
-export BUNDLE_FROZEN=true
-
-bundle config
-bundle exec $@
+Dir.mktmpdir("chef-external-test") do |dir|
+ git_url = "https://github.com/#{github_repo}"
+ Dir.rmdir dir
+ shell_out!("git clone #{git_url} #{dir}", live_stream: STDOUT)
+ Dir.chdir(dir) do
+ shell_out!("git checkout #{git_thing}", live_stream: STDOUT)
+ Bundler.with_clean_env do
+ shell_out!("bundle install", live_stream: STDOUT)
+ shell_out!("bundle exec #{ARGV.join(" ")}", live_stream: STDOUT)
+ end
+ end
+end