summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2020-11-17 14:03:03 -0800
committerGitHub <noreply@github.com>2020-11-17 14:03:03 -0800
commitc950eb1dd04df10f8ebc80f424fd39d948c3a1f9 (patch)
treea8590141e470605c67e6df931ada7e52bd26a1d3
parentf058ef1a5466ecde8b99517bf12229b891fdc42e (diff)
parent731eb2475b8f1bd43db2f2efc3940b5e25875f91 (diff)
downloadchef-c950eb1dd04df10f8ebc80f424fd39d948c3a1f9.tar.gz
Merge pull request #10460 from chef/csnapp/fix_habk2
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r--.expeditor/config.yml11
-rw-r--r--.expeditor/habitat-test.pipeline.yml34
-rw-r--r--.expeditor/verify.habitat.pipeline.yml20
-rw-r--r--.expeditor/verify.pipeline.yml30
-rw-r--r--habitat/plan.ps122
-rw-r--r--habitat/plan.sh143
-rw-r--r--habitat/tests/spec.ps19
-rw-r--r--habitat/tests/test.pester.ps117
-rwxr-xr-xhabitat/tests/test.sh37
-rwxr-xr-xscripts/ci/install-hab.sh24
-rwxr-xr-xscripts/ci/verify-plan.sh38
-rw-r--r--spec/functional/shell_spec.rb10
12 files changed, 276 insertions, 119 deletions
diff --git a/.expeditor/config.yml b/.expeditor/config.yml
index db810bf08e..73c7dfb100 100644
--- a/.expeditor/config.yml
+++ b/.expeditor/config.yml
@@ -26,14 +26,6 @@ docker_images:
pipelines:
- verify:
public: true
- - verify/habitat:
- description: >
- A temporary pipeline to verify the habitat plans. Performs a local build,
- tests it, then throws it away. Its steps should eventually move into the
- "verify" pipeline (if fast enough) or this pipeline should be removed in
- favor of learning about packaging problems after merge.
- definition: .expeditor/verify.habitat.pipeline.yml
- trigger: default
- habitat/build
- habitat/test:
definition: .expeditor/habitat-test.pipeline.yml
@@ -106,10 +98,11 @@ subscriptions:
- bash:.expeditor/update_dockerfile.sh
- built_in:tag_docker_image
- built_in:publish_rubygems
+ - built_in:promote_habitat_packages
- built_in:notify_chefio_slack_channels
# the habitat chain
- workload: buildkite_hab_build_group_published:{{agent_id}}:*
actions:
# when all of the hab package publish to the unstable channel, test and promote them
- - trigger_pipeline:habitat/test \ No newline at end of file
+ - trigger_pipeline:habitat/test
diff --git a/.expeditor/habitat-test.pipeline.yml b/.expeditor/habitat-test.pipeline.yml
index 8a71df9c17..7d2cc8f653 100644
--- a/.expeditor/habitat-test.pipeline.yml
+++ b/.expeditor/habitat-test.pipeline.yml
@@ -9,12 +9,36 @@ expeditor:
steps:
+- label: ":linux: Validate Linux"
+ commands:
+ - sudo ./scripts/ci/install-hab.sh x86_64-linux
+ - 'echo "--- :hammer_and_wrench: Installing $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUX"'
+ - sudo hab pkg install $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUX
+ - sudo ./habitat/tests/test.sh $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUX
+ expeditor:
+ executor:
+ linux:
+ privileged: true
+ single-use: true
+
+- label: ":linux: Validate Linux (kernel2)"
+ commands:
+ - sudo ./scripts/ci/install-hab.sh x86_64-linux-kernel2
+ - 'echo "--- :hammer_and_wrench: Installing $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUXKERNEL2"'
+ - sudo hab pkg install $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUXKERNEL2
+ - sudo ./habitat/tests/test.sh $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUXKERNEL2
+ expeditor:
+ executor:
+ linux:
+ privileged: true
+ single-use: true
+
- label: ":windows: Validate Habitat Builds of Chef Infra"
commands:
- - powershell -File "./scripts/ci/ensure-minimum-viable-hab.ps1"
+ - powershell -File ./scripts/ci/ensure-minimum-viable-hab.ps1
- 'Write-Host "--- :hammer_and_wrench: Installing $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS"'
- - hab pkg install "$EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS"
- - powershell -File "./habitat/tests/test.ps1" -PackageIdentifier "$EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS"
+ - hab pkg install $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS
+ - powershell -File ./habitat/tests/test.ps1 -PackageIdentifier $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS
expeditor:
executor:
windows:
@@ -26,7 +50,9 @@ steps:
- label: ":habicat: Promoting packages to the current channel."
commands:
- - hab pkg promote "$EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS" current x86_64-windows
+ - hab pkg promote $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUX current x86_64-linux
+ - hab pkg promote $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64LINUXKERNEL2 current x86_64-linux-kernel2
+ - hab pkg promote $EXPEDITOR_PKG_IDENTS_CHEFINFRACLIENTX86_64WINDOWS current x86_64-windows
expeditor:
executor:
docker:
diff --git a/.expeditor/verify.habitat.pipeline.yml b/.expeditor/verify.habitat.pipeline.yml
deleted file mode 100644
index 9c50312db5..0000000000
--- a/.expeditor/verify.habitat.pipeline.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-expeditor:
- defaults:
- buildkite:
- timeout_in_minutes: 60
- retry:
- automatic:
- limit: 1
-
-steps:
-
-- label: "Windows plan"
- commands:
- - scripts/ci/verify-plan.ps1
- expeditor:
- executor:
- windows:
- privileged: true
- single-use: true
- shell: ["powershell", "-Command"]
diff --git a/.expeditor/verify.pipeline.yml b/.expeditor/verify.pipeline.yml
index ddfd9617f8..96dd9be35e 100644
--- a/.expeditor/verify.pipeline.yml
+++ b/.expeditor/verify.pipeline.yml
@@ -535,3 +535,33 @@ steps:
linux:
privileged: true
single-use: true
+
+- label: ":habicat: Linux plan"
+ commands:
+ - sudo ./scripts/ci/install-hab.sh 'x86_64-linux'
+ - sudo ./scripts/ci/verify-plan.sh
+ timeout_in_minutes: 60
+ expeditor:
+ executor:
+ linux:
+ privileged: true
+ single-use: true
+
+- label: ":habicat: Linux plan (kernel2)"
+ commands:
+ - sudo ./scripts/ci/install-hab.sh 'x86_64-linux-kernel2'
+ - sudo ./scripts/ci/verify-plan.sh
+ timeout_in_minutes: 60
+ expeditor:
+ executor:
+ linux:
+ privileged: true
+ single-use: true
+
+- label: ":habicat: Windows plan"
+ commands:
+ - ./scripts/ci/verify-plan.ps1
+ expeditor:
+ executor:
+ windows:
+ privileged: true
diff --git a/habitat/plan.ps1 b/habitat/plan.ps1
index 719f5e7a5a..5462ff56ff 100644
--- a/habitat/plan.ps1
+++ b/habitat/plan.ps1
@@ -13,6 +13,7 @@ $pkg_bin_dirs=@(
$pkg_deps=@(
"core/cacerts"
"chef/ruby-plus-devkit"
+ "chef/chef-powershell-shim"
)
function Invoke-Begin {
@@ -44,6 +45,7 @@ function Invoke-Download() {
try {
Push-Location (Resolve-Path "$PLAN_CONTEXT/../").Path
git archive --format=zip --output="${HAB_CACHE_SRC_PATH}/${pkg_filename}" HEAD
+ if (-not $?) { throw "unable to create archive of source" }
} finally {
Pop-Location
}
@@ -62,6 +64,7 @@ function Invoke-Prepare {
Write-BuildLine " ** Configuring bundler for this build environment"
bundle config --local without server docgen maintenance pry travis integration ci chefstyle
+ if (-not $?) { throw "unable to configure bundler to restrict gems to be installed" }
bundle config --local jobs 4
bundle config --local retry 5
bundle config --local silence_root_warning 1
@@ -74,20 +77,29 @@ function Invoke-Build {
try {
Push-Location "${HAB_CACHE_SRC_PATH}/${pkg_dirname}"
+ $env:_BUNDER_WINDOWS_DLLS_COPIED = "1"
+
Write-BuildLine " ** Using bundler to retrieve the Ruby dependencies"
- bundle install
- Write-BuildLine " ** Running the chef project's 'rake install' to install the path-based gems so they look like any other installed gem."
- bundle exec rake install # this needs to be 'bundle exec'd because a Rakefile makes reference to Bundler
- Write-BuildLine " ** Also 'rake install' any gem sourced as a git reference."
+ bundle install --jobs=3 --retry=3
+ if (-not $?) { throw "unable to install gem dependencies" }
+ Write-BuildLine " ** 'rake install' any gem sourced as a git reference so they'll look like regular gems."
foreach($git_gem in (Get-ChildItem "$env:GEM_HOME/bundler/gems")) {
try {
Push-Location $git_gem
- Write-BuildLine " -- and $git_gem too"
+ Write-BuildLine " -- installing $git_gem"
rake install # this needs to NOT be 'bundle exec'd else bundler complains about dev deps not being installed
+ if (-not $?) { throw "unable to install $git_gem as a plain old gem" }
} finally {
Pop-Location
}
}
+ Write-BuildLine " ** Running the chef project's 'rake install' to install the path-based gems so they look like any other installed gem."
+ bundle exec rake install # this needs to be 'bundle exec'd because a Rakefile makes reference to Bundler
+ if (-not $?) {
+ Write-Warning " -- That didn't work. Let's try again."
+ bundle exec rake install # this needs to be 'bundle exec'd because a Rakefile makes reference to Bundler
+ if (-not $?) { throw "unable to install the gems that live in directories within this repo" }
+ }
} finally {
Pop-Location
}
diff --git a/habitat/plan.sh b/habitat/plan.sh
index 949d9d9021..2bc13785d8 100644
--- a/habitat/plan.sh
+++ b/habitat/plan.sh
@@ -1,9 +1,13 @@
-pkg_name=chef-infra-client
-pkg_origin=chef
+_chef_client_ruby="core/ruby26"
+pkg_name="chef-infra-client"
+pkg_origin="chef"
pkg_maintainer="The Chef Maintainers <humans@chef.io>"
pkg_description="The Chef Infra Client"
pkg_license=('Apache-2.0')
-pkg_bin_dirs=(bin)
+pkg_bin_dirs=(
+ bin
+ vendor/bin
+)
pkg_build_deps=(
core/make
core/gcc
@@ -11,13 +15,12 @@ pkg_build_deps=(
)
pkg_deps=(
core/glibc
- core/ruby26
+ $_chef_client_ruby
core/libxml2
core/libxslt
core/libiconv
core/xz
core/zlib
- core/bundler/1.17.3
core/openssl
core/cacerts
core/libffi
@@ -52,10 +55,35 @@ do_verify() {
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 SSL_CERT_FILE "$(pkg_path_for cacerts)/ssl/cert.pem"
+ set_runtime_env LANG "en_US.UTF-8"
+ set_runtime_env LC_CTYPE "en_US.UTF-8"
+}
+
do_prepare() {
- export OPENSSL_LIB_DIR=$(pkg_path_for openssl)/lib
- export OPENSSL_INCLUDE_DIR=$(pkg_path_for openssl)/include
- export SSL_CERT_FILE=$(pkg_path_for cacerts)/ssl/cert.pem
+ export GEM_HOME="${pkg_prefix}/vendor"
+ export OPENSSL_LIB_DIR="$(pkg_path_for openssl)/lib"
+ export OPENSSL_INCLUDE_DIR="$(pkg_path_for openssl)/include"
+ export SSL_CERT_FILE="$(pkg_path_for cacerts)/ssl/cert.pem"
+ export CPPFLAGS="${CPPFLAGS} ${CFLAGS}"
+
+ ( cd "$CACHE_PATH"
+ gem install bundler -v 1.17.3
+ bundle config --local build.nokogiri "--use-system-libraries \
+ --with-zlib-dir=$(pkg_path_for zlib) \
+ --with-xslt-dir=$(pkg_path_for libxslt) \
+ --with-xml2-include=$(pkg_path_for libxml2)/include/libxml2 \
+ --with-xml2-lib=$(pkg_path_for libxml2)/lib"
+ bundle config --local jobs "$(nproc)"
+ bundle config --local without server docgen maintenance pry travis integration ci chefstyle
+ 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
@@ -64,61 +92,46 @@ do_prepare() {
}
do_build() {
- local _bundler_dir
- local _libxml2_dir
- local _libxslt_dir
- local _zlib_dir
- export CPPFLAGS
- export GEM_HOME
- export GEM_PATH
- export NOKOGIRI_CONFIG
-
- _bundler_dir=$(pkg_path_for bundler)
- _libxml2_dir=$(pkg_path_for libxml2)
- _libxslt_dir=$(pkg_path_for libxslt)
- _zlib_dir=$(pkg_path_for zlib)
-
- CPPFLAGS="${CPPFLAGS} ${CFLAGS}"
- GEM_HOME=${pkg_prefix}/bundle
- GEM_PATH=${_bundler_dir}:${GEM_HOME}
- NOKOGIRI_CONFIG="--use-system-libraries \
- --with-zlib-dir=${_zlib_dir} \
- --with-xslt-dir=${_libxslt_dir} \
- --with-xml2-include=${_libxml2_dir}/include/libxml2 \
- --with-xml2-lib=${_libxml2_dir}/lib"
-
-
- build_line "Executing bundle install inside hab-cache path. ($CACHE_PATH/chef-config)"
- ( cd "$CACHE_PATH/chef-config" || exit_with "unable to enter hab-cache directory" 1
- bundle config --local build.nokogiri "${NOKOGIRI_CONFIG}"
- bundle config --local silence_root_warning 1
- _bundle_install "${pkg_prefix}/bundle"
+ ( 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 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
)
-
- build_line "Executing bundle install inside source path. ($SRC_PATH)"
- _bundle_install "${pkg_prefix}/bundle"
}
do_install() {
- build_line "Copying directories from source to pkg_prefix"
- mkdir -p "${pkg_prefix}/chef"
- for dir in bin chef-bin chef-config chef-utils lib chef.gemspec Gemfile Gemfile.lock; do
- cp -rv "${SRC_PATH}/${dir}" "${pkg_prefix}/chef/"
- done
-
- # If we generated them on install, bundler thinks our source is in $HAB_CACHE_SOURCE_PATH
- build_line "Generating binstubs with the correct path"
- ( cd "$pkg_prefix/chef" || exit_with "unable to enter pkg prefix directory" 1
- _bundle_install \
- "${pkg_prefix}/bundle" \
- --local \
- --quiet \
- --binstubs "${pkg_prefix}/bin"
+ ( 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-bin chef inspec-core-bin ohai; do
+ build_line "** generating binstubs for $gem with precise version pins"
+ appbundler $CACHE_PATH $pkg_prefix/bin $gem
+ done
)
+}
- build_line "Fixing bin/ruby and bin/env interpreters"
- fix_interpreter "${pkg_prefix}/bin/*" core/coreutils bin/env
- fix_interpreter "${pkg_prefix}/bin/*" core/ruby26 bin/ruby
+do_after() {
+ build_line "Trimming the fat ..."
+
+ # We don't need the cache of downloaded .gem files ...
+ rm -r "$pkg_prefix/vendor/cache"
+ # ... or bundler's cache of git-ref'd gems
+ rm -r "$pkg_prefix/vendor/bundler"
+ # 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
}
do_end() {
@@ -131,19 +144,3 @@ do_end() {
do_strip() {
return 0
}
-
-# Helper function to wrap up some repetitive bundle install flags
-_bundle_install() {
- local path
- path="$1"
- shift
-
- bundle install ${*:-} \
- --jobs "$(nproc)" \
- --without development:test \
- --path "$path" \
- --shebang="$(pkg_path_for "core/ruby26")/bin/ruby" \
- --no-clean \
- --retry 5 \
- --standalone
-}
diff --git a/habitat/tests/spec.ps1 b/habitat/tests/spec.ps1
index ab1656b221..6cbdd406c2 100644
--- a/habitat/tests/spec.ps1
+++ b/habitat/tests/spec.ps1
@@ -10,8 +10,15 @@ $chef_gem_root = (hab pkg exec $PackageIdentifier gem.cmd which chef | Split-Pat
try {
Push-Location $chef_gem_root
$env:PATH = "C:\hab\bin;$env:PATH"
+
+ # Put chef's GEM_PATH in the machine environment so that the windows service
+ # tests will be able to consume the win32-service gem
+ $pkgEnv = hab pkg env $PackageIdentifier
+ $gemPath = $pkgEnv | Where-Object { $_.StartsWith("`$env:GEM_PATH=") }
+ SETX GEM_PATH $($gemPath.Split("=")[1]) /m
+
hab pkg binlink --force $PackageIdentifier
- /hab/bin/rspec --format progress --tag ~executables --tag ~choco_installed spec/functional
+ /hab/bin/rspec --format documentation --tag ~executables --tag ~choco_installed spec/functional
if (-not $?) { throw "functional testing failed"}
} finally {
Pop-Location
diff --git a/habitat/tests/test.pester.ps1 b/habitat/tests/test.pester.ps1
index a5f665c9de..56f31e9a2f 100644
--- a/habitat/tests/test.pester.ps1
+++ b/habitat/tests/test.pester.ps1
@@ -12,8 +12,21 @@ Describe "chef-infra-client" {
$? | Should be $true
}
+ <#
+ At some point hab's argument parsing changed and it started interpreting the trailing `--version` as being
+ an argument passed to hab instead of an argument to the command passed to `hab pkg exec`.
+
+ Powershell 5.1 and 7 appear to differ in how they treat following arguments as well, such that these two
+ versions of the command fail in powershell 5.1 (which is currently what is running in the windows machines
+ in Buildkite) but pass in powershell 7 (which is currently what is running in a stock Windows 10 VM).
+
+ $the_version = (hab pkg exec $PackageIdentifier chef-client.bat '--version' | Out-String).split(':')[1].Trim()
+ $the_version = (hab pkg exec $PackageIdentifier chef-client.bat --version | Out-String).split(':')[1].Trim()
+
+ This version of the command passes in powershell 5.1 but fails in powershell 7.
+ #>
It "is the expected version" {
- $the_version = (hab pkg exec $PackageIdentifier chef-client.bat --version | Out-String).split(':')[1].Trim()
+ $the_version = (hab pkg exec $PackageIdentifier chef-client.bat -- --version | Out-String).split(':')[1].Trim()
$the_version | Should be $PackageVersion
}
}
@@ -52,4 +65,4 @@ Describe "chef-infra-client" {
$? | Should be $true
}
}
-} \ No newline at end of file
+}
diff --git a/habitat/tests/test.sh b/habitat/tests/test.sh
new file mode 100755
index 0000000000..c28ab8b2cf
--- /dev/null
+++ b/habitat/tests/test.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+export CHEF_LICENSE="accept-no-persist"
+export HAB_LICENSE="accept-no-persist"
+export HAB_NONINTERACTIVE="true"
+
+project_root="$(git rev-parse --show-toplevel)"
+pkg_ident="$1"
+
+# print error message followed by usage and exit
+error () {
+ local message="$1"
+
+ echo -e "\nERROR: ${message}\n" >&2
+
+ exit 1
+}
+
+[[ -n "$pkg_ident" ]] || error 'no hab package identity provided'
+
+package_version=$(awk -F / '{print $3}' <<<"$pkg_ident")
+
+cd "${project_root}"
+
+echo "--- :mag_right: Testing ${pkg_ident} executables"
+actual_version=$(hab pkg exec "${pkg_ident}" chef-client -- --version | sed 's/.*: //')
+[[ "$package_version" = "$actual_version" ]] || error "chef-client is not the expected version. Expected '$package_version', got '$actual_version'"
+
+for executable in 'chef-client' 'ohai' 'chef-shell' 'chef-apply' 'knife' 'chef-solo'; do
+ echo -en "\t$executable = "
+ hab pkg exec "${pkg_ident}" "${executable}" -- --version || error "${executable} failed to execute properly"
+done
+
+echo "--- :mag_right: Testing ${pkg_ident} functionality"
+hab pkg exec "${pkg_ident}" rspec --tag ~executables spec/functional || error 'failures during rspec tests'
diff --git a/scripts/ci/install-hab.sh b/scripts/ci/install-hab.sh
new file mode 100755
index 0000000000..75e910bfab
--- /dev/null
+++ b/scripts/ci/install-hab.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+export HAB_LICENSE="accept"
+export HAB_NONINTERACTIVE="true"
+
+hab_target="$1"
+
+# print error message followed by usage and exit
+error () {
+ local message="$1"
+
+ echo -e "\nERROR: ${message}\n" >&2
+
+ exit 1
+}
+
+[[ -n "$hab_target" ]] || error 'no hab target provided'
+
+echo "--- :habicat: Installing latest version of Habitat"
+rm -rf /hab
+curl https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh | bash -s -- -t "$hab_target"
+hab license accept
diff --git a/scripts/ci/verify-plan.sh b/scripts/ci/verify-plan.sh
new file mode 100755
index 0000000000..b207334267
--- /dev/null
+++ b/scripts/ci/verify-plan.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+export HAB_ORIGIN='ci'
+export PLAN='chef-infra-client'
+export CHEF_LICENSE="accept-no-persist"
+export HAB_LICENSE="accept-no-persist"
+export HAB_NONINTERACTIVE="true"
+
+# print error message followed by usage and exit
+error () {
+ local message="$1"
+
+ echo -e "\nERROR: ${message}\n" >&2
+
+ exit 1
+}
+
+echo "--- :8ball: :linux: Verifying $PLAN"
+project_root="$(git rev-parse --show-toplevel)"
+
+echo "--- :key: Generating fake origin key"
+hab origin key generate "$HAB_ORIGIN"
+
+echo "--- :construction: Building $PLAN (solely for verification testing)"
+(
+ cd "$project_root" || error 'cannot change directory to project root'
+ DO_CHECK=true hab pkg build . || error 'unable to build'
+)
+
+source "${project_root}/results/last_build.env" || error 'unable to determine details about this build'
+
+echo "--- :hammer_and_wrench: Installing $pkg_ident"
+hab pkg install "${project_root}/results/$pkg_artifact" || error 'unable to install this build'
+
+echo "--- :mag_right: Testing $PLAN"
+${project_root}/habitat/tests/test.sh "$pkg_ident" || error 'failures during test of executables'
diff --git a/spec/functional/shell_spec.rb b/spec/functional/shell_spec.rb
index 53f30c4c4f..357e8f07af 100644
--- a/spec/functional/shell_spec.rb
+++ b/spec/functional/shell_spec.rb
@@ -98,13 +98,13 @@ describe Shell do
[output, e.status]
end
- it "boots correctly with -lauto" do
+ it "boots correctly with -lauto", :executables do
output, exitstatus = run_chef_shell_with("-lauto")
expect(output).to include("done")
expect(exitstatus).to eq(0)
end
- it "sets the log_level from the command line" do
+ it "sets the log_level from the command line", :executables do
output, exitstatus = run_chef_shell_with("-lfatal") do |out, keyboard|
show_log_level_code = %q[puts "===#{Chef::Log.level}==="]
keyboard.puts(show_log_level_code)
@@ -115,13 +115,13 @@ describe Shell do
end
context "on solo mode" do
- it "starts correctly" do
+ it "starts correctly", :executables do
output, exitstatus = run_chef_shell_with("--solo")
expect(output).to include("done")
expect(exitstatus).to eq(0)
end
- it "should be able to use the API" do
+ it "should be able to use the API", :executables do
output, exitstatus = run_chef_shell_with("-s") do |out, keyboard|
simple_api_get = "api.get('data')"
keyboard.puts(simple_api_get)
@@ -132,7 +132,7 @@ describe Shell do
end
end
- it "sets the override_runlist from the command line" do
+ it "sets the override_runlist from the command line", :executables do
output, exitstatus = run_chef_shell_with("-o 'override::foo,override::bar'") do |out, keyboard|
show_recipes_code = %q[puts "#{node["recipes"].inspect}"]
keyboard.puts(show_recipes_code)