buildizer 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,48 +1,39 @@
1
1
  module Buildizer
2
2
  class Packager
3
+ autoload :MiscMod, 'buildizer/packager/misc_mod'
4
+ autoload :ProjectSettingsMod, 'buildizer/packager/project_settings_mod'
5
+ autoload :UserSettingsMod, 'buildizer/packager/user_settings_mod'
6
+ autoload :CiMod, 'buildizer/packager/ci_mod'
7
+ autoload :BuildizerConfMod, 'buildizer/packager/buildizer_conf_mod'
8
+ autoload :PackageVersionTagMod, 'buildizer/packager/package_version_tag_mod'
9
+ autoload :GitMod, 'buildizer/packager/git_mod'
10
+ autoload :OvercommitMod, 'buildizer/packager/overcommit_mod'
11
+ autoload :PackageCloudMod, 'buildizer/packager/package_cloud_mod'
12
+ autoload :DockerCacheMod, 'buildizer/packager/docker_cache_mod'
13
+
3
14
  using Refine
4
15
 
16
+ include MiscMod
17
+ include ProjectSettingsMod
18
+ include UserSettingsMod
19
+ include CiMod
20
+ include BuildizerConfMod
21
+ include PackageVersionTagMod
22
+ include GitMod
23
+ include OvercommitMod
24
+ include PackageCloudMod
25
+ include DockerCacheMod
26
+
27
+ attr_reader :cli
5
28
  attr_reader :package_path
6
- attr_reader :buildizer_conf_path
7
- attr_reader :options_path
8
- attr_reader :travis_path
9
29
  attr_reader :work_path
10
30
  attr_reader :debug
11
31
 
12
- def initialize(options: {}, debug: false)
32
+ def initialize(cli)
33
+ @cli = cli
13
34
  @package_path = Pathname.new(ENV['BUILDIZER_PATH'] || '.').expand_path
14
- @buildizer_conf_path = package_path.join('Buildizer')
15
- @options_path = package_path.join('.buildizer.yml')
16
- @travis_path = package_path.join('.travis.yml')
17
35
  @work_path = Pathname.new(ENV['BUILDIZER_WORK_PATH'] || '~/.buildizer').expand_path
18
- @_options = options
19
- @debug = ENV['BUILDIZER_DEBUG'].nil? ? debug : ENV['BUILDIZER_DEBUG'].to_s.on?
20
- end
21
-
22
- def initialized?
23
- options_path.exist?
24
- end
25
-
26
- def enabled?
27
- not (ENV['TRAVIS_TAG'] || ENV['CI_BUILD_TAG']).empty?
28
- end
29
-
30
- def init!
31
- raise Error, error: :logical_error, message: "already initialized" if initialized?
32
-
33
- git_precommit_init!
34
- options_setup!
35
- travis_setup!
36
- end
37
-
38
- def deinit!
39
- raise Error, error: :logical_error, message: "not initialized" unless initialized?
40
- options_path.delete
41
- git_precommit_deinit!
42
- end
43
-
44
- def update!
45
- travis_setup!
36
+ @debug = ENV['BUILDIZER_DEBUG'].nil? ? cli.options['debug'] : ENV['BUILDIZER_DEBUG'].to_s.on?
46
37
  end
47
38
 
48
39
  def prepare!
@@ -61,58 +52,6 @@ module Buildizer
61
52
  builder.verify
62
53
  end
63
54
 
