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.
- checksums.yaml +8 -8
- data/Gemfile.lock +9 -2
- data/bin/buildizer +1 -1
- data/buildizer.gemspec +1 -0
- data/lib/buildizer/builder/base.rb +3 -3
- data/lib/buildizer/ci/base.rb +76 -0
- data/lib/buildizer/ci/gitlab_ci.rb +15 -0
- data/lib/buildizer/ci/travis/docker_cache_mod.rb +47 -0
- data/lib/buildizer/ci/travis/package_cloud_mod.rb +76 -0
- data/lib/buildizer/ci/travis/package_version_tag_mod.rb +42 -0
- data/lib/buildizer/ci/travis.rb +124 -0
- data/lib/buildizer/ci.rb +4 -0
- data/lib/buildizer/cli/base.rb +17 -0
- data/lib/buildizer/cli/main.rb +85 -0
- data/lib/buildizer/cli/option_mod.rb +35 -0
- data/lib/buildizer/cli.rb +1 -61
- data/lib/buildizer/docker.rb +26 -12
- data/lib/buildizer/image/base.rb +4 -0
- data/lib/buildizer/packager/buildizer_conf_mod.rb +63 -0
- data/lib/buildizer/packager/ci_mod.rb +27 -0
- data/lib/buildizer/packager/docker_cache_mod.rb +103 -0
- data/lib/buildizer/packager/git_mod.rb +16 -0
- data/lib/buildizer/packager/misc_mod.rb +61 -0
- data/lib/buildizer/packager/overcommit_mod.rb +85 -0
- data/lib/buildizer/packager/package_cloud_mod.rb +81 -0
- data/lib/buildizer/packager/package_version_tag_mod.rb +15 -0
- data/lib/buildizer/packager/project_settings_mod.rb +27 -0
- data/lib/buildizer/packager/user_settings_mod.rb +24 -0
- data/lib/buildizer/packager.rb +27 -225
- data/lib/buildizer/refine.rb +26 -1
- data/lib/buildizer/target/base.rb +5 -1
- data/lib/buildizer/version.rb +1 -1
- data/lib/buildizer.rb +9 -0
- metadata +42 -2
data/lib/buildizer/packager.rb
CHANGED
@@ -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(
|
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
|
-
@
|
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
|
data/lib/buildizer/refine.rb
CHANGED
@@ -12,6 +12,31 @@ module Buildizer
|
|
12
12
|
def on?
|
13
13
|
['1', 'true', 'yes'].include? self.downcase
|
14
14
|
end
|
15
|
-
|
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
|
-
"
|
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]))
|
data/lib/buildizer/version.rb
CHANGED
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.
|
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-
|
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
|