-
Notifications
You must be signed in to change notification settings - Fork 112
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CHEF-14475- Updated plan.sh file to work with different hab packages #3282
Draft
nikhil2611
wants to merge
3
commits into
main
Choose a base branch
from
nikhil/hab-plan-file
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from 1 commit
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# Print all the gems installed in the Chef Workstation omnibus as a JSON hash. This is | ||
# stored in the root of the Chef Workstation install next to the `version-manifest.json`. | ||
|
||
all_gems = {} | ||
|
||
Gem::Specification.load_defaults | ||
Gem::Specification.each do |spec| | ||
all_gems[spec.name] ||= [] | ||
all_gems[spec.name] << spec.version.to_s | ||
end | ||
|
||
require "json" | ||
j = JSON.pretty_generate(all_gems) | ||
|
||
gem_home = Gem.paths.home | ||
manifest_file = "#{gem_home}/gem-version-manifest.json" | ||
File.open(manifest_file, "w") do |f| | ||
f.write(j) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
pkg_name=chef-workstation | ||
pkg_origin=chef | ||
pkg_origin=ngupta26 | ||
pkg_maintainer="The Chef Maintainers <[email protected]>" | ||
pkg_description="Chef Workstation - Opinionated tools for getting the most out of the Chef ecosystem" | ||
pkg_license=('Apache-2.0') | ||
|
@@ -9,12 +9,9 @@ ruby_pkg="core/ruby31" | |
pkg_build_deps=( | ||
core/make | ||
core/gcc | ||
core/go | ||
core/go22 | ||
core/gcc-libs | ||
core/pkg-config | ||
# We make this a build dependency since we are going to import | ||
# the generated binary into our list of binaries. | ||
# @afiune: Not sure if this is the right pattern but it works. | ||
chef/chef-analyze | ||
) | ||
pkg_deps=( | ||
|
@@ -32,6 +29,9 @@ pkg_deps=( | |
core/libarchive | ||
core/coreutils | ||
core/git | ||
ngupta26/cookstyle | ||
ngupta26/berkshelf | ||
ngupta26/chef-cli | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. similarly for the origins of these packages? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah these too we will be pulling from chef/ origin like chef/cookstyle, chef/chef-cli etc |
||
) | ||
|
||
pkg_version() { | ||
|
@@ -48,24 +48,55 @@ do_verify() { | |
} | ||
|
||
do_prepare() { | ||
# Clear any existing GEM_PATH | ||
unset GEM_PATH | ||
|
||
# Set GEM_HOME and GEM_PATH | ||
export GEM_HOME="$pkg_prefix/vendor" | ||
export GEM_PATH="$GEM_HOME" # Initialize GEM_PATH to only GEM_HOME | ||
export PATH="$GEM_HOME/bin:$PATH" # Add GEM_HOME/bin to PATH | ||
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 RUBY_ABI_VERSION=$(ls $(pkg_path_for ${ruby_pkg})/lib/ruby/gems) | ||
export GOPROXY=https://proxy.golang.org,direct | ||
build_line "Using Ruby ABI version '${RUBY_ABI_VERSION}'" | ||
|
||
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 | ||
# if [ ! -f /usr/bin/env ]; then | ||
# ln -s "$(pkg_interpreter_for core/coreutils bin/env)" /usr/bin/env | ||
# fi | ||
|
||
# Set the path for ruby from the core/ruby31 package | ||
RUBY_PATH="$(hab pkg path core/ruby31)/bin/ruby" | ||
|
||
# Check if the ruby executable exists | ||
if [ -x "$RUBY_PATH" ]; then | ||
# Create the symlink for ruby | ||
ln -sf "$RUBY_PATH" /usr/bin/env | ||
echo "Symlink created: /usr/bin/ruby -> $RUBY_PATH" | ||
else | ||
echo "Error: Ruby executable not found at $RUBY_PATH" | ||
fi | ||
|
||
# Set the symlink for /usr/bin/env to the ruby executable | ||
# if [ ! -e /usr/bin/env ]; then | ||
# sudo ln -s "$RUBY_PATH" /usr/bin/env | ||
# echo "Symlink created: /usr/bin/env -> $RUBY_PATH" | ||
# else | ||
# echo "/usr/bin/env already exists." | ||
# fi | ||
} | ||
|
||
do_build() { | ||
export GEM_HOME | ||
export GEM_PATH | ||
# TODO this appears to give us no depsolver? What are the effects? | ||
GEM_HOME="$pkg_prefix" | ||
GEM_PATH="$(pkg_path_for bundler):${GEM_HOME}" | ||
# Set up environment variables for the build | ||
export GEM_HOME="$pkg_prefix" | ||
export GEM_PATH="${GEM_HOME}" | ||
export PATH="$PATH:/hab/pkgs/core/ruby31/3.1.6/20240912144513/bin" | ||
|
||
sed -i '1s|^.*|#!/hab/pkgs/core/ruby31/3.1.6/20240912144513/bin/ruby|' /hab/pkgs/ngupta26/cookstyle/7.32.11/20241006190955/vendor/bin/rspec | ||
|
||
|
||
|
||
export NOKOGIRI_CONFIG | ||
NOKOGIRI_CONFIG="--use-system-libraries \ | ||
|
@@ -79,84 +110,51 @@ do_build() { | |
bundle config --local build.nokogiri "$NOKOGIRI_CONFIG" | ||
bundle config --local silence_root_warning 1 | ||
bundle config set --local without dep_selector | ||
bundle install --no-deployment --jobs 10 --retry 5 --path "$pkg_prefix" | ||
bundle config set --local without all | ||
|
||
# Install the gems listed in the Gemfile | ||
|
||
# bundle install --jobs 10 --retry 5 --path "$pkg_prefix" | ||
|
||
ls -l "${SRC_PATH}/components/gems/post-bundle-install.rb" | ||
|
||
ruby "${SRC_PATH}/components/gems/post-bundle-install.rb" | ||
) | ||
|
||
build_line "Building top-level 'chef' CMD wrapper" | ||
( cd "${SRC_PATH}/components/main-chef-wrapper" || exit_with "unable to enter main-chef-wrapper directory" 1 | ||
CGO_ENABLED=0 go build -o "$pkg_prefix/bin/chef" | ||
) | ||
|
||
build_line "Creating gem-version-manifest........" | ||
# ls -l "${SRC_PATH}/config/software" | ||
ruby "${SRC_PATH}/config/software/installed_gems_as_json.rb" | ||
} | ||
|
||
####################################################### | ||
# !!! IMPORTANT REMINDER !!! # | ||
####################################################### | ||
# Any changes to plan.sh related to installed gems # | ||
# (eg 'without' flags, additions/removals) must # | ||
# also be updated in omnibus/config/software/gems.rb # | ||
####################################################### | ||
|
||
# do_install() { | ||
# export ruby_bin_dir="$pkg_prefix/ruby-bin" | ||
|
||
# build_line "Creating bin directories" | ||
# mkdir -p "$ruby_bin_dir" | ||
# ( cd "${SRC_PATH}/components/gems" || exit_with "unable to enter components/gems directory" 1 | ||
# appbundle cookstyle "changelog,docs,profiling,rubocop_gems,development,debug" | ||
# wrap_ruby_bin "cookstyle" | ||
# appbundle "berkshelf" "changelog,debug,docs,development" | ||
# wrap_ruby_bin "bershelf" | ||
# ) | ||
# build_line "Installing 'chef-analyze' binary" | ||
# cp "$(pkg_path_for chef-analyze)/bin/chef-analyze" "$pkg_prefix/bin" | ||
# } | ||
do_install() { | ||
export ruby_bin_dir | ||
ruby_bin_dir="$pkg_prefix/ruby-bin" | ||
|
||
build_line "Creating bin directories" | ||
mkdir -p "$ruby_bin_dir" | ||
|
||
( cd "${SRC_PATH}/components/gems" || exit_with "unable to enter components/gems directory" 1 | ||
appbundle "chef-cli" "changelog,docs,debug" | ||
wrap_ruby_bin "chef-cli" | ||
|
||
appbundle "chef-bin" "docgen,chefstyle" | ||
wrap_ruby_bin "chef-client" | ||
wrap_ruby_bin "chef-solo" | ||
wrap_ruby_bin "chef-resource-inspector" | ||
wrap_ruby_bin "chef-shell" | ||
|
||
appbundle "knife" "development" | ||
wrap_ruby_bin "knife" | ||
|
||
appbundle "inspec-bin" "changelog,debug,docs,development" | ||
wrap_ruby_bin "inspec" | ||
|
||
appbundle ohai "changelog" | ||
wrap_ruby_bin "ohai" | ||
|
||
appbundle "chef_deprecations" "development,test" | ||
wrap_ruby_bin "foodcritic" | ||
|
||
appbundle "test-kitchen" "changelog,debug,docs,development" | ||
wrap_ruby_bin "kitchen" | ||
|
||
appbundle "berkshelf" "changelog,debug,docs,development" | ||
wrap_ruby_bin "berks" | ||
|
||
appbundle cookstyle "changelog,docs,profiling,rubocop_gems,development,debug" | ||
wrap_ruby_bin "cookstyle" | ||
|
||
appbundle "chef-vault" "changelog" | ||
wrap_ruby_bin "chef-vault" | ||
|
||
appbundle chef-apply "changelog,docs,debug" # really, chef-run | ||
wrap_ruby_bin "chef-run" | ||
|
||
appbundle mixlib-install "test,chefstyle,debug" | ||
wrap_ruby_bin "mixlib-install" | ||
|
||
appbundle fauxhai | ||
wrap_ruby_bin "fauxhai" | ||
|
||
appbundle chef-zero "pedant,development,debug" | ||
wrap_ruby_bin "chef-zero" | ||
) | ||
build_line "Installing binaries from Habitat packages" | ||
export GEM_HOME="$pkg_prefix" | ||
export GEM_PATH="${GEM_HOME}" | ||
|
||
if [ "$(readlink /usr/bin/env)" = "$(pkg_interpreter_for core/coreutils bin/env)" ]; then | ||
build_line "Removing the symlink created for '/usr/bin/env'" | ||
rm /usr/bin/env | ||
fi | ||
|
||
build_line "Installing 'chef-analyze' binary" | ||
cp "$(pkg_path_for chef-analyze)/bin/chef-analyze" "$pkg_prefix/bin" | ||
} | ||
|
||
appbundle() { | ||
|
@@ -166,43 +164,32 @@ appbundle() { | |
|
||
do_end() { | ||
do_default_end | ||
# Don't leave this behind - our bundle options will create this | ||
# owned by root, making it an annoying cleanup if you're also | ||
# doing a 'bundle install' outside of hab. | ||
rm -rf "${SRC_PATH}/components/gems/.bundle" | ||
} | ||
|
||
# Stubs | ||
do_strip() { | ||
return 0 | ||
} | ||
|
||
# Copied from https://github.com/habitat-sh/core-plans/blob/f84832de42b300a64f1b38c54d659c4f6d303c95/bundler/plan.sh#L32 | ||
wrap_ruby_bin() { | ||
local bin_basename | ||
local real_cmd | ||
local wrapper | ||
bin_basename="$1" | ||
real_cmd="$ruby_bin_dir/$bin_basename" | ||
wrapper="$pkg_prefix/bin/$bin_basename" | ||
local bin_basename="$1" | ||
local real_cmd="$ruby_bin_dir/$bin_basename" | ||
local wrapper="$pkg_prefix/bin/$bin_basename" | ||
|
||
build_line "Adding wrapper for '$bin_basename': $wrapper -> $real_cmd" | ||
cat <<EOF > "$wrapper" | ||
#!$(pkg_interpreter_for core/bash bin/sh) | ||
set -e | ||
if test -n "\$DEBUG"; then set -x; fi | ||
# Inform Chef-Workstation that is running from a habitat install | ||
export HAB_WS_PATH="$pkg_prefix" | ||
export HAB_WS_EMBEDDED_DIR="${ruby_bin_dir}:$(hab pkg path core/bundler):$(hab pkg path $ruby_pkg)/bin" | ||
|
||
export GEM_HOME="$pkg_prefix/ruby/$RUBY_ABI_VERSION" | ||
export GEM_PATH="$(pkg_path_for $ruby_pkg)/lib/ruby/gems/${RUBY_ABI_VERSION}:$(pkg_path_for core/bundler):${pkg_prefix}/ruby/${RUBY_ABI_VERSION}:${pkg_prefix}" | ||
export SSL_CERT_FILE=$(pkg_path_for core/cacerts)/ssl/cert.pem | ||
|
||
# Tell the appbundler bin not to reset GEM_HOME and GEM_PATH. Has nothing to do with RVM. | ||
export APPBUNDLER_ALLOW_RVM=true | ||
unset RUBYOPT GEMRC | ||
exec $(pkg_path_for $ruby_pkg)/bin/ruby ${real_cmd} \$@ | ||
exec $(pkg_path_for $ruby_pkg)/bin/ruby ${real_cmd} "\$@" | ||
EOF | ||
chmod -v 755 "$wrapper" | ||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would this need to change based on where the package is released after a ci pipeline is in place?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes we will be updating all origin name from ngupta26/ to chef/ origin once the pipeline are in place.