64
- def buildizer_conf
65
- @buildizer_conf ||= (YAML.load((buildizer_conf_path.read rescue "")) || {})
66
- end
67
-
68
- def options
69
- @options ||= (YAML.load(options_path.read) rescue {}).tap do |res|
70
- @_options.each do |k, v|
71
- res[k] = v unless v.nil?
72
- end
73
- end
74
- end
75
-
76
- def options_setup!
77
- options_path.write YAML.dump(options)
78
- @options = nil
79
- end
80
-
81
- def travis
82
- @travis ||= (travis_path.exist? ? YAML.load(travis_path.read) : {})
83
- rescue Psych::Exception => err
84
- raise Error, error: :input_error, message: "bad travis config file #{file}: #{err.message}"
85
- end
86
-
87
- def travis_setup!
88
- install = [
89
- 'sudo apt-get update',
90
- 'sudo apt-get install -y apt-transport-https ca-certificates',
91
- 'sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D',
92
- 'echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list',
93
- 'sudo apt-get update',
94
- '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]
95
- 'echo "docker-engine hold" | sudo dpkg --set-selections',
96
- ]
97
- install.push(*Array(buildizer_install_instructions(latest: options['latest'])))
98
-
99
- env = targets.map {|t| "BUILDIZER_TARGET=#{t}"}
100
-
101
- travis_path.write YAML.dump(travis.merge(
102
- 'dist' => 'trusty',
103
- 'sudo' => 'required',
104
- 'cache' => 'apt',
105
- 'language' => 'ruby',
106
- 'rvm' => '2.2.1',
107
- 'install' => install,
108
- 'before_script' => 'buildizer prepare',
109
- 'script' => 'buildizer build',
110
- 'env' => env,
111
- 'after_success' => 'buildizer deploy',
112
- ))
113
- @travis = nil
114
- end
115
-
116
55
  def git_hooks_path
117
56
  package_path.join('.git').join('hooks')
118
57
  end
@@ -129,122 +68,10 @@ module Buildizer
129
68
  git_old_hooks_path.join('pre-commit')
130
69
  end
131
70
 
132
- def git_precommit_init!
133
- if git_precommit_path.exist?
134
- raise(Error,
135
- error: :logical_error,
136
- message: [
137
- "unable to backup existing precommit script: ",
138
- "file already exists: #{git_old_precommit_path}",
139
- ].join) if git_old_precommit_path.exist?
140
- git_old_hooks_path.mkpath
141
- FileUtils.cp git_precommit_path, git_old_precommit_path
142
- end
143
-
144
- git_precommit_path.write <<-EOF
145
- #!/bin/bash
146
- buildizer update
147
- git add -v .travis.yml
148
- EOF
149
- git_precommit_path.chmod 0755
150
- end
151
-
152
- def git_precommit_deinit!
153
- git_precommit_path.delete if git_precommit_path.exist?
154
- FileUtils.cp git_old_precommit_path, git_precommit_path if git_old_precommit_path.exist?
155
- git_old_hooks_path.rmtree if git_old_hooks_path.exist?
156
- end
157
-
158
- def package_name
159
- buildizer_conf['package_name']
160
- end
161
-
162
- def package_version
163
- buildizer_conf['package_version']
164
- end
165
-
166
- def package_version_tag_required_for_deploy?
167
- ENV['BUILDIZER_REQUIRE_TAG'].to_s.on?
168
- end
169
-
170
- def package_version_tag
171
- res = ENV['TRAVIS_TAG'] || ENV['CI_BUILD_TAG']
172
- if res.nil? then res elsif res.empty? then nil else res end
173
- end
174
-
175
- def before_prepare
176
- Array(buildizer_conf['before_prepare'])
177
- end
178
-
179
- def after_prepare
180
- Array(buildizer_conf['after_prepare'])
181
- end
182
-
183
- def targets
184
- targets = Array(buildizer_conf['target'])
185
- restrict_targets = ENV['BUILDIZER_TARGET']
186
- restrict_targets = restrict_targets.split(',').map(&:strip) if restrict_targets
187
- targets = targets & restrict_targets if restrict_targets
188
- targets
189
- end
190
-
191
- def prepare
192
- Array(buildizer_conf['prepare'])
193
- end
194
-
195
- def build_dep
196
- Array(buildizer_conf['build_dep']).to_set
197
- end
198
-
199
- def before_build
200
- Array(buildizer_conf['before_build'])
201
- end
202
-
203
- def docker_server
204
- buildizer_conf['docker_server']
205
- end
206
-
207
- def docker_image
208
- buildizer_conf['image']
209
- end
210
-
211
- def package_cloud_repo
212
- ENV['PACKAGECLOUD'].to_s.split(',')
213
- end
214
-
215
- def package_cloud_org
216
- default_token = ENV['PACKAGECLOUD_TOKEN']
217
- package_cloud_repo.map {|repo| repo.split('/').first}.uniq.map do |org|
218
- [org, ENV["PACKAGECLOUD_TOKEN_#{org.upcase}"] || default_token]
219
- end.to_h
220
- end
221
-
222
- def package_cloud
223
- tokens = package_cloud_org
224
- package_cloud_repo.map do |repo|
225
- org = repo.split('/').first
226
- token = tokens[org]
227
- {org: org, repo: repo, token: token}
228
- end
229
- end
230
-
231
- def docker_cache
232
- return unless org = ENV['BUILDIZER_DOCKER_CACHE']
233
- {username: ENV['BUILDIZER_DOCKER_CACHE_USERNAME'],
234
- password: ENV['BUILDIZER_DOCKER_CACHE_PASSWORD'],
235
- email: ENV['BUILDIZER_DOCKER_CACHE_EMAIL'],
236
- server: ENV['BUILDIZER_DOCKER_CACHE_SERVER'],
237
- org: org}
238
- end
239
-
240
- def maintainer
241
- buildizer_conf['maintainer']
242
- end
243
-
244
71
  def builder
