class ChefConfig::PackageTask
def chef_root_path
def chef_root_path module_name == "Chef" ? root_path : File.dirname(root_path) end
def class_or_module
def class_or_module generate_version_class ? "class" : "module" end
def component_full_paths
def component_full_paths component_paths.map { |path| File.expand_path(path, root_path) } end
def define
def define raise "Need to provide package root and module name" if root_path.nil? || module_name.nil? desc "Build Gems of component dependencies" task :package_components do component_full_paths.each do |component_path| Dir.chdir(component_path) do sh "rake package" end end end task :package => :package_components desc "Build and install component dependencies" task :install_components => :package_components do component_full_paths.each do |component_path| Dir.chdir(component_path) do sh "rake install" end end end task :install => :install_components desc "Clean up builds of component dependencies" task :clobber_component_packages do component_full_paths.each do |component_path| Dir.chdir(component_path) do sh "rake clobber_package" end end end task :clobber_package => :clobber_component_packages desc "Update the version number for component dependencies" task :update_components_versions do component_full_paths.each do |component_path| Dir.chdir(component_path) do sh "rake version" end end end desc 'Regenerate lib/#{@module_path}/version.rb from VERSION file' task :version => :update_components_versions do contents = <<-VERSION_RB pyright:: Copyright 2010-2016, Chef Software, Inc. cense:: Apache License, Version 2.0 censed under the Apache License, Version 2.0 (the "License"); u may not use this file except in compliance with the License. u may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 less required by applicable law or agreed to in writing, software stributed under the License is distributed on an "AS IS" BASIS, THOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. e the License for the specific language governing permissions and mitations under the License. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TE: This file is generated by running `rake version` in the top level of is repo. Do not edit this manually. Edit the VERSION file and run the rake sk instead. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ass_or_module} #{module_name} module_name.upcase}_ROOT = File.dirname(File.expand_path(File.dirname(__FILE__))) RSION = "#{version}" TE: the Chef::Version class is defined in version_class.rb TE: DO NOT Use the Chef::Version class on #{module_name}::VERSIONs. The Chef::Version class is for _cookbooks_ only, and cannot handle pre-release versions like "10.14.0.rc.2". Please use Rubygem's Gem::Version class instead. VERSION_RB IO.write(version_rb_path, contents) end Dir[File.expand_path("*gemspec", root_path)].reverse_each do |gemspec_path| gemspec = eval(IO.read(gemspec_path)) Gem::PackageTask.new(gemspec) do |task| task.package_dir = full_package_dir end end desc "Build and install a #{module_path} gem" task :install => [:package] do with_clean_env do full_module_path = File.join(full_package_dir, module_path) sh %{gem install #{full_module_path}-#{version}.gem --no-rdoc --no-ri} end end task :uninstall do sh %{gem uninstall #{module_path} -x -v #{version} } end desc "Build it, tag it and ship it" task :ship => [:clobber_package, :gem] do sh("git tag #{version}") sh("git push #{git_remote} --tags") Dir[File.expand_path("*.gem", full_package_dir)].reverse_each do |built_gem| sh("gem push #{built_gem}") end end end
def full_package_dir
def full_package_dir File.expand_path(package_dir, root_path) end
def init(root_path, module_name)
def init(root_path, module_name) @root_path = root_path @module_name = module_name @component_paths = [] @module_path = nil @package_dir = "pkg" @git_remote = "origin" @generate_version_class = false end
def initialize(root_path = nil, module_name = nil)
def initialize(root_path = nil, module_name = nil) init(root_path, module_name) yield self if block_given? define unless root_path.nil? || module_name.nil? end
def module_path
def module_path @module_path || module_name.downcase end
def version
def version IO.read(File.join(chef_root_path, "VERSION")).strip end
def version_rb_path
def version_rb_path File.expand_path("lib/#{module_path}/version.rb", root_path) end
def with_clean_env(&block)
def with_clean_env(&block) if defined?(Bundler) Bundler.with_clean_env(&block) else yield end end