|
1 | 1 | require 'rake'
|
| 2 | +require 'rake/packagetask' |
2 | 3 | require 'rake/testtask'
|
3 | 4 | require 'rspec/core/rake_task'
|
4 | 5 | require 'rubygems'
|
| 6 | +require 'yaml' |
5 | 7 |
|
6 | 8 | # Run all units tests in test/
|
7 | 9 | desc "Run unit tests in test/"
|
@@ -51,7 +53,83 @@ def getAgentTrackingInfo
|
51 | 53 | end
|
52 | 54 | end
|
53 | 55 |
|
| 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 | + |
54 | 130 | # Clean up
|
55 | 131 | task :clean do
|
56 | 132 | rm_rf 'deployment'
|
| 133 | + rm_rf 'pkg' |
| 134 | + rm_rf 'vendor-thirdparty' |
57 | 135 | end
|
0 commit comments