Use the built-in git resource from Chef instead. poise/application does not work on modern Chef.
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
include Chef::Rbenv::MacOs
 | 
						|
 | 
						|
# for compatibility with earlier incarnations
 | 
						|
# of this resource
 | 
						|
#
 | 
						|
provides :ruby_build_ruby
 | 
						|
 | 
						|
property :definition, String,
 | 
						|
  name_property: true,
 | 
						|
  description: 'Version of Ruby to install'
 | 
						|
 | 
						|
property :prefix_path, String,
 | 
						|
  default: '/usr/local/ruby',
 | 
						|
  description: 'Location to install Ruby'
 | 
						|
 | 
						|
property :verbose, [true, false],
 | 
						|
  default: false,
 | 
						|
  description: 'print compilation status to stdout'
 | 
						|
 | 
						|
# NOTE: adding the Ruby version to the installation prefix
 | 
						|
# by default is unexpected and will likely lead to user
 | 
						|
# problems. Now defaults to false.
 | 
						|
#
 | 
						|
property :version_prefix, [true, false],
 | 
						|
  default: false,
 | 
						|
  description: 'add Ruby version to the installation prefix'
 | 
						|
 | 
						|
property :patch, [String, nil],
 | 
						|
  description: 'path to a Ruby patch file for ruby-build to use'
 | 
						|
 | 
						|
property :environment, Hash,
 | 
						|
  default: {},
 | 
						|
  description: 'Environment hash to pass to the ruby-build install process'
 | 
						|
 | 
						|
property :user, String,
 | 
						|
  description: 'User to install as'
 | 
						|
 | 
						|
property :group, String,
 | 
						|
  description: 'Group to install as'
 | 
						|
 | 
						|
unified_mode true if respond_to? :unified_mode
 | 
						|
 | 
						|
action :install do
 | 
						|
  Chef::Log.fatal('JRuby is not a supported definition') \
 | 
						|
    if new_resource.definition.include? 'jruby'
 | 
						|
 | 
						|
  if platform_family?('mac_os_x') && Chef::VERSION < '16'
 | 
						|
    Array(package_deps).each do |pkg|
 | 
						|
      package pkg
 | 
						|
    end
 | 
						|
  else
 | 
						|
    package package_deps
 | 
						|
  end
 | 
						|
 | 
						|
  installation_path = if new_resource.version_prefix
 | 
						|
                        ::File.join(new_resource.prefix_path, new_resource.definition)
 | 
						|
                      else
 | 
						|
                        new_resource.prefix_path
 | 
						|
                      end
 | 
						|
 | 
						|
  env = if platform_family?('mac_os_x')
 | 
						|
          extra_env = { 'RUBY_CONFIGURE_OPTS' => "--with-openssl-dir=#{openssl_prefix}" }
 | 
						|
          new_resource.environment.merge extra_env
 | 
						|
        else
 | 
						|
          new_resource.environment
 | 
						|
        end
 | 
						|
 | 
						|
  ruby_build_cmd = [
 | 
						|
    '/usr/local/bin/ruby-build',
 | 
						|
    new_resource.definition,
 | 
						|
    installation_path,
 | 
						|
  ].join(' ')
 | 
						|
 | 
						|
  ruby_build_cmd += ' --verbose' if new_resource.verbose
 | 
						|
 | 
						|
  if new_resource.patch
 | 
						|
    patch_path = "#{Chef::Config[:file_cache_path]}/#{new_resource.patch}"
 | 
						|
    ruby_build_cmd += %( --patch < "#{patch_path}" )
 | 
						|
 | 
						|
    cookbook_file patch_path do
 | 
						|
      source new_resource.patch
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  bash "ruby-build #{new_resource.definition}" do
 | 
						|
    code ruby_build_cmd
 | 
						|
    environment env
 | 
						|
    user new_resource.user
 | 
						|
    group new_resource.group
 | 
						|
    not_if do
 | 
						|
      ::Dir.exist?("#{installation_path}/bin") &&
 | 
						|
        new_resource.definition == `#{installation_path}/bin/ruby -e 'print RUBY_VERSION'`
 | 
						|
    end
 | 
						|
    live_stream true
 | 
						|
    action :run
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
action_class do
 | 
						|
  include Chef::Rbenv::PackageDeps
 | 
						|
  include Chef::Rbenv::MacOs
 | 
						|
end
 |