245
72
  @builder ||= begin
246
73
  build_type = buildizer_conf['build_type']
247
- raise Error, error: :input_error, message: "build_type is not defined" unless build_type
74
+ raise Error, error: :input_error, message: "Buildizer build_type is not defined" unless build_type
248
75
  klass = {fpm: Builder::Fpm,
249
76
  native: Builder::Native,
250
77
  patch: Builder::Patch}[build_type.to_s.to_sym]
@@ -252,30 +79,5 @@ git add -v .travis.yml
252
79
  klass.new(self)
253
80
  end
254
81
  end
255
-
256
- def buildizer_install_instructions(latest: nil)
257
- if latest
258
- ['git clone https://github.com/flant/buildizer ~/buildizer',
259
- 'echo "export BUNDLE_GEMFILE=~/buildizer/Gemfile" | tee -a ~/.bashrc',
260
- 'export BUNDLE_GEMFILE=~/buildizer/Gemfile',
261
- 'gem install bundler',
262
- 'bundle install',
263
- ]
264
- else
265
- 'gem install buildizer'
266
- end
267
- end
268
-
269
- def command(*args, do_raise: false, **kwargs)
270
- Shellfold.run(*args, live_log: debug, **kwargs).tap do |cmd|
271
- if not cmd.status.success? and do_raise
272
- raise Error.new(error: :error, message: "external command error")
273
- end
274
- end
275
- end
276
-
277
- def command!(*args, **kwargs)
278
- command(*args, do_raise: true, log_failure: true, **kwargs)
279
- end
280
82
  end # Packager
281
83
  end # Buildizer
@@ -12,6 +12,31 @@ module Buildizer
12
12
  def on?
13
13
  ['1', 'true', 'yes'].include? self.downcase
14
14
  end
15
- end
15
+
16
+ def off?
17
+ !on?
18
+ end
19
+ end # String
20
+
21
+ refine Pathname do
22
+ def load_yaml
23
+ exist? ? YAML.load(read) : {}
24
+ rescue Psych::Exception => err
25
+ raise Error, error: :input_error,
26
+ message: "bad yaml config file #{self}: #{err.message}"
27
+ end
28
+ end # Pathname
29
+
30
+ refine TrueClass do
31
+ def to_env
32
+ 'yes'
33
+ end
34
+ end # TrueClass
35
+
36
+ refine FalseClass do
37
+ def to_env
38
+ 'no'
39
+ end
40
+ end # FalseClass
16
41
  end # Refine
17
42
  end # Buildizer
@@ -62,7 +62,7 @@ module Buildizer
62
62
  end
63
63
 
64
64
  def docker_image_repository
65
- "#{builder.packager.docker_image || "buildizer/#{package_name}"}"
65
+ "buildizer/#{package_name}"
66
66
  end
67
67
 
68
68
  def docker_image_tag
@@ -73,6 +73,10 @@ module Buildizer
73
73
  "#{docker_image_repository}:#{docker_image_tag}"
