Class: Buildizer::Packager
- Inherits:
-
Object
- Object
- Buildizer::Packager
- Defined in:
- lib/buildizer/packager.rb
Instance Attribute Summary collapse
-
#buildizer_conf_path ⇒ Object
readonly
Returns the value of attribute buildizer_conf_path.
-
#debug ⇒ Object
readonly
Returns the value of attribute debug.
-
#options_path ⇒ Object
readonly
Returns the value of attribute options_path.
-
#package_path ⇒ Object
readonly
Returns the value of attribute package_path.
-
#travis_path ⇒ Object
readonly
Returns the value of attribute travis_path.
-
#work_path ⇒ Object
readonly
Returns the value of attribute work_path.
Instance Method Summary collapse
- #after_prepare ⇒ Object
- #before_build ⇒ Object
- #before_prepare ⇒ Object
- #build! ⇒ Object
- #build_dep ⇒ Object
- #builder ⇒ Object
- #buildizer_conf ⇒ Object
- #buildizer_install_instructions(latest: nil) ⇒ Object
- #command(*args, do_raise: false, **kwargs) ⇒ Object
- #command!(*args, **kwargs) ⇒ Object
- #deinit! ⇒ Object
- #deploy! ⇒ Object
- #docker_cache ⇒ Object
- #docker_image ⇒ Object
- #docker_server ⇒ Object
- #enabled? ⇒ Boolean
- #git_hooks_path ⇒ Object
- #git_old_hooks_path ⇒ Object
- #git_old_precommit_path ⇒ Object
- #git_precommit_deinit! ⇒ Object
- #git_precommit_init! ⇒ Object
- #git_precommit_path ⇒ Object
- #init! ⇒ Object
-
#initialize(options: {}, debug: false) ⇒ Packager
constructor
A new instance of Packager.
- #initialized? ⇒ Boolean
- #maintainer ⇒ Object
- #options ⇒ Object
- #options_setup! ⇒ Object
- #package_cloud ⇒ Object
- #package_cloud_org ⇒ Object
- #package_cloud_repo ⇒ Object
- #package_name ⇒ Object
- #package_version ⇒ Object
- #package_version_tag ⇒ Object
- #package_version_tag_required_for_deploy? ⇒ Boolean
- #prepare ⇒ Object
- #prepare! ⇒ Object
- #targets ⇒ Object
- #travis ⇒ Object
- #travis_setup! ⇒ Object
- #update! ⇒ Object
- #verify! ⇒ Object
Constructor Details
#initialize(options: {}, debug: false) ⇒ Packager
Returns a new instance of Packager.
12 13 14 15 16 17 18 19 20 |
# File 'lib/buildizer/packager.rb', line 12 def initialize(options: {}, debug: false) @package_path = Pathname.new(ENV['BUILDIZER_PATH'] || '.'). @buildizer_conf_path = package_path.join('Buildizer') @options_path = package_path.join('.buildizer.yml') @travis_path = package_path.join('.travis.yml') @work_path = Pathname.new(ENV['BUILDIZER_WORK_PATH'] || '~/.buildizer'). @_options = @debug = ENV['BUILDIZER_DEBUG'].nil? ? debug : ENV['BUILDIZER_DEBUG'].to_s.on? end |
Instance Attribute Details
#buildizer_conf_path ⇒ Object (readonly)
Returns the value of attribute buildizer_conf_path.
6 7 8 |
# File 'lib/buildizer/packager.rb', line 6 def buildizer_conf_path @buildizer_conf_path end |
#debug ⇒ Object (readonly)
Returns the value of attribute debug.
10 11 12 |
# File 'lib/buildizer/packager.rb', line 10 def debug @debug end |
#options_path ⇒ Object (readonly)
Returns the value of attribute options_path.
7 8 9 |
# File 'lib/buildizer/packager.rb', line 7 def @options_path end |
#package_path ⇒ Object (readonly)
Returns the value of attribute package_path.
5 6 7 |
# File 'lib/buildizer/packager.rb', line 5 def package_path @package_path end |
#travis_path ⇒ Object (readonly)
Returns the value of attribute travis_path.
8 9 10 |
# File 'lib/buildizer/packager.rb', line 8 def travis_path @travis_path end |
#work_path ⇒ Object (readonly)
Returns the value of attribute work_path.
9 10 11 |
# File 'lib/buildizer/packager.rb', line 9 def work_path @work_path end |
Instance Method Details
#after_prepare ⇒ Object
179 180 181 |
# File 'lib/buildizer/packager.rb', line 179 def after_prepare Array(buildizer_conf['after_prepare']) end |
#before_build ⇒ Object
199 200 201 |
# File 'lib/buildizer/packager.rb', line 199 def before_build Array(buildizer_conf['before_build']) end |
#before_prepare ⇒ Object
175 176 177 |
# File 'lib/buildizer/packager.rb', line 175 def before_prepare Array(buildizer_conf['before_prepare']) end |
#build! ⇒ Object
52 53 54 |
# File 'lib/buildizer/packager.rb', line 52 def build! builder.build end |
#build_dep ⇒ Object
195 196 197 |
# File 'lib/buildizer/packager.rb', line 195 def build_dep Array(buildizer_conf['build_dep']).to_set end |
#builder ⇒ Object
244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/buildizer/packager.rb', line 244 def builder @builder ||= begin build_type = buildizer_conf['build_type'] raise Error, error: :input_error, message: "build_type is not defined" unless build_type klass = {fpm: Builder::Fpm, native: Builder::Native, patch: Builder::Patch}[build_type.to_s.to_sym] raise Error, error: :input_error, message: "unknown build_type '#{build_type}'" unless klass klass.new(self) end end |
#buildizer_conf ⇒ Object
64 65 66 |
# File 'lib/buildizer/packager.rb', line 64 def buildizer_conf @buildizer_conf ||= (YAML.load((buildizer_conf_path.read rescue "")) || {}) end |
#buildizer_install_instructions(latest: nil) ⇒ Object
256 257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/buildizer/packager.rb', line 256 def buildizer_install_instructions(latest: nil) if latest ['git clone https://github.com/flant/buildizer ~/buildizer', 'echo "export BUNDLE_GEMFILE=~/buildizer/Gemfile" | tee -a ~/.bashrc', 'export BUNDLE_GEMFILE=~/buildizer/Gemfile', 'gem install bundler', 'bundle install', ] else 'gem install buildizer' end end |
#command(*args, do_raise: false, **kwargs) ⇒ Object
269 270 271 272 273 274 275 |
# File 'lib/buildizer/packager.rb', line 269 def command(*args, do_raise: false, **kwargs) Shellfold.run(*args, live_log: debug, **kwargs).tap do |cmd| if not cmd.status.success? and do_raise raise Error.new(error: :error, message: "external command error") end end end |
#command!(*args, **kwargs) ⇒ Object
277 278 279 |
# File 'lib/buildizer/packager.rb', line 277 def command!(*args, **kwargs) command(*args, do_raise: true, log_failure: true, **kwargs) end |
#deinit! ⇒ Object
38 39 40 41 42 |
# File 'lib/buildizer/packager.rb', line 38 def deinit! raise Error, error: :logical_error, message: "not initialized" unless initialized? .delete git_precommit_deinit! end |
#deploy! ⇒ Object
56 57 58 |
# File 'lib/buildizer/packager.rb', line 56 def deploy! builder.deploy end |
#docker_cache ⇒ Object
231 232 233 234 235 236 237 238 |
# File 'lib/buildizer/packager.rb', line 231 def docker_cache return unless org = ENV['BUILDIZER_DOCKER_CACHE'] {username: ENV['BUILDIZER_DOCKER_CACHE_USERNAME'], password: ENV['BUILDIZER_DOCKER_CACHE_PASSWORD'], email: ENV['BUILDIZER_DOCKER_CACHE_EMAIL'], server: ENV['BUILDIZER_DOCKER_CACHE_SERVER'], org: org} end |
#docker_image ⇒ Object
207 208 209 |
# File 'lib/buildizer/packager.rb', line 207 def docker_image buildizer_conf['image'] end |
#docker_server ⇒ Object
203 204 205 |
# File 'lib/buildizer/packager.rb', line 203 def docker_server buildizer_conf['docker_server'] end |
#enabled? ⇒ Boolean
26 27 28 |
# File 'lib/buildizer/packager.rb', line 26 def enabled? not (ENV['TRAVIS_TAG'] || ENV['CI_BUILD_TAG']).empty? end |
#git_hooks_path ⇒ Object
116 117 118 |
# File 'lib/buildizer/packager.rb', line 116 def git_hooks_path package_path.join('.git').join('hooks') end |
#git_old_hooks_path ⇒ Object
120 121 122 |
# File 'lib/buildizer/packager.rb', line 120 def git_old_hooks_path git_hooks_path.join('old-hooks') end |
#git_old_precommit_path ⇒ Object
128 129 130 |
# File 'lib/buildizer/packager.rb', line 128 def git_old_precommit_path git_old_hooks_path.join('pre-commit') end |
#git_precommit_deinit! ⇒ Object
152 153 154 155 156 |
# File 'lib/buildizer/packager.rb', line 152 def git_precommit_deinit! git_precommit_path.delete if git_precommit_path.exist? FileUtils.cp git_old_precommit_path, git_precommit_path if git_old_precommit_path.exist? git_old_hooks_path.rmtree if git_old_hooks_path.exist? end |
#git_precommit_init! ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/buildizer/packager.rb', line 132 def git_precommit_init! if git_precommit_path.exist? raise(Error, error: :logical_error, message: [ "unable to backup existing precommit script: ", "file already exists: #{git_old_precommit_path}", ].join) if git_old_precommit_path.exist? git_old_hooks_path.mkpath FileUtils.cp git_precommit_path, git_old_precommit_path end git_precommit_path.write <<-EOF #!/bin/bash buildizer update git add -v .travis.yml EOF git_precommit_path.chmod 0755 end |
#git_precommit_path ⇒ Object
124 125 126 |
# File 'lib/buildizer/packager.rb', line 124 def git_precommit_path git_hooks_path.join('pre-commit') end |
#init! ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/buildizer/packager.rb', line 30 def init! raise Error, error: :logical_error, message: "already initialized" if initialized? git_precommit_init! travis_setup! end |
#initialized? ⇒ Boolean
22 23 24 |
# File 'lib/buildizer/packager.rb', line 22 def initialized? .exist? end |
#maintainer ⇒ Object
240 241 242 |
# File 'lib/buildizer/packager.rb', line 240 def maintainer buildizer_conf['maintainer'] end |
#options ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/buildizer/packager.rb', line 68 def @options ||= (YAML.load(.read) rescue {}).tap do |res| @_options.each do |k, v| res[k] = v unless v.nil? end end end |
#options_setup! ⇒ Object
76 77 78 79 |
# File 'lib/buildizer/packager.rb', line 76 def .write YAML.dump() @options = nil end |
#package_cloud ⇒ Object
222 223 224 225 226 227 228 229 |
# File 'lib/buildizer/packager.rb', line 222 def package_cloud tokens = package_cloud_org package_cloud_repo.map do |repo| org = repo.split('/').first token = tokens[org] {org: org, repo: repo, token: token} end end |
#package_cloud_org ⇒ Object
215 216 217 218 219 220 |
# File 'lib/buildizer/packager.rb', line 215 def package_cloud_org default_token = ENV['PACKAGECLOUD_TOKEN'] package_cloud_repo.map {|repo| repo.split('/').first}.uniq.map do |org| [org, ENV["PACKAGECLOUD_TOKEN_#{org.upcase}"] || default_token] end.to_h end |
#package_cloud_repo ⇒ Object
211 212 213 |
# File 'lib/buildizer/packager.rb', line 211 def package_cloud_repo ENV['PACKAGECLOUD'].to_s.split(',') end |
#package_name ⇒ Object
158 159 160 |
# File 'lib/buildizer/packager.rb', line 158 def package_name buildizer_conf['package_name'] end |
#package_version ⇒ Object
162 163 164 |
# File 'lib/buildizer/packager.rb', line 162 def package_version buildizer_conf['package_version'] end |
#package_version_tag ⇒ Object
170 171 172 173 |
# File 'lib/buildizer/packager.rb', line 170 def package_version_tag res = ENV['TRAVIS_TAG'] || ENV['CI_BUILD_TAG'] if res.nil? then res elsif res.empty? then nil else res end end |
#package_version_tag_required_for_deploy? ⇒ Boolean
166 167 168 |
# File 'lib/buildizer/packager.rb', line 166 def package_version_tag_required_for_deploy? ENV['BUILDIZER_REQUIRE_TAG'].to_s.on? end |
#prepare ⇒ Object
191 192 193 |
# File 'lib/buildizer/packager.rb', line 191 def prepare Array(buildizer_conf['prepare']) end |
#prepare! ⇒ Object
48 49 50 |
# File 'lib/buildizer/packager.rb', line 48 def prepare! builder.prepare end |
#targets ⇒ Object
183 184 185 186 187 188 189 |
# File 'lib/buildizer/packager.rb', line 183 def targets targets = Array(buildizer_conf['target']) restrict_targets = ENV['BUILDIZER_TARGET'] restrict_targets = restrict_targets.split(',').map(&:strip) if restrict_targets targets = targets & restrict_targets if restrict_targets targets end |
#travis ⇒ Object
81 82 83 84 85 |
# File 'lib/buildizer/packager.rb', line 81 def travis @travis ||= (travis_path.exist? ? YAML.load(travis_path.read) : {}) rescue Psych::Exception => err raise Error, error: :input_error, message: "bad travis config file #{file}: #{err.}" end |
#travis_setup! ⇒ Object
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 |
# File 'lib/buildizer/packager.rb', line 87 def travis_setup! install = [ 'sudo apt-get update', 'sudo apt-get install -y apt-transport-https ca-certificates', 'sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D', 'echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list', 'sudo apt-get update', 'sudo apt-get -o dpkg::options::="--force-confnew" install -y docker-engine=1.9.1-0~trusty', # FIXME [https://github.com/docker/docker/issues/20316] 'echo "docker-engine hold" | sudo dpkg --set-selections', ] install.push(*Array(buildizer_install_instructions(latest: ['latest']))) env = targets.map {|t| "BUILDIZER_TARGET=#{t}"} travis_path.write YAML.dump(travis.merge( 'dist' => 'trusty', 'sudo' => 'required', 'cache' => 'apt', 'language' => 'ruby', 'rvm' => '2.2.1', 'install' => install, 'before_script' => 'buildizer prepare', 'script' => 'buildizer build', 'env' => env, 'after_success' => 'buildizer deploy', )) @travis = nil end |
#update! ⇒ Object
44 45 46 |
# File 'lib/buildizer/packager.rb', line 44 def update! travis_setup! end |
#verify! ⇒ Object
60 61 62 |
# File 'lib/buildizer/packager.rb', line 60 def verify! builder.verify end |