rbld 1.2.0 → 1.3.0
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 +4 -4
- data/cli/bin/rbld +7 -0
- data/cli/lib/data/version +1 -1
- data/cli/lib/rbld_dockerops.rb +2 -2
- data/cli/lib/rbld_fileops.rb +8 -10
- data/cli/lib/rbld_plugins.rb +42 -0
- data/cli/lib/rbld_reg_dockerhub.rb +4 -0
- data/cli/lib/rbld_reg_fs.rb +2 -2
- data/cli/lib/rbld_utils.rb +58 -0
- data/tools/rebuild-conf/Rakefile +5 -0
- metadata +64 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52af85fe8048b73c2ec54a99f10a301b3e53d068
|
4
|
+
data.tar.gz: 27c99030446802b42462fed1ccd05d3599257ac3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59f37575451ae36fb42b35d0d03f2206e68ef43be2cdc59ddadce167811a650ea45506529fdc6d981189c96d433bbc996f32841b4bd271a1eb8f09d81af29fd0
|
7
|
+
data.tar.gz: 8ec25e4ee262fef7f77dd4503e31d98fb05ba5d3eec5b1e969dc34d53ead3151553747cda04eaa80660f086158daaade7279dabb295047cf536871ba041fe151
|
data/cli/bin/rbld
CHANGED
@@ -5,12 +5,15 @@ require 'require_all'
|
|
5
5
|
module Rebuild
|
6
6
|
require_relative '../lib/rbld_commands'
|
7
7
|
require_rel '../lib/commands'
|
8
|
+
require_relative '../lib/rbld_plugins'
|
8
9
|
end
|
9
10
|
|
10
11
|
begin
|
11
12
|
|
12
13
|
rbld_log.info( "ARGV: #{ARGV.join(' ')}" )
|
13
14
|
|
15
|
+
Rebuild::PlugMgr.instance.notify(:start)
|
16
|
+
|
14
17
|
if !ARGV[0] || (ARGV[0] == "help" && !ARGV[1])
|
15
18
|
puts Rebuild::CLI::Main.usage
|
16
19
|
puts
|
@@ -33,4 +36,8 @@ rescue StandardError => e
|
|
33
36
|
rbld_print.error(e.message)
|
34
37
|
e.backtrace.each { |l| rbld_log.fatal(l) }
|
35
38
|
exit 1
|
39
|
+
rescue SignalException => e
|
40
|
+
rbld_print.error("Command execution was terminated.")
|
41
|
+
e.backtrace.each { |l| rbld_log.fatal(l) }
|
42
|
+
exit 2
|
36
43
|
end
|
data/cli/lib/data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
data/cli/lib/rbld_dockerops.rb
CHANGED
@@ -43,7 +43,7 @@ module Rebuild
|
|
43
43
|
def get_credential(name, is_secret = false)
|
44
44
|
print "#{name}: "
|
45
45
|
predefined = ENV["RBLD_CREDENTIAL_#{name.upcase}"]
|
46
|
-
|
46
|
+
unless predefined.to_s.empty?
|
47
47
|
puts "<environment>"
|
48
48
|
predefined
|
49
49
|
else
|
@@ -119,7 +119,7 @@ module Rebuild
|
|
119
119
|
case @last_error
|
120
120
|
when nil
|
121
121
|
# No error
|
122
|
-
when /authentication required/, /unauthorized/
|
122
|
+
when /authentication required/, /unauthorized/, /denied/
|
123
123
|
raise RegistryNotAuthenticatedError, @last_error
|
124
124
|
else
|
125
125
|
raise RegistryOperationError, @last_error
|
data/cli/lib/rbld_fileops.rb
CHANGED
@@ -15,23 +15,21 @@ module Rebuild::Engine
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def load!
|
18
|
-
|
19
|
-
|
18
|
+
with_gzip_reader { |gz| Docker::Image.load(gz) }
|
19
|
+
|
20
20
|
rescue => msg
|
21
21
|
rbld_print.trace( msg )
|
22
22
|
raise EnvironmentLoadFailure, @filename
|
23
|
-
end
|
24
23
|
end
|
25
24
|
|
26
25
|
def save!(name, identity)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
with_gzip_writer do |gz|
|
27
|
+
Docker::Image.save_stream( identity ) { |chunk| gz.write chunk }
|
28
|
+
end
|
29
|
+
|
31
30
|
rescue => msg
|
32
31
|
rbld_print.trace( msg )
|
33
32
|
raise EnvironmentSaveFailure, [name, @filename]
|
34
|
-
end
|
35
33
|
end
|
36
34
|
|
37
35
|
private
|
@@ -42,7 +40,7 @@ module Rebuild::Engine
|
|
42
40
|
f.binmode
|
43
41
|
gz = Zlib::GzipWriter.new(f)
|
44
42
|
begin
|
45
|
-
yield gz
|
43
|
+
yield Rebuild::Utils::WithProgressBar.new( gz, :write )
|
46
44
|
ensure
|
47
45
|
gz.close
|
48
46
|
end
|
@@ -56,7 +54,7 @@ module Rebuild::Engine
|
|
56
54
|
def with_gzip_reader
|
57
55
|
Zlib::GzipReader.open( @filename ) do |gz|
|
58
56
|
begin
|
59
|
-
yield gz
|
57
|
+
yield Rebuild::Utils::WithProgressBar.new( gz, :read )
|
60
58
|
ensure
|
61
59
|
gz.close
|
62
60
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require 'plugman'
|
3
|
+
|
4
|
+
class Rebuild::PlugMgr
|
5
|
+
|
6
|
+
include Singleton
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
def_delegator :@plugman, :notify
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@plugman = Plugman.new( loader: loader )
|
15
|
+
@plugman.load_plugins
|
16
|
+
end
|
17
|
+
|
18
|
+
def loader
|
19
|
+
->(a) do
|
20
|
+
plugins.each { |p| load( p ) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def plugins
|
25
|
+
Gem::Specification.\
|
26
|
+
map { |g| g.name }.\
|
27
|
+
sort.\
|
28
|
+
uniq.\
|
29
|
+
grep /^rbld-plugin-.*/
|
30
|
+
end
|
31
|
+
|
32
|
+
def load(plugin)
|
33
|
+
|
34
|
+
require plugin
|
35
|
+
|
36
|
+
rescue LoadError
|
37
|
+
rbld_log.warn( "Failed to load plugin #{plugin}" )
|
38
|
+
else
|
39
|
+
rbld_log.info( "Loaded plugin #{plugin}" )
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/cli/lib/rbld_reg_fs.rb
CHANGED
@@ -16,7 +16,7 @@ module Rebuild
|
|
16
16
|
def initialize(path)
|
17
17
|
@path = path
|
18
18
|
rbld_log.info( "Connecting to registry #{@path}" )
|
19
|
-
raise FSLookupError, @
|
19
|
+
raise FSLookupError, @path unless Dir.exists?( @path )
|
20
20
|
end
|
21
21
|
|
22
22
|
def search(name = nil, tag = nil)
|
@@ -53,7 +53,7 @@ module Rebuild
|
|
53
53
|
def deploy(name, tag, api_class = ::Docker::Image)
|
54
54
|
reg_file = File.join( @path, name, tag ) + FILE_SFX
|
55
55
|
rbld_log.info( "Pulling from #{@path}" )
|
56
|
-
|
56
|
+
Rebuild::Engine::EnvironmentFile.new(reg_file).load!
|
57
57
|
end
|
58
58
|
|
59
59
|
end
|
data/cli/lib/rbld_utils.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
require 'ruby-progressbar'
|
3
|
+
|
1
4
|
module Rebuild
|
2
5
|
module Utils
|
3
6
|
|
@@ -50,5 +53,60 @@ module Rebuild
|
|
50
53
|
|
51
54
|
alias rebuild_error rebuild_errors
|
52
55
|
end
|
56
|
+
|
57
|
+
class StopWatch
|
58
|
+
def restart
|
59
|
+
@start_time = Time.now
|
60
|
+
end
|
61
|
+
|
62
|
+
alias_method :initialize, :restart
|
63
|
+
|
64
|
+
def time_ms
|
65
|
+
(Time.now - @start_time).to_i * 1000
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class WithProgressBar < SimpleDelegator
|
70
|
+
def initialize(target, methods = [], progressbar_class = ProgressBar, console_obj = STDOUT)
|
71
|
+
if console_obj.tty?
|
72
|
+
__init_progress__( progressbar_class, console_obj )
|
73
|
+
methods = [ methods ] unless methods.respond_to? :each
|
74
|
+
methods.each { |m| __create_hook__( m ) }
|
75
|
+
end
|
76
|
+
|
77
|
+
super(target)
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def __init_progress__(progressbar_class, console_obj)
|
83
|
+
@__progressbar__ = progressbar_class.create(title: 'Working',
|
84
|
+
length: 60,
|
85
|
+
total: nil,
|
86
|
+
output: console_obj)
|
87
|
+
@__stopwatch__ = StopWatch.new
|
88
|
+
@__first_call__ = true
|
89
|
+
end
|
90
|
+
|
91
|
+
def __create_hook__(name)
|
92
|
+
instance_eval(
|
93
|
+
%Q{
|
94
|
+
def #{name}(*args)
|
95
|
+
__do_tick__
|
96
|
+
super
|
97
|
+
end
|
98
|
+
}
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
def __do_tick__(*args)
|
103
|
+
if @__first_call__ || @__stopwatch__.time_ms >= 200
|
104
|
+
@__progressbar__.increment
|
105
|
+
@__stopwatch__.restart
|
106
|
+
@__first_call__ = false
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
53
111
|
end
|
54
112
|
end
|
data/tools/rebuild-conf/Rakefile
CHANGED
@@ -15,6 +15,11 @@ CONF_CONTENTS = <<TEXT
|
|
15
15
|
#REMOTE_NAME=origin
|
16
16
|
#REMOTE_TYPE_origin="rebuild"
|
17
17
|
#REMOTE_origin="/mnt/rbld_regsitry_root"
|
18
|
+
|
19
|
+
#For Docker Hub
|
20
|
+
REMOTE_NAME=origin
|
21
|
+
REMOTE_TYPE_origin="dockerhub"
|
22
|
+
REMOTE_origin="rbld/environments"
|
18
23
|
TEXT
|
19
24
|
|
20
25
|
task default: [RBLD_CONF]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbld
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Fleytman
|
8
8
|
autorequire:
|
9
9
|
bindir: cli/bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -166,6 +166,46 @@ dependencies:
|
|
166
166
|
- - ">="
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: 0.1.6
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: ruby-progressbar
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - "~>"
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '1.8'
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: 1.8.1
|
179
|
+
type: :runtime
|
180
|
+
prerelease: false
|
181
|
+
version_requirements: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - "~>"
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '1.8'
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: 1.8.1
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: plugman
|
191
|
+
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - "~>"
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '1.0'
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: 1.0.2
|
199
|
+
type: :runtime
|
200
|
+
prerelease: false
|
201
|
+
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - "~>"
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '1.0'
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 1.0.2
|
169
209
|
- !ruby/object:Gem::Dependency
|
170
210
|
name: rake
|
171
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -286,6 +326,26 @@ dependencies:
|
|
286
326
|
- - ">="
|
287
327
|
- !ruby/object:Gem::Version
|
288
328
|
version: 3.5.0
|
329
|
+
- !ruby/object:Gem::Dependency
|
330
|
+
name: timecop
|
331
|
+
requirement: !ruby/object:Gem::Requirement
|
332
|
+
requirements:
|
333
|
+
- - "~>"
|
334
|
+
- !ruby/object:Gem::Version
|
335
|
+
version: '0.8'
|
336
|
+
- - ">="
|
337
|
+
- !ruby/object:Gem::Version
|
338
|
+
version: 0.8.1
|
339
|
+
type: :development
|
340
|
+
prerelease: false
|
341
|
+
version_requirements: !ruby/object:Gem::Requirement
|
342
|
+
requirements:
|
343
|
+
- - "~>"
|
344
|
+
- !ruby/object:Gem::Version
|
345
|
+
version: '0.8'
|
346
|
+
- - ">="
|
347
|
+
- !ruby/object:Gem::Version
|
348
|
+
version: 0.8.1
|
289
349
|
description: Zero-dependency, reproducible build environments
|
290
350
|
email: rbld-devel@rbld.io
|
291
351
|
executables:
|
@@ -320,6 +380,7 @@ files:
|
|
320
380
|
- cli/lib/rbld_engine.rb
|
321
381
|
- cli/lib/rbld_fileops.rb
|
322
382
|
- cli/lib/rbld_log.rb
|
383
|
+
- cli/lib/rbld_plugins.rb
|
323
384
|
- cli/lib/rbld_print.rb
|
324
385
|
- cli/lib/rbld_reg_docker.rb
|
325
386
|
- cli/lib/rbld_reg_dockerhub.rb
|
@@ -350,5 +411,5 @@ rubyforge_project:
|
|
350
411
|
rubygems_version: 2.4.8
|
351
412
|
signing_key:
|
352
413
|
specification_version: 4
|
353
|
-
summary: rbld-1.
|
414
|
+
summary: rbld-1.3.0
|
354
415
|
test_files: []
|