74
74
  end
75
75
 
76
+ def docker_cache_image
77
+ "#{image.docker.cache[:repo]}:#{docker_image_tag}" if image.docker.cache
78
+ end
79
+
76
80
  def package_cloud
77
81
  @package_cloud.map do |desc|
78
82
  desc.merge(package_path: _package_cloud_path(desc[:repo]))
@@ -1,3 +1,3 @@
1
1
  module Buildizer
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'
3
3
  end
data/lib/buildizer.rb CHANGED
@@ -4,12 +4,21 @@ require 'json'
4
4
  require 'net_status'
5
5
  require 'pathname'
6
6
  require 'shellfold'
7
+ require 'travis'
8
+ require 'travis/tools/github'
7
9
 
8
10
  require 'buildizer/version'
9
11
  require 'buildizer/refine'
10
12
  require 'buildizer/error'
11
13
  require 'buildizer/docker'
14
+ require 'buildizer/ci'
15
+ require 'buildizer/ci/base'
16
+ require 'buildizer/ci/gitlab_ci'
17
+ require 'buildizer/ci/travis'
12
18
  require 'buildizer/cli'
19
+ require 'buildizer/cli/option_mod'
20
+ require 'buildizer/cli/base'
21
+ require 'buildizer/cli/main'
13
22
  require 'buildizer/packager'
14
23
  require 'buildizer/target'
15
24
  require 'buildizer/target/package_name_mod'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buildizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - flant
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-12 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -90,6 +90,26 @@ dependencies:
90
90
  - - <
91
91
  - !ruby/object:Gem::Version
92
92
  version: '1.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: overcommit
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: 0.33.0
100
+ - - <
101
+ - !ruby/object:Gem::Version
102
+ version: '1.0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.33.0
110
+ - - <
111
+ - !ruby/object:Gem::Version
112
+ version: '1.0'
93
113
  - !ruby/object:Gem::Dependency
94
114
  name: bundler
95
115
  requirement: !ruby/object:Gem::Requirement
@@ -224,7 +244,17 @@ files:
224
244
  - lib/buildizer/builder/fpm.rb
225
245
  - lib/buildizer/builder/native.rb
226
246
  - lib/buildizer/builder/patch.rb
247
+ - lib/buildizer/ci.rb
248
+ - lib/buildizer/ci/base.rb
249
+ - lib/buildizer/ci/gitlab_ci.rb
250
+ - lib/buildizer/ci/travis.rb
251
+ - lib/buildizer/ci/travis/docker_cache_mod.rb
252
+ - lib/buildizer/ci/travis/package_cloud_mod.rb
253
+ - lib/buildizer/ci/travis/package_version_tag_mod.rb
227
254
  - lib/buildizer/cli.rb
255
+ - lib/buildizer/cli/base.rb
256
+ - lib/buildizer/cli/main.rb
257
+ - lib/buildizer/cli/option_mod.rb
228
258
  - lib/buildizer/docker.rb
229
259
  - lib/buildizer/error.rb
230
260
  - lib/buildizer/image.rb
@@ -237,6 +267,16 @@ files:
237
267
  - lib/buildizer/image/ubuntu1404.rb
238
268
  - lib/buildizer/image/ubuntu1604.rb
239
269
  - lib/buildizer/packager.rb
270
+ - lib/buildizer/packager/buildizer_conf_mod.rb
271
+ - lib/buildizer/packager/ci_mod.rb
272
+ - lib/buildizer/packager/docker_cache_mod.rb
273
+ - lib/buildizer/packager/git_mod.rb
274
+ - lib/buildizer/packager/misc_mod.rb
275
+ - lib/buildizer/packager/overcommit_mod.rb
276
+ - lib/buildizer/packager/package_cloud_mod.rb
277
+ - lib/buildizer/packager/package_version_tag_mod.rb
278
+ - lib/buildizer/packager/project_settings_mod.rb
279
+ - lib/buildizer/packager/user_settings_mod.rb
240
280
  - lib/buildizer/refine.rb
241
281
  - lib/buildizer/target.rb
242
282
  - lib/buildizer/target/base.rb