Skip to content

Commit

Permalink
Merge pull request #2 from chef/CHEF-14221_hab_plan
Browse files Browse the repository at this point in the history
Chef 14221 hab plan
  • Loading branch information
nikhil2611 authored Oct 17, 2024
2 parents ae72275 + 66b3ea9 commit fd1da4c
Show file tree
Hide file tree
Showing 4 changed files with 216 additions and 2 deletions.
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
source "https://rubygems.org"

gemspec

gem "appbundler"
gem "pry"
group :test do
gem "rake"
gem "rb-readline"
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.7.0
3.7.0
92 changes: 92 additions & 0 deletions habitat/plan.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
$ErrorActionPreference = "Stop"
$PSDefaultParameterValues['*:ErrorAction']='Stop'

$pkg_name="test-kitchen"
$pkg_origin="chef"
$pkg_version=$(Get-Content "$PLAN_CONTEXT/../VERSION")
$pkg_maintainer="The Chef Maintainers <[email protected]>"

$pkg_deps=@(
"chef/ruby31-plus-devkit"
"core/git"
)
$pkg_bin_dirs=@("bin"
"vendor/bin")
$project_root= (Resolve-Path "$PLAN_CONTEXT/../").Path

function pkg_version {
Get-Content "$SRC_PATH/VERSION"
}

function Invoke-Before {
Set-PkgVersion
}
function Invoke-SetupEnvironment {
Push-RuntimeEnv -IsPath GEM_PATH "$pkg_prefix/vendor"

Set-RuntimeEnv APPBUNDLER_ALLOW_RVM "true" # prevent appbundler from clearing out the carefully constructed runtime GEM_PATH
Set-RuntimeEnv FORCE_FFI_YAJL "ext"
Set-RuntimeEnv LANG "en_US.UTF-8"
Set-RuntimeEnv LC_CTYPE "en_US.UTF-8"
}

function Invoke-Build {
try {
$env:Path += ";c:\\Program Files\\Git\\bin"
Push-Location $project_root
$env:GEM_HOME = "$HAB_CACHE_SRC_PATH/$pkg_dirname/vendor"

Write-BuildLine " ** Configuring bundler for this build environment"
bundle config --local without integration deploy maintenance
bundle config --local jobs 4
bundle config --local retry 5
bundle config --local silence_root_warning 1
Write-BuildLine " ** Using bundler to retrieve the Ruby dependencies"
bundle install

gem build test-kitchen.gemspec
Write-BuildLine " ** Using gem to install"
gem install test-kitchen-*.gem --no-document
gem install kitchen-dokken

If ($lastexitcode -ne 0) { Exit $lastexitcode }
} finally {
Pop-Location
}
}

function Invoke-Install {
Write-BuildLine "** Copy built & cached gems to install directory"
Copy-Item -Path "$HAB_CACHE_SRC_PATH/$pkg_dirname/*" -Destination $pkg_prefix -Recurse -Force -Exclude @("gem_make.out", "mkmf.log", "Makefile",
"*/latest", "latest",
"*/JSON-Schema-Test-Suite", "JSON-Schema-Test-Suite")

try {
Push-Location $pkg_prefix
bundle config --local gemfile $project_root/Gemfile
Write-BuildLine "** generating binstubs for test-kitchen with precise version pins"
Write-BuildLine "** generating binstubs for test-kitchen with precise version pins $project_root $pkg_prefix/bin "
Invoke-Expression -Command "appbundler.bat $project_root $pkg_prefix/bin test-kitchen"
If ($lastexitcode -ne 0) { Exit $lastexitcode }
Write-BuildLine " ** Running the test-kitchen project's 'rake install' to install the path-based gems so they look like any other installed gem."

If ($lastexitcode -ne 0) { Exit $lastexitcode }
} finally {
Pop-Location
}
}

function Invoke-After {
# We don't need the cache of downloaded .gem files ...
Remove-Item $pkg_prefix/vendor/cache -Recurse -Force
# We don't need the gem docs.
Remove-Item $pkg_prefix/vendor/doc -Recurse -Force
# We don't need to ship the test suites for every gem dependency,
# only inspec's for package verification.
Get-ChildItem $pkg_prefix/vendor/gems -Filter "spec" -Directory -Recurse -Depth 1 `
| Where-Object -FilterScript { $_.FullName -notlike "*test-kitchen*" } `
| Remove-Item -Recurse -Force
# Remove the byproducts of compiling gems with extensions
Get-ChildItem $pkg_prefix/vendor/gems -Include @("gem_make.out", "mkmf.log", "Makefile") -File -Recurse `
| Remove-Item -Force
}
121 changes: 121 additions & 0 deletions habitat/plan.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
_chef_client_ruby="core/ruby31"
pkg_name="test-kitchen"
pkg_origin="chef"
pkg_maintainer="The Chef Maintainers <[email protected]>"
pkg_description="The Chef Test Kitchen"
pkg_license=('Apache-2.0')
pkg_bin_dirs=(
bin
vendor/bin
)
pkg_build_deps=(
core/make
core/gcc
core/git
)
pkg_deps=(
$_chef_client_ruby
core/coreutils
)
pkg_svc_user=root

pkg_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}"
# 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_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 ..."
build_line "Installing this project's gems ..."
bundle exec rake install:local
gem install chef-utils chef-config appbundler aruba kitchen-dokken
)
}

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 test-kitchen; do
build_line "** generating binstubs for $gem with precise version pins"
appbundler $CACHE_PATH $pkg_prefix/bin $gem
done
)
}

do_after() {
build_line "Trimming the fat ..."

# We don't need the cache of downloaded .gem files ...
rm -r "$pkg_prefix/vendor/cache"

# 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() {
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
}

do_strip() {
return 0
}

0 comments on commit fd1da4c

Please sign in to comment.