Skip to content

Commit 3c39d54

Browse files
authored
Merge pull request #298 from aws/rake-packaging
Adds Rakefile task to package
2 parents 93c0149 + 29cab55 commit 3c39d54

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ deployment/
1111
.idea/
1212
.DS_STORE
1313
*.iml
14+
pkg/
15+
vendor-thirdparty/
16+
.bundle/

Rakefile

+78
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
require 'rake'
2+
require 'rake/packagetask'
23
require 'rake/testtask'
34
require 'rspec/core/rake_task'
45
require 'rubygems'
6+
require 'yaml'
57

68
# Run all units tests in test/
79
desc "Run unit tests in test/"
@@ -51,7 +53,83 @@ def getAgentTrackingInfo
5153
end
5254
end
5355

56+
# Packaging into a tar
57+
# we need GNU tar to avoid warning when extracting the content on linux systems
58+
def tar
59+
_tar = `which tar`.chomp
60+
# we must use GNU tar
61+
unless `#{_tar} --version`.include?('GNU')
62+
# probably on a Mac
63+
_tar = `which gtar`.chomp
64+
raise 'The GNU tar utility was not found in this system. Please install GNU tar before trying to run this task.' if _tar.empty?
65+
end
66+
_tar
67+
end
68+
69+
BIN = "bin"
70+
LIB = "lib"
71+
CERTS = "certs"
72+
CONF = "conf"
73+
VENDOR = "vendor"
74+
VERSION_FILE = ".version"
75+
CONFIG_FILE = "#{CONF}/codedeployagent.yml"
76+
FEATURES = "features"
77+
78+
config = YAML.load(File.read(CONFIG_FILE))
79+
80+
def rubygem_folder
81+
ruby_version = RUBY_VERSION
82+
ruby_version_array = ruby_version.split(".")
83+
ruby_version_array[-1] = "0" # 2.6.x will become 2.6.0
84+
ruby_version_array.join(".")
85+
end
86+
87+
pkg = "#{Dir.pwd}/pkg" ## Package where the tar will be generated.
88+
89+
desc "Package files into a tar"
90+
task :package do
91+
# Clean up existing package
92+
FileUtils.rm_rf(pkg)
93+
94+
# Set up directories
95+
bundle_dir = "#{pkg}/#{config[:program_name]}"
96+
FileUtils.mkdir_p bundle_dir
97+
FileUtils.mkdir_p "#{bundle_dir}/opt/#{config[:program_name]}/"
98+
FileUtils.mkdir_p "#{bundle_dir}/opt/#{config[:program_name]}/bin"
99+
FileUtils.mkdir_p "#{bundle_dir}/etc/#{config[:program_name]}/conf"
100+
FileUtils.mkdir_p "#{bundle_dir}/etc/init.d/"
101+
102+
# Copy files
103+
sh "cp -rf #{BIN} #{bundle_dir}/opt/#{config[:program_name]}/"
104+
sh "cp -rf #{LIB} #{bundle_dir}/opt/#{config[:program_name]}/"
105+
sh "cp -f #{CONF}/codedeployagent.yml #{bundle_dir}/etc/#{config[:program_name]}/conf/"
106+
sh "cp -rf #{CERTS} #{bundle_dir}/opt/#{config[:program_name]}/"
107+
sh "cp -rf #{VENDOR} #{bundle_dir}/opt/#{config[:program_name]}/"
108+
sh "cp -rf init.d #{bundle_dir}/etc/"
109+
sh "cp -f LICENSE #{bundle_dir}/opt/#{config[:program_name]}/"
110+
111+
# Vendor folder needs an extra effort, we also need to package the gems installed
112+
gem_lib_folder = "vendor-thirdparty"
113+
114+
rubygemlibs = "#{gem_lib_folder}/ruby/#{rubygem_folder}"
115+
Dir.glob("#{rubygemlibs}/gems/*") do |path|
116+
sh "cp -r #{path} #{bundle_dir}/opt/#{config[:program_name]}/#{VENDOR}/gems"
117+
end
118+
Dir.glob("#{rubygemlibs}/specifications/*") do |path|
119+
sh "cp -r #{path} #{bundle_dir}/opt/#{config[:program_name]}/#{VENDOR}/specifications"
120+
end
121+
122+
sh "sed '/group :test/,$d' Gemfile > #{bundle_dir}/opt/#{config[:program_name]}/Gemfile"
123+
sh "sed '/add_development_dependency/d' codedeploy_agent.gemspec > #{bundle_dir}/opt/#{config[:program_name]}/codedeploy_agent.gemspec"
124+
125+
# Build tar
126+
sh "cd #{bundle_dir} && COPYFILE_DISABLE=true #{tar} --owner=0 --group=0 -cf #{pkg}/#{config[:program_name]}.tar *"
127+
FileUtils.rm_rf("#{bundle_dir}")
128+
end
129+
54130
# Clean up
55131
task :clean do
56132
rm_rf 'deployment'
133+
rm_rf 'pkg'
134+
rm_rf 'vendor-thirdparty'
57135
end

0 commit comments

Comments
 (0)