1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#
# Author:: Adam Jacob (<adam@chef.io>)
# Author:: Daniel DeLeo (<dan@chef.io>)
# Copyright:: Copyright, Chef Software Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# we need this to resolve files required by lib/chef/dist
$LOAD_PATH.unshift(File.expand_path("chef-config/lib", __dir__))
begin
require_relative "tasks/rspec"
require_relative "tasks/dependencies"
require_relative "tasks/docs"
require_relative "tasks/spellcheck"
require_relative "tasks/bkrun" unless ENV.key?('CI')
require_relative "chef-utils/lib/chef-utils/dist" unless defined?(ChefUtils::Dist)
rescue LoadError => e
puts "Skipping missing rake dep: #{e}"
end
require "bundler/gem_helper"
ENV["CHEF_LICENSE"] = "accept-no-persist"
namespace :pre_install do
desc "Runs 'rake install' for the gems that live in subdirectories in this repo"
task :install_gems_from_dirs do
%w{chef-utils chef-config}.each do |gem|
path = ::File.join(::File.dirname(__FILE__), gem)
Dir.chdir(path) do
sh("rake install")
end
end
end
desc "Renders the powershell extensions with distro flavoring"
task :render_powershell_extension do
require "erb"
template_file = ::File.join(::File.dirname(__FILE__), "distro", "templates", "powershell", "chef", "chef.psm1.erb")
psm1_path = ::File.join(::File.dirname(__FILE__), "distro", "powershell", "chef")
FileUtils.mkdir_p psm1_path
template = ERB.new(IO.read(template_file))
chef_psm1 = template.result
File.open(::File.join(psm1_path, "chef.psm1"), "w") { |f| f.write(chef_psm1) }
end
task all: ["pre_install:install_gems_from_dirs", "pre_install:render_powershell_extension"]
end
# hack in all the preinstall tasks to occur before the traditional install task
task install: "pre_install:all"
# make sure we build the correct gemspec on windows
gemspec = Gem.win_platform? ? "chef-universal-mingw32" : "chef"
Bundler::GemHelper.install_tasks name: gemspec
# this gets appended to the normal bundler install helper
task :install do
chef_bin_path = ::File.join(::File.dirname(__FILE__), "chef-bin")
Dir.chdir(chef_bin_path) do
sh("rake install:force")
end
end
namespace :install do
task local: "pre_install:all"
task :local do
chef_bin_path = ::File.join(::File.dirname(__FILE__), "chef-bin")
Dir.chdir(chef_bin_path) do
sh("rake install:local")
end
end
end
task :pedant, :chef_zero_spec
task :build_eventlog do
Dir.chdir "ext/win32-eventlog/" do
system "rake build"
end
end
task :register_eventlog do
Dir.chdir "ext/win32-eventlog/" do
system "rake register"
end
end
desc "Copies powershell_exec related binaries from the latest built Habitat Packages"
task :update_chef_exec_dll do
raise "This task must be run on Windows since we are installing a Windows targeted package!" unless Gem.win_platform?
require "mkmf"
raise "Unable to locate Habitat cli. Please install Habitat cli before invoking this task!" unless find_executable "hab"
sh("hab pkg install chef/chef-powershell-shim")
sh("hab pkg install chef/chef-powershell-shim-x86")
x64 = `hab pkg path chef/chef-powershell-shim`.chomp.tr('\\', "/")
x86 = `hab pkg path chef/chef-powershell-shim-x86`.chomp.tr('\\', "/")
FileUtils.rm_rf(Dir["distro/ruby_bin_folder/AMD64/*"])
FileUtils.rm_rf(Dir["distro/ruby_bin_folder/x86/*"])
puts "Copying #{x64}/bin/* to distro/ruby_bin_folder/AMD64"
FileUtils.cp_r(Dir["#{x64}/bin/*"], "distro/ruby_bin_folder/AMD64")
puts "Copying #{x86}/bin/* to distro/ruby_bin_folder/x86"
FileUtils.cp_r(Dir["#{x86}/bin/*"], "distro/ruby_bin_folder/x86")
end
begin
require "chefstyle"
require "rubocop/rake_task"
RuboCop::RakeTask.new(:style) do |task|
task.options += ["--display-cop-names", "--no-color"]
end
rescue LoadError
puts "chefstyle/rubocop is not available. bundle install first to make sure all dependencies are installed."
end
|