From 2b6eb943a3c2a8410e9eb5ed8d8de11e974338b5 Mon Sep 17 00:00:00 2001 From: Sachin Date: Wed, 4 Sep 2024 00:33:32 +0530 Subject: [PATCH] plan file for linux and window Signed-off-by: Sachin --- Gemfile | 5 +++ fauxhai-chef.gemspec | 2 +- habitat/plan.ps1 | 86 ++++++++++++++++++++++++++++++++++++++++++++ habitat/plan.sh | 77 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 habitat/plan.ps1 create mode 100644 habitat/plan.sh diff --git a/Gemfile b/Gemfile index 3be9c3cd..805faf75 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,7 @@ source "https://rubygems.org" + gemspec + +group :development do + gem 'appbundler' +end \ No newline at end of file diff --git a/fauxhai-chef.gemspec b/fauxhai-chef.gemspec index fabcab01..84b5fccd 100644 --- a/fauxhai-chef.gemspec +++ b/fauxhai-chef.gemspec @@ -19,9 +19,9 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.add_runtime_dependency "net-ssh" + spec.add_runtime_dependency "ohai", ">= 13.0" spec.add_development_dependency "chef", ">= 13.0" - spec.add_development_dependency "ohai", ">= 13.0" spec.add_development_dependency "rake" spec.add_development_dependency "rspec", "~> 3.7" spec.add_development_dependency "rspec-its", "~> 1.2" diff --git a/habitat/plan.ps1 b/habitat/plan.ps1 new file mode 100644 index 00000000..2fbe1836 --- /dev/null +++ b/habitat/plan.ps1 @@ -0,0 +1,86 @@ +$ErrorActionPreference = "Stop" +$PSDefaultParameterValues['*:ErrorAction']='Stop' + +$pkg_name="fauxhai" +$pkg_origin="core" +$pkg_version="9.3.16" +$pkg_revision="1" +$pkg_maintainer="The Chef Maintainers " + +$pkg_deps=@( + "chef/ruby31-plus-devkit" + "core/git" +) +$pkg_bin_dirs=@("bin" + "vendor/bin") +$project_root= (Resolve-Path "$PLAN_CONTEXT/../").Path + +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 fauxhai-chef.gemspec + Write-BuildLine " ** Using gem to install" + gem install fauxhai-chef-*.gem --no-document + + + 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 fauxhai-chef with precise version pins" + Write-BuildLine "** generating binstubs for fauxhai-chef with precise version pins $project_root $pkg_prefix/bin " + Invoke-Expression -Command "appbundler.bat $project_root $pkg_prefix/bin fauxhai-chef" + If ($lastexitcode -ne 0) { Exit $lastexitcode } + Write-BuildLine " ** Running the fauxhai-chef 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 "*fauxhai-chef*" } ` + | 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 +} \ No newline at end of file diff --git a/habitat/plan.sh b/habitat/plan.sh new file mode 100644 index 00000000..95bafe49 --- /dev/null +++ b/habitat/plan.sh @@ -0,0 +1,77 @@ +pkg_name=fauxhai +pkg_origin=chef +pkg_version="9.3.16" +pkg_description="Easily mock full ohai data" +pkg_license=('Apache-2.0') +pkg_deps=( + core/ruby31 + core/bash +) +pkg_build_deps=( + core/gcc + core/make +) +pkg_bin_dirs=(bin) + +# Setup environment variables for Ruby Gems +do_setup_environment() { + build_line "Setting up GEM_HOME and GEM_PATH" + export GEM_HOME="$pkg_prefix/lib" + export GEM_PATH="$GEM_HOME" +} + +# Unpack the source files into the cache directory +do_unpack() { + local unpack_dir="$HAB_CACHE_SRC_PATH/$pkg_dirname" + build_line "Creating unpack directory: $unpack_dir" + mkdir -pv "$unpack_dir" + cp -RT "$PLAN_CONTEXT"/.. "$unpack_dir/" +} + +# Build the gem from the gemspec file +do_build() { + build_line "Building the gem from the gemspec file" + pushd "$HAB_CACHE_SRC_PATH/$pkg_dirname" > /dev/null + gem build fauxhai-chef.gemspec + popd > /dev/null +} + +# Install the built gem into the package directory +do_install() { + build_line "Installing the gem" + pushd "$HAB_CACHE_SRC_PATH/$pkg_dirname" > /dev/null + gem install fauxhai-*.gem --no-document + popd > /dev/null + + wrap_fauxhai_bin +} + +# Create a wrapper script to properly set paths and execute the fauxhai command +wrap_fauxhai_bin() { + local bin="$pkg_prefix/bin/$pkg_name" + local real_bin="$GEM_HOME/gems/fauxhai-chef-${pkg_version}/bin/fauxhai" + + build_line "Creating wrapper script: $bin" + cat < "$bin" +#!$(pkg_path_for core/bash)/bin/bash +set -e + +# Set the PATH for Fauxhai to include necessary binaries +export PATH="/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:\$PATH" + +# Set Ruby paths defined from 'do_setup_environment()' +export GEM_HOME="$GEM_HOME" +export GEM_PATH="$GEM_PATH" + +# Execute the Fauxhai binary +exec $(pkg_path_for core/ruby31)/bin/ruby $real_bin "\$@" +EOF + + # Ensure the wrapper script is executable + chmod -v 755 "$bin" +} + +# No additional stripping needed +do_strip() { + return 0 +}