diff --git a/chef-test-kitchen-enterprise.gemspec b/chef-test-kitchen-enterprise.gemspec index f7e4f0c53..d79c134a8 100644 --- a/chef-test-kitchen-enterprise.gemspec +++ b/chef-test-kitchen-enterprise.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |gem| gem.add_dependency "net-scp", ">= 1.1", "< 5.0" # pinning until we can confirm 4+ works gem.add_dependency "net-ssh", ">= 2.9", "< 8.0" # pinning until we can confirm 8+ works gem.add_dependency "net-ssh-gateway", ">= 1.2", "< 3.0" # pinning until we can confirm 3+ works - gem.add_dependency "thor", ">= 0.19", "< 2.0" + gem.add_dependency "thor", ">= 0.19", "< 1.3.0" gem.add_dependency "winrm", "~> 2.0" gem.add_dependency "winrm-elevated", "~> 1.0" gem.add_dependency "winrm-fs", "~> 1.1" diff --git a/habitat/plan.sh b/habitat/plan.sh index 17b1e50ca..6288b3a3c 100644 --- a/habitat/plan.sh +++ b/habitat/plan.sh @@ -11,6 +11,7 @@ pkg_bin_dirs=( ) pkg_build_deps=( core/make + core/bash core/gcc ) pkg_deps=( @@ -21,102 +22,61 @@ pkg_deps=( pkg_svc_user=root pkg_version() { - cat "${SRC_PATH}/VERSION" + cat "$SRC_PATH/VERSION" } do_before() { - do_default_before update_pkg_version - # We must wait until we update the pkg_version to use the pkg_version - pkg_filename="${pkg_name}-${pkg_version}.tar.gz" } -do_download() { - build_line "Locally creating archive of latest repository commit at ${HAB_CACHE_SRC_PATH}/${pkg_filename}" - git config --global --add safe.directory /src - # source is in this repo, so we're going to create an archive from the - # appropriate path within the repo and place the generated tarball in the - # location expected by do_unpack - ( cd "${SRC_PATH}" || exit_with "unable to enter hab-src directory" 1 - git archive --prefix="${pkg_name}-${pkg_version}/" --output="${HAB_CACHE_SRC_PATH}/${pkg_filename}" HEAD - ) -} - -do_verify() { - build_line "Skipping checksum verification on the archive we just created." - return 0 -} - -do_setup_environment() { - push_runtime_env GEM_PATH "${pkg_prefix}/vendor" - - set_runtime_env APPBUNDLER_ALLOW_RVM "true" # prevent appbundler from clearing out the carefully constructed runtime GEM_PATH - set_runtime_env LANG "en_US.UTF-8" - set_runtime_env LC_CTYPE "en_US.UTF-8" -} - -do_prepare() { - export GEM_HOME="${pkg_prefix}/vendor" - export CPPFLAGS="${CPPFLAGS} ${CFLAGS}" - - ( cd "$CACHE_PATH" - bundle config --local jobs "$(nproc)" - bundle config --local without server docgen maintenance pry travis integration ci - bundle config --local shebang "$(pkg_path_for "$_chef_client_ruby")/bin/ruby" - bundle config --local retry 5 - bundle config --local silence_root_warning 1 - ) - - build_line "Setting link for /usr/bin/env to 'coreutils'" - if [ ! -f /usr/bin/env ]; then - ln -s "$(pkg_interpreter_for core/coreutils bin/env)" /usr/bin/env - fi +do_unpack() { + mkdir -pv "$HAB_CACHE_SRC_PATH/$pkg_dirname" + cp -RT "$PLAN_CONTEXT"/.. "$HAB_CACHE_SRC_PATH/$pkg_dirname/" } do_build() { - ( cd "$CACHE_PATH" || exit_with "unable to enter hab-cache directory" 1 - build_line "Installing gem dependencies ..." - bundle install --jobs=3 --retry=3 - build_line "Installing gems from git repos properly ..." - ruby ./post-bundle-install.rb - build_line "Installing this project's gems ..." - bundle exec rake install:local - gem install chef-utils chef-config appbundler aruba - ) + echo $(pkg_path_for $_chef_client_ruby) + export GEM_HOME="$pkg_prefix/vendor/gems" + + build_line "Setting GEM_PATH=$GEM_HOME" + export GEM_PATH="$GEM_HOME" + bundle config --local without integration deploy maintenance + bundle config --local jobs 4 + bundle config --local retry 5 + bundle config --local silence_root_warning 1 + bundle install + ruby ./post-bundle-install.rb + gem build chef-test-kitchen-enterprise.gemspec } do_install() { - ( cd "$pkg_prefix" || exit_with "unable to enter pkg prefix directory" 1 - export BUNDLE_GEMFILE="${CACHE_PATH}/Gemfile" - build_line "** fixing binstub shebangs" - fix_interpreter "${pkg_prefix}/vendor/bin/*" "$_chef_client_ruby" bin/ruby - export BUNDLE_GEMFILE="${CACHE_PATH}/Gemfile" - for gem in chef-test-kitchen-enterprise; do - build_line "** generating binstubs for $gem with precise version pins" - appbundler $CACHE_PATH $pkg_prefix/bin $gem - done - ) + export GEM_HOME="$pkg_prefix/vendor/gems" + + build_line "Setting GEM_PATH=$GEM_HOME" + export GEM_PATH="$GEM_HOME" + gem install chef-test-kitchen-enterprise-*.gem --no-document + wrap_ruby_bin + set_runtime_env "GEM_PATH" "${pkg_prefix}/vendor/gems" } -do_after() { - build_line "Trimming the fat ..." +wrap_ruby_bin() { + local bin="$pkg_prefix/bin/kitchen" + local real_bin="$GEM_HOME/gems/chef-test-kitchen-enterprise-${pkg_version}/bin/kitchen" + build_line "Adding wrapper $bin to $real_bin" + cat < "$bin" +#!$(pkg_path_for core/bash)/bin/bash +set -e - # We don't need the cache of downloaded .gem files ... - rm -r "$pkg_prefix/vendor/cache" +# Set binary path that allows chef-test-kitchen-enterprise to use non-Hab pkg binaries +export PATH="/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:\$PATH" - # We don't need the gem docs. - rm -r "$pkg_prefix/vendor/doc" - # We don't need to ship the test suites for every gem dependency, - # only Chef's for package verification. - find "$pkg_prefix/vendor/gems" -name spec -type d | grep -v "chef-${pkg_version}" \ - | while read spec_dir; do rm -r "$spec_dir"; done -} +# Set Ruby paths defined from 'do_setup_environment()' + export GEM_HOME="$pkg_prefix/vendor/gems" -do_end() { - if [ "$(readlink /usr/bin/env)" = "$(pkg_interpreter_for core/coreutils bin/env)" ]; then - build_line "Removing the symlink we created for '/usr/bin/env'" - rm /usr/bin/env - fi + export GEM_PATH="$GEM_HOME" +exec $(pkg_path_for $_chef_client_ruby)/bin/ruby $real_bin \$@ +EOF + chmod -v 755 "$bin" } do_strip() {