diff options
author | Lamont Granquist <lamont@opscode.com> | 2021-03-23 00:57:36 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-23 00:57:36 -0700 |
commit | 33bd8ff233527e2f57c3d5faa78965e71bb43061 (patch) | |
tree | beef795785a0d697a1047af592cece1b15059ec4 | |
parent | a936b0af98ed729fbefc131a55c7ac0bd864bc49 (diff) | |
parent | 0b447964d67764aef8ef737a142c213e171a5eca (diff) | |
download | chef-33bd8ff233527e2f57c3d5faa78965e71bb43061.tar.gz |
Merge pull request #11211 from chef/lcg/backport-post-bundle-install2
-rw-r--r-- | Gemfile.lock | 104 | ||||
-rw-r--r-- | habitat/plan.sh | 8 | ||||
-rw-r--r-- | kitchen-tests/Gemfile | 10 | ||||
-rw-r--r-- | kitchen-tests/cookbooks/end_to_end/attributes/default.rb | 7 | ||||
-rw-r--r-- | kitchen-tests/cookbooks/end_to_end/recipes/default.rb | 9 | ||||
-rw-r--r-- | kitchen-tests/data_bags/users/adam.json | 2 | ||||
-rw-r--r-- | kitchen-tests/kitchen.yml | 11 | ||||
-rw-r--r-- | omnibus/Gemfile.lock | 54 | ||||
-rw-r--r-- | post-bundle-install.rb | 29 | ||||
-rw-r--r-- | spec/unit/knife/supermarket_share_spec.rb | 6 | ||||
-rwxr-xr-x | tasks/bin/run_external_test | 2 |
11 files changed, 142 insertions, 100 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index 9dec156e3b..261ae8e2a0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,7 +126,7 @@ GEM appbundler (0.13.2) mixlib-cli (>= 1.4, < 3.0) mixlib-shellout (>= 2.0, < 4.0) - ast (2.4.1) + ast (2.4.2) bcrypt_pbkdf (1.1.0) bcrypt_pbkdf (1.1.0-x64-mingw32) bcrypt_pbkdf (1.1.0-x86-mingw32) @@ -134,10 +134,9 @@ GEM debug_inspector (>= 0.0.1) builder (3.2.4) byebug (11.1.3) - chef-telemetry (1.0.14) + chef-telemetry (1.0.29) chef-config concurrent-ruby (~> 1.0) - ffi-yajl (~> 2.2) chef-vault (4.1.0) chef-zero (14.0.17) ffi-yajl (~> 2.2) @@ -151,7 +150,7 @@ GEM chefstyle (1.2.1) rubocop (= 0.89.1) coderay (1.1.3) - concurrent-ruby (1.1.7) + concurrent-ruby (1.1.8) crack (0.4.5) rexml debug_inspector (1.0.0) @@ -159,14 +158,19 @@ GEM ed25519 (1.2.4) erubi (1.10.0) erubis (2.7.0) - faraday (1.0.1) + faraday (1.3.0) + faraday-net_http (~> 1.0) multipart-post (>= 1.2, < 3) - fauxhai-ng (8.3.1) + ruby2_keywords + faraday-net_http (1.0.1) + faraday_middleware (1.0.0) + faraday (~> 1.0) + fauxhai-ng (8.7.0) net-ssh - ffi (1.13.1) - ffi (1.13.1-x64-mingw32) - ffi (1.13.1-x86-mingw32) - ffi-libarchive (1.0.4) + ffi (1.15.0) + ffi (1.15.0-x64-mingw32) + ffi (1.15.0-x86-mingw32) + ffi-libarchive (1.0.17) ffi (~> 1.0) ffi-win32-extensions (1.0.4) ffi @@ -182,30 +186,31 @@ GEM highline (1.7.10) httpclient (2.8.3) iniparse (1.5.0) - inspec-core (4.24.8) + inspec-core (4.28.0) addressable (~> 2.4) chef-telemetry (~> 1.0) - faraday (>= 0.9.0, < 1.1) - hashie (~> 3.4) + faraday (>= 0.9.0, < 1.4) + faraday_middleware (~> 1.0) + hashie (>= 3.4, < 5.0) license-acceptance (>= 0.2.13, < 3.0) method_source (>= 0.8, < 2.0) mixlib-log (~> 3.0) multipart-post (~> 2.0) parallel (~> 1.9) - parslet (~> 1.5) + parslet (>= 1.5, < 2.0) pry (~> 0.13) - rspec (~> 3.9.0) + rspec (>= 3.9, < 3.11) rspec-its (~> 1.2) - rubyzip (~> 1.2, >= 1.2.2) + rubyzip (>= 1.2.2, < 3.0) semverse (~> 3.0) sslshake (~> 1.2) thor (>= 0.20, < 2.0) - tomlrb (~> 1.2.0) + tomlrb (>= 1.2, < 2.1) train-core (~> 3.0) tty-prompt (~> 0.17) tty-table (~> 0.10) - inspec-core-bin (4.24.8) - inspec-core (= 4.24.8) + inspec-core-bin (4.28.0) + inspec-core (= 4.28.0) ipaddress (0.8.3) iso8601 (0.13.0) json (2.5.1) @@ -220,11 +225,11 @@ GEM little-plugger (~> 1.1) multi_json (~> 1.14) method_source (1.0.0) - mixlib-archive (1.0.7) + mixlib-archive (1.1.7) mixlib-log - mixlib-archive (1.0.7-universal-mingw32) + mixlib-archive (1.1.7-universal-mingw32) mixlib-log - mixlib-authentication (3.0.7) + mixlib-authentication (3.0.10) mixlib-cli (2.1.8) mixlib-config (3.0.9) tomlrb @@ -274,24 +279,24 @@ GEM rainbow (3.0.0) rake (12.3.3) rb-readline (0.5.5) - regexp_parser (2.0.3) + regexp_parser (2.1.1) rexml (3.2.4) - rspec (3.9.0) - rspec-core (~> 3.9.0) - rspec-expectations (~> 3.9.0) - rspec-mocks (~> 3.9.0) - rspec-core (3.9.3) - rspec-support (~> 3.9.3) - rspec-expectations (3.9.4) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) + rspec-support (~> 3.10.0) rspec-its (1.3.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.9.1) + rspec-mocks (3.10.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-support (3.9.4) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) rspec_junit_formatter (0.2.3) builder (< 4) rspec-core (>= 2, < 4, != 2.12.0) @@ -309,30 +314,31 @@ GEM ruby-prof (1.2.0) ruby-progressbar (1.11.0) ruby-shadow (2.5.0) - rubyntlm (0.6.2) - rubyzip (1.3.0) + ruby2_keywords (0.0.4) + rubyntlm (0.6.3) + rubyzip (2.3.0) semverse (3.0.0) slop (3.6.0) sslshake (1.3.1) - strings (0.2.0) + strings (0.2.1) strings-ansi (~> 0.2) - unicode-display_width (~> 1.5) + unicode-display_width (>= 1.5, < 3.0) unicode_utils (~> 1.4) strings-ansi (0.2.0) structured_warnings (0.4.0) syslog-logger (1.6.8) systemu (2.6.5) - thor (1.0.1) - tomlrb (1.2.9) - train-core (3.4.4) + thor (1.1.0) + tomlrb (1.3.0) + train-core (3.5.4) addressable (~> 2.5) ffi (!= 1.13.0) json (>= 1.8, < 3.0) mixlib-shellout (>= 2.0, < 4.0) net-scp (>= 1.2, < 4.0) net-ssh (>= 2.9, < 7.0) - train-winrm (0.2.11) - winrm (~> 2.0) + train-winrm (0.2.12) + winrm (>= 2.3.6, < 3.0) winrm-elevated (~> 1.2.2) winrm-fs (~> 1.0) tty-box (0.7.0) @@ -356,12 +362,12 @@ GEM unicode-display_width (1.7.0) unicode_utils (1.4.0) uuidtools (2.1.5) - webmock (3.11.0) + webmock (3.12.1) addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) win32-api (1.5.3-universal-mingw32) - win32-certstore (0.4.1) + win32-certstore (0.6.1) ffi mixlib-shellout win32-dir (0.5.1) @@ -384,7 +390,7 @@ GEM win32-taskscheduler (2.0.4) ffi structured_warnings - winrm (2.3.5) + winrm (2.3.6) builder (>= 2.1.2) erubi (~> 1.8) gssapi (~> 1.2) @@ -392,15 +398,15 @@ GEM httpclient (~> 2.2, >= 2.2.0.2) logging (>= 1.6.1, < 3.0) nori (~> 2.0) - rubyntlm (~> 0.6.0, >= 0.6.1) + rubyntlm (~> 0.6.0, >= 0.6.3) winrm-elevated (1.2.3) erubi (~> 1.8) winrm (~> 2.0) winrm-fs (~> 1.0) - winrm-fs (1.3.3) + winrm-fs (1.3.5) erubi (~> 1.8) logging (>= 1.6.1, < 3.0) - rubyzip (~> 1.1) + rubyzip (~> 2.0) winrm (~> 2.0) wisper (2.0.1) wmi-lite (1.0.5) diff --git a/habitat/plan.sh b/habitat/plan.sh index 2bc13785d8..1f7c4fb065 100644 --- a/habitat/plan.sh +++ b/habitat/plan.sh @@ -95,14 +95,10 @@ 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 - for gem in $GEM_HOME/bundler/gems/*; do - ( cd $gem - build_line "Installing gems from git repos properly ..." - rake install - ) - done ) } diff --git a/kitchen-tests/Gemfile b/kitchen-tests/Gemfile index 151af64fac..61bfe020b7 100644 --- a/kitchen-tests/Gemfile +++ b/kitchen-tests/Gemfile @@ -1,10 +1,10 @@ source "https://rubygems.org" gem "rake" # required to build some native extensions -gem "chef", path: ".." -gem "ohai", git: "https://github.com/chef/ohai.git", branch: "15-stable" # avoids failures when we bump chef major -gem "berkshelf", git: "https://github.com/berkshelf/berkshelf.git", branch: "master" +gem "chef", "~> 16.0" +gem "ohai", "~> 16.0" +gem "berkshelf" gem "kitchen-dokken", "~> 2.0" -gem "kitchen-inspec", git: "https://github.com/chef/kitchen-inspec.git", branch: "master" +gem "kitchen-inspec" gem "inspec" -gem "test-kitchen", git: "https://github.com/test-kitchen/test-kitchen.git", branch: "master" +gem "test-kitchen" diff --git a/kitchen-tests/cookbooks/end_to_end/attributes/default.rb b/kitchen-tests/cookbooks/end_to_end/attributes/default.rb index 332a3fe462..052d89a474 100644 --- a/kitchen-tests/cookbooks/end_to_end/attributes/default.rb +++ b/kitchen-tests/cookbooks/end_to_end/attributes/default.rb @@ -65,13 +65,6 @@ default["chef_client"]["config"]["verbose_logging"] = false default["chef_client"]["chef_license"] = "accept-no-persist" # -# resolver cookbook overrides -# - -default["resolver"]["nameservers"] = [ "8.8.8.8", "8.8.4.4" ] -default["resolver"]["search"] = "chef.io" - -# # nscd cookbook overrides # diff --git a/kitchen-tests/cookbooks/end_to_end/recipes/default.rb b/kitchen-tests/cookbooks/end_to_end/recipes/default.rb index c387c87e6b..b782f958cd 100644 --- a/kitchen-tests/cookbooks/end_to_end/recipes/default.rb +++ b/kitchen-tests/cookbooks/end_to_end/recipes/default.rb @@ -44,10 +44,17 @@ include_recipe "::packages" include_recipe "ntp" -include_recipe "resolver" +resolver_config "/etc/resolv.conf" do + nameservers [ "8.8.8.8", "8.8.4.4" ] + search [ "chef.io" ] +end + +users_from_databag = search("users", "*:*") users_manage "sysadmin" do + group_name "sysadmin" group_id 2300 + users users_from_databag action [:create] end diff --git a/kitchen-tests/data_bags/users/adam.json b/kitchen-tests/data_bags/users/adam.json index f96d7c213f..ecd4b73e74 100644 --- a/kitchen-tests/data_bags/users/adam.json +++ b/kitchen-tests/data_bags/users/adam.json @@ -5,5 +5,5 @@ "shell": "/bin/zsh", "groups": [ "sysadmin" ], "comment": "Adam Jacob", - "password": "*" + "password": "$6$QQk10qmDjMv.o$wHIjLH9JOxUmaJTsxYFttFhP1jZZtTk/ovhpasmQJS5mfimeFs8HMRWGWM8uBB5dhEmP6svqhRdJE5k1oWRPF1" } diff --git a/kitchen-tests/kitchen.yml b/kitchen-tests/kitchen.yml index 3ceb111f6a..fccf46bb22 100644 --- a/kitchen-tests/kitchen.yml +++ b/kitchen-tests/kitchen.yml @@ -22,8 +22,18 @@ lifecycle: - remote: /opt/chef/embedded/bin/rake --version - remote: /opt/chef/embedded/bin/bundle -v - remote: /opt/chef/embedded/bin/gem install appbundler appbundle-updater --no-doc + - remote: scl enable devtoolset-8 '/opt/chef/embedded/bin/appbundle-updater chef ohai <%= File.readlines('../Gemfile.lock', File.expand_path(File.dirname(__FILE__))).find { |l| l =~ /^\s+ohai \((\d+\.\d+\.\d+)\)/ }; 'v' + $1 %> --tarball --github chef/ohai' + includes: + - centos-6 + - remote: scl enable devtoolset-8 '/opt/chef/embedded/bin/appbundle-updater chef chef <%= ENV['BUILDKITE_COMMIT'] || %x(git rev-parse HEAD).chomp %> --tarball --github chef/chef' + includes: + - centos-6 - remote: /opt/chef/embedded/bin/appbundle-updater chef ohai <%= File.readlines('../Gemfile.lock', File.expand_path(File.dirname(__FILE__))).find { |l| l =~ /^\s+ohai \((\d+\.\d+\.\d+)\)/ }; 'v' + $1 %> --tarball --github chef/ohai + excludes: + - centos-6 - remote: /opt/chef/embedded/bin/appbundle-updater chef chef <%= ENV['BUILDKITE_COMMIT'] || %x(git rev-parse HEAD).chomp %> --tarball --github chef/chef + excludes: + - centos-6 - remote: echo "Installed Chef / Ohai release:" - remote: /opt/chef/bin/chef-client -v - remote: /opt/chef/bin/ohai -v @@ -76,7 +86,6 @@ platforms: - RUN sed -i -e "s/Defaults.*requiretty.*/Defaults !requiretty/g" /etc/sudoers - RUN yum install -y centos-release-scl - RUN yum install -y devtoolset-7 - - RUN scl enable devtoolset-7 bash - name: centos-7 driver: diff --git a/omnibus/Gemfile.lock b/omnibus/Gemfile.lock index 822ed15ebb..827136634b 100644 --- a/omnibus/Gemfile.lock +++ b/omnibus/Gemfile.lock @@ -18,7 +18,7 @@ GIT GIT remote: https://github.com/chef/omnibus-software - revision: f903311ba8ae9ff8f1e7bd7a9c21421fd39f7c7e + revision: 5286aa675239cf2ed36c7412625fbfb375575fdd branch: master specs: omnibus-software (4.0.0) @@ -32,7 +32,7 @@ GEM artifactory (3.0.15) awesome_print (1.9.2) aws-eventstream (1.1.1) - aws-partitions (1.433.0) + aws-partitions (1.434.0) aws-sdk-core (3.113.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) @@ -41,15 +41,15 @@ GEM aws-sdk-kms (1.43.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.91.0) + aws-sdk-s3 (1.92.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) aws-sigv4 (1.2.3) aws-eventstream (~> 1, >= 1.0.2) - bcrypt_pbkdf (1.1.0.rc2) - bcrypt_pbkdf (1.1.0.rc2-x64-mingw32) - bcrypt_pbkdf (1.1.0.rc2-x86-mingw32) + bcrypt_pbkdf (1.1.0) + bcrypt_pbkdf (1.1.0-x64-mingw32) + bcrypt_pbkdf (1.1.0-x86-mingw32) berkshelf (7.2.0) chef (>= 15.7.32) chef-config @@ -64,12 +64,12 @@ GEM solve (~> 4.0) thor (>= 0.20) builder (3.2.4) - chef (16.10.8) + chef (16.11.7) addressable - bcrypt_pbkdf (= 1.1.0.rc2) + bcrypt_pbkdf (~> 1.1) bundler (>= 1.10) - chef-config (= 16.10.8) - chef-utils (= 16.10.8) + chef-config (= 16.11.7) + chef-utils (= 16.11.7) chef-vault chef-zero (>= 14.0.11) diff-lcs (>= 1.2.4, < 1.4.0) @@ -101,12 +101,12 @@ GEM tty-screen (~> 0.6) tty-table (~> 0.11) uuidtools (>= 2.1.5, < 3.0) - chef (16.10.8-universal-mingw32) + chef (16.11.7-universal-mingw32) addressable - bcrypt_pbkdf (= 1.1.0.rc2) + bcrypt_pbkdf (~> 1.1) bundler (>= 1.10) - chef-config (= 16.10.8) - chef-utils (= 16.10.8) + chef-config (= 16.11.7) + chef-utils (= 16.11.7) chef-vault chef-zero (>= 14.0.11) diff-lcs (>= 1.2.4, < 1.4.0) @@ -140,7 +140,7 @@ GEM tty-table (~> 0.11) uuidtools (>= 2.1.5, < 3.0) win32-api (~> 1.5.3) - win32-certstore (~> 0.5) + win32-certstore (~> 0.5.0) win32-event (~> 0.6.1) win32-eventlog (= 0.6.3) win32-mmap (~> 0.4.1) @@ -150,18 +150,17 @@ GEM win32-taskscheduler (~> 2.0) wmi-lite (~> 1.0) chef-cleanroom (1.0.2) - chef-config (16.10.8) + chef-config (16.11.7) addressable - chef-utils (= 16.10.8) + chef-utils (= 16.11.7) fuzzyurl mixlib-config (>= 2.2.12, < 4.0) mixlib-shellout (>= 2.0, < 4.0) tomlrb (~> 1.2) - chef-telemetry (1.0.14) + chef-telemetry (1.0.29) chef-config concurrent-ruby (~> 1.0) - ffi-yajl (~> 2.2) - chef-utils (16.10.8) + chef-utils (16.11.7) chef-vault (4.1.0) chef-zero (15.0.4) ffi-yajl (~> 2.2) @@ -203,7 +202,7 @@ GEM highline (2.0.3) httpclient (2.8.3) iniparse (1.5.0) - inspec-core (4.26.4) + inspec-core (4.28.0) addressable (~> 2.4) chef-telemetry (~> 1.0) faraday (>= 0.9.0, < 1.4) @@ -253,11 +252,11 @@ GEM mixlib-log mixlib-archive (1.1.7-universal-mingw32) mixlib-log - mixlib-authentication (3.0.7) + mixlib-authentication (3.0.10) mixlib-cli (2.1.8) mixlib-config (3.0.9) tomlrb - mixlib-install (3.12.7) + mixlib-install (3.12.11) mixlib-shellout mixlib-versioning thor @@ -347,15 +346,16 @@ GEM molinillo (~> 0.6) semverse (>= 1.1, < 4.0) sslshake (1.3.1) - strings (0.2.0) + strings (0.2.1) strings-ansi (~> 0.2) - unicode-display_width (~> 1.5) + unicode-display_width (>= 1.5, < 3.0) unicode_utils (~> 1.4) strings-ansi (0.2.0) structured_warnings (0.4.0) syslog-logger (1.6.8) - test-kitchen (2.10.0) + test-kitchen (2.11.1) bcrypt_pbkdf (~> 1.0) + chef-utils (>= 16.4.35) ed25519 (~> 1.2) license-acceptance (>= 1.0.11, < 3.0) mixlib-install (~> 3.6) @@ -400,7 +400,7 @@ GEM pastel (~> 0.8) strings (~> 0.2.0) tty-screen (~> 0.8) - unicode-display_width (1.7.0) + unicode-display_width (2.0.0) unicode_utils (1.4.0) uuidtools (2.2.0) webrick (1.7.0) diff --git a/post-bundle-install.rb b/post-bundle-install.rb new file mode 100644 index 0000000000..9d7491de77 --- /dev/null +++ b/post-bundle-install.rb @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby + +gem_home = Gem.paths.home + +puts "fixing bundle installed gems in #{gem_home}" + +# Install gems from git repos. This makes the assumption that there is a <gem_name>.gemspec and +# you can simply gem build + gem install the resulting gem, so nothing fancy. This does not use +# rake install since we need --conservative --minimal-deps in order to not install duplicate gems. +# +Dir["#{gem_home}/bundler/gems/*"].each do |gempath| + matches = File.basename(gempath).match(/(.*)-[A-Fa-f0-9]{12}/) + next unless matches + + gem_name = matches[1] + next unless gem_name + + next if gem_name == "chef" + + puts "re-installing #{gem_name}..." + + # we can't use "commmand" or "bundle" or "gem" DSL methods here since those are lazy and we need to run commands immediately + # (this is like a shell_out inside of a ruby_block in core chef, you don't use an execute resource inside of a ruby_block or + # things get really weird and unexpected) + Dir.chdir(gempath) do + system("gem build #{gem_name}.gemspec") or raise "gem build failed" + system("gem install #{gem_name}*.gem --conservative --minimal-deps --no-document") or raise "gem install failed" + end +end diff --git a/spec/unit/knife/supermarket_share_spec.rb b/spec/unit/knife/supermarket_share_spec.rb index f6c44f4cd8..9e9d520540 100644 --- a/spec/unit/knife/supermarket_share_spec.rb +++ b/spec/unit/knife/supermarket_share_spec.rb @@ -140,7 +140,9 @@ describe Chef::Knife::SupermarketShare do before do allow(Chef::CookbookSiteStreamingUploader).to receive(:create_build_dir).and_return("/var/tmp/dummy") @knife.config = { dry_run: true } - allow(@knife).to receive_message_chain(:shell_out!, :stdout).and_return("file") + @so = instance_double("Mixlib::ShellOut") + allow(@knife).to receive(:shell_out!).and_return(@so) + allow(@so).to receive(:stdout).and_return("file") end it "should list files in the tarball" do @@ -151,7 +153,7 @@ describe Chef::Knife::SupermarketShare do end it "does not upload the cookbook" do - allow(@knife).to receive(:shell_out!).and_return(true) + allow(@knife).to receive(:shell_out!).and_return(@so) expect(@knife).not_to receive(:do_upload) @knife.run end diff --git a/tasks/bin/run_external_test b/tasks/bin/run_external_test index 36fde0ea4d..95466bca6b 100755 --- a/tasks/bin/run_external_test +++ b/tasks/bin/run_external_test @@ -32,7 +32,7 @@ Dir.mktmpdir("chef-external-test") do |dir| 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, env: env) + shell_out!("bundle install --jobs=3 --retry=3", live_stream: STDOUT, env: env, timeout: 3600) shell_out!("bundle exec #{ARGV.join(" ")}", live_stream: STDOUT, env: env) end end |