buildizer 0.0.9 → 0.1.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 +8 -8
- data/Gemfile.lock +3 -5
- data/bin/buildizer +1 -1
- data/buildizer.gemspec +1 -0
- data/lib/buildizer/builder/base.rb +30 -35
- data/lib/buildizer/builder/fpm.rb +10 -10
- data/lib/buildizer/builder/patch.rb +2 -2
- data/lib/buildizer/{packager → buildizer}/buildizer_conf_mod.rb +3 -5
- data/lib/buildizer/{packager → buildizer}/ci_mod.rb +2 -2
- data/lib/buildizer/{packager → buildizer}/docker_cache_mod.rb +12 -9
- data/lib/buildizer/{packager → buildizer}/git_mod.rb +2 -2
- data/lib/buildizer/{packager → buildizer}/misc_mod.rb +34 -6
- data/lib/buildizer/{packager → buildizer}/overcommit_mod.rb +26 -13
- data/lib/buildizer/{packager → buildizer}/package_cloud_mod.rb +11 -9
- data/lib/buildizer/{packager → buildizer}/package_version_tag_mod.rb +2 -4
- data/lib/buildizer/{packager → buildizer}/project_settings_mod.rb +5 -7
- data/lib/buildizer/{packager → buildizer}/user_settings_mod.rb +4 -6
- data/lib/buildizer/{packager.rb → buildizer.rb} +29 -33
- data/lib/buildizer/ci/base.rb +8 -6
- data/lib/buildizer/ci/travis/docker_cache_mod.rb +9 -9
- data/lib/buildizer/ci/travis/package_cloud_mod.rb +8 -8
- data/lib/buildizer/ci/travis/package_version_tag_mod.rb +3 -5
- data/lib/buildizer/ci/travis.rb +18 -14
- data/lib/buildizer/cli/base.rb +3 -2
- data/lib/buildizer/cli/main.rb +14 -14
- data/lib/buildizer/core_ext/false_class.rb +5 -0
- data/lib/buildizer/core_ext/hash.rb +48 -0
- data/lib/buildizer/core_ext/pathname.rb +17 -0
- data/lib/buildizer/core_ext/string.rb +17 -0
- data/lib/buildizer/core_ext/true_class.rb +5 -0
- data/lib/buildizer/docker.rb +34 -31
- data/lib/buildizer/target/base.rb +1 -5
- data/lib/buildizer/version.rb +1 -1
- data/lib/buildizer.rb +7 -2
- metadata +38 -14
- data/lib/buildizer/refine.rb +0 -42
@@ -1,17 +1,15 @@
|
|
1
1
|
module Buildizer
|
2
|
-
class
|
3
|
-
autoload :MiscMod, 'buildizer/
|
4
|
-
autoload :ProjectSettingsMod, 'buildizer/
|
5
|
-
autoload :UserSettingsMod, 'buildizer/
|
6
|
-
autoload :CiMod, 'buildizer/
|
7
|
-
autoload :BuildizerConfMod, 'buildizer/
|
8
|
-
autoload :PackageVersionTagMod, 'buildizer/
|
9
|
-
autoload :GitMod, 'buildizer/
|
10
|
-
autoload :OvercommitMod, 'buildizer/
|
11
|
-
autoload :PackageCloudMod, 'buildizer/
|
12
|
-
autoload :DockerCacheMod, 'buildizer/
|
13
|
-
|
14
|
-
using Refine
|
2
|
+
class Buildizer
|
3
|
+
autoload :MiscMod, 'buildizer/buildizer/misc_mod'
|
4
|
+
autoload :ProjectSettingsMod, 'buildizer/buildizer/project_settings_mod'
|
5
|
+
autoload :UserSettingsMod, 'buildizer/buildizer/user_settings_mod'
|
6
|
+
autoload :CiMod, 'buildizer/buildizer/ci_mod'
|
7
|
+
autoload :BuildizerConfMod, 'buildizer/buildizer/buildizer_conf_mod'
|
8
|
+
autoload :PackageVersionTagMod, 'buildizer/buildizer/package_version_tag_mod'
|
9
|
+
autoload :GitMod, 'buildizer/buildizer/git_mod'
|
10
|
+
autoload :OvercommitMod, 'buildizer/buildizer/overcommit_mod'
|
11
|
+
autoload :PackageCloudMod, 'buildizer/buildizer/package_cloud_mod'
|
12
|
+
autoload :DockerCacheMod, 'buildizer/buildizer/docker_cache_mod'
|
15
13
|
|
16
14
|
include MiscMod
|
17
15
|
include ProjectSettingsMod
|
@@ -24,16 +22,30 @@ module Buildizer
|
|
24
22
|
include PackageCloudMod
|
25
23
|
include DockerCacheMod
|
26
24
|
|
27
|
-
attr_reader :
|
25
|
+
attr_reader :options
|
28
26
|
attr_reader :package_path
|
29
27
|
attr_reader :work_path
|
30
28
|
attr_reader :debug
|
31
29
|
|
32
|
-
def initialize(cli)
|
30
|
+
def initialize(cli: nil, **kwargs)
|
33
31
|
@cli = cli
|
32
|
+
@options = kwargs
|
34
33
|
@package_path = Pathname.new(ENV['BUILDIZER_PATH'] || '.').expand_path
|
35
34
|
@work_path = Pathname.new(ENV['BUILDIZER_WORK_PATH'] || '~/.buildizer').expand_path
|
36
|
-
@debug = ENV['BUILDIZER_DEBUG'].nil? ?
|
35
|
+
@debug = ENV['BUILDIZER_DEBUG'].nil? ? options[:debug] : ENV['BUILDIZER_DEBUG'].to_s.on?
|
36
|
+
@color = interactive? ? options[:color] : false
|
37
|
+
end
|
38
|
+
|
39
|
+
def interactive?
|
40
|
+
@cli and $stdout.isatty
|
41
|
+
end
|
42
|
+
|
43
|
+
def secure_option(name, ask: nil, default: nil)
|
44
|
+
if interactive? and ask
|
45
|
+
@cli.ask(ask, echo: false, default: default).tap{puts}
|
46
|
+
else
|
47
|
+
options.fetch(name.to_sym, default)
|
48
|
+
end
|
37
49
|
end
|
38
50
|
|
39
51
|
def prepare!
|
@@ -52,22 +64,6 @@ module Buildizer
|
|
52
64
|
builder.verify
|
53
65
|
end
|
54
66
|
|
55
|
-
def git_hooks_path
|
56
|
-
package_path.join('.git').join('hooks')
|
57
|
-
end
|
58
|
-
|
59
|
-
def git_old_hooks_path
|
60
|
-
git_hooks_path.join('old-hooks')
|
61
|
-
end
|
62
|
-
|
63
|
-
def git_precommit_path
|
64
|
-
git_hooks_path.join('pre-commit')
|
65
|
-
end
|
66
|
-
|
67
|
-
def git_old_precommit_path
|
68
|
-
git_old_hooks_path.join('pre-commit')
|
69
|
-
end
|
70
|
-
|
71
67
|
def builder
|
72
68
|
@builder ||= begin
|
73
69
|
build_type = buildizer_conf['build_type']
|
@@ -79,5 +75,5 @@ module Buildizer
|
|
79
75
|
klass.new(self)
|
80
76
|
end
|
81
77
|
end
|
82
|
-
end #
|
78
|
+
end # Buildizer
|
83
79
|
end # Buildizer
|
data/lib/buildizer/ci/base.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
module Buildizer
|
2
2
|
module Ci
|
3
3
|
class Base
|
4
|
-
|
4
|
+
attr_reader :buildizer
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(packager)
|
6
|
+
def initialize(buildizer)
|
9
7
|
super()
|
10
8
|
|
11
|
-
@
|
9
|
+
@buildizer = buildizer
|
12
10
|
end
|
13
11
|
|
14
12
|
def conf
|
@@ -16,7 +14,7 @@ module Buildizer
|
|
16
14
|
end
|
17
15
|
|
18
16
|
def conf_path
|
19
|
-
|
17
|
+
buildizer.package_path.join(conf_file_name)
|
20
18
|
end
|
21
19
|
|
22
20
|
def conf_file_name
|
@@ -35,6 +33,10 @@ module Buildizer
|
|
35
33
|
raise
|
36
34
|
end
|
37
35
|
|
36
|
+
def configuration_actual!
|
37
|
+
raise Error, message: "#{ci_name} confugration update needed" unless configuration_actual?
|
38
|
+
end
|
39
|
+
|
38
40
|
def git_tag
|
39
41
|
res = _git_tag.to_s
|
40
42
|
if res.empty? then nil else res end
|
@@ -15,9 +15,9 @@ module Buildizer
|
|
15
15
|
end # << self
|
16
16
|
|
17
17
|
def docker_cache_setup!
|
18
|
-
if
|
18
|
+
if buildizer.docker_cache_clear_settings?
|
19
19
|
with_travis do
|
20
|
-
|
20
|
+
buildizer.with_log(desc: "Travis docker cache settings") do |&fin|
|
21
21
|
docker_cache_repo_var_delete!
|
22
22
|
docker_cache_user_var_delete!
|
23
23
|
docker_cache_password_var_delete!
|
@@ -27,14 +27,14 @@ module Buildizer
|
|
27
27
|
fin.call 'DELETED'
|
28
28
|
end # with_log
|
29
29
|
end # with_travis
|
30
|
-
elsif
|
30
|
+
elsif buildizer.docker_cache_update_settings?
|
31
31
|
with_travis do
|
32
|
-
|
33
|
-
docker_cache_repo_var_update!
|
34
|
-
docker_cache_user_var_update!
|
35
|
-
docker_cache_password_var_update!
|
36
|
-
docker_cache_email_var_update!
|
37
|
-
docker_cache_server_var_update!
|
32
|
+
buildizer.with_log(desc: "Travis docker cache settings") do |&fin|
|
33
|
+
docker_cache_repo_var_update! buildizer.setup_docker_cache_repo, public: true
|
34
|
+
docker_cache_user_var_update! buildizer.setup_docker_cache_user, public: true
|
35
|
+
docker_cache_password_var_update! buildizer.setup_docker_cache_password, public: false
|
36
|
+
docker_cache_email_var_update! buildizer.setup_docker_cache_email, public: false
|
37
|
+
docker_cache_server_var_update! buildizer.setup_docker_cache_server, public: true
|
38
38
|
|
39
39
|
fin.call 'UPDATED'
|
40
40
|
end # with_log
|
@@ -36,33 +36,33 @@ module Buildizer
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def package_cloud_setup!
|
39
|
-
if
|
39
|
+
if buildizer.package_cloud_clear_settings?
|
40
40
|
with_travis do
|
41
41
|
repo_list = []
|
42
42
|
repo_list = package_cloud_repo_list_var.value.split(',') if package_cloud_repo_list_var
|
43
43
|
org_list = repo_list.map {|repo| repo.split('/').first}.uniq
|
44
44
|
org_list.each do |org|
|
45
|
-
|
45
|
+
buildizer.with_log(desc: "Travis package cloud token for '#{org}'") do |&fin|
|
46
46
|
package_cloud_token_var_delete! org: org
|
47
47
|
fin.call 'DELETED'
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
|
51
|
+
buildizer.with_log(desc: "Travis package cloud repo list") do |&fin|
|
52
52
|
package_cloud_repo_list_var_delete!
|
53
53
|
fin.call 'DELETED'
|
54
54
|
end
|
55
55
|
end # with_travis
|
56
|
-
elsif
|
56
|
+
elsif buildizer.package_cloud_update_settings?
|
57
57
|
with_travis do
|
58
|
-
|
59
|
-
package_cloud_repo_list_var_update!
|
58
|
+
buildizer.with_log(desc: "Travis package cloud repo list") do |&fin|
|
59
|
+
package_cloud_repo_list_var_update! buildizer.setup_package_cloud_repo_list.join(','), public: true
|
60
60
|
fin.call 'UPDATED'
|
61
61
|
end # with_log
|
62
62
|
|
63
|
-
|
63
|
+
buildizer.setup_package_cloud_org_desc_list.each do |desc|
|
64
64
|
next unless desc[:token]
|
65
|
-
|
65
|
+
buildizer.with_log(desc: "Travis package cloud token for '#{desc[:org]}'") do |&fin|
|
66
66
|
package_cloud_token_var_update! desc[:token], org: desc[:org], public: false
|
67
67
|
fin.call 'UPDATED'
|
68
68
|
end # with_log
|
@@ -2,8 +2,6 @@ module Buildizer
|
|
2
2
|
module Ci
|
3
3
|
class Travis
|
4
4
|
module PackageVersionTagMod
|
5
|
-
using Refine
|
6
|
-
|
7
5
|
def require_tag_var_name
|
8
6
|
'BUILDIZER_REQUIRE_TAG'
|
9
7
|
end
|
@@ -18,15 +16,15 @@ module Buildizer
|
|
18
16
|
|
19
17
|
def require_tag_setup!
|
20
18
|
with_travis do
|
21
|
-
|
22
|
-
if
|
19
|
+
buildizer.with_log(desc: "Travis require tag for deploy") do |&fin|
|
20
|
+
if buildizer.options[:require_tag].nil?
|
23
21
|
unless require_tag_var
|
24
22
|
require_tag_var_upsert(value: true.to_env)
|
25
23
|
fin.call 'ENABLED'
|
26
24
|
else
|
27
25
|
fin.call
|
28
26
|
end
|
29
|
-
elsif
|
27
|
+
elsif buildizer.options[:require_tag]
|
30
28
|
require_tag_var_upsert(value: true.to_env)
|
31
29
|
fin.call 'ENABLED'
|
32
30
|
else
|
data/lib/buildizer/ci/travis.rb
CHANGED
@@ -34,7 +34,7 @@ module Buildizer
|
|
34
34
|
include PackageVersionTagMod
|
35
35
|
|
36
36
|
def setup!
|
37
|
-
|
37
|
+
buildizer.write_yaml conf_path, actual_conf
|
38
38
|
require_tag_setup!
|
39
39
|
end
|
40
40
|
|
@@ -55,9 +55,9 @@ module Buildizer
|
|
55
55
|
|
56
56
|
'echo "docker-engine hold" | sudo dpkg --set-selections',
|
57
57
|
]
|
58
|
-
install.push(*Array(buildizer_install_instructions(master:
|
58
|
+
install.push(*Array(buildizer_install_instructions(master: buildizer.project_settings['master'])))
|
59
59
|
|
60
|
-
env =
|
60
|
+
env = buildizer.targets.map {|t| "BUILDIZER_TARGET=#{t}"}
|
61
61
|
conf.merge(
|
62
62
|
'dist' => 'trusty',
|
63
63
|
'sudo' => 'required',
|
@@ -77,11 +77,15 @@ module Buildizer
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def repo_name
|
80
|
-
|
80
|
+
if buildizer.git_remote_url.start_with? 'http'
|
81
|
+
buildizer.git_remote_url.split('github.com/')[1]
|
82
|
+
else
|
83
|
+
buildizer.git_remote_url.split(':')[1].split('.')[0]
|
84
|
+
end
|
81
85
|
rescue
|
82
86
|
raise Error, error: :input_error,
|
83
87
|
message: "unable to determine travis repo name " +
|
84
|
-
"from git remote url #{
|
88
|
+
"from git remote url #{buildizer.git_remote_url}"
|
85
89
|
end
|
86
90
|
|
87
91
|
def repo
|
@@ -90,21 +94,21 @@ module Buildizer
|
|
90
94
|
|
91
95
|
def login
|
92
96
|
@logged_in ||= begin
|
93
|
-
|
94
|
-
|
97
|
+
buildizer.with_log(desc: "Login into travis") do |&fin|
|
98
|
+
buildizer.user_settings['travis'] ||= {}
|
95
99
|
|
96
|
-
if
|
97
|
-
|
98
|
-
|
100
|
+
if buildizer.options[:reset_github_token]
|
101
|
+
buildizer.user_settings['travis'].delete('github_token')
|
102
|
+
buildizer.user_settings_save!
|
99
103
|
end
|
100
104
|
|
101
|
-
|
105
|
+
buildizer.user_settings['travis']['github_token'] ||= begin
|
102
106
|
reset_github_token = true
|
103
|
-
|
107
|
+
buildizer.secure_option(:github_token, ask: "GitHub travis access token:").to_s
|
104
108
|
end
|
105
109
|
|
106
|
-
::Travis.github_auth(
|
107
|
-
|
110
|
+
::Travis.github_auth(buildizer.user_settings['travis']['github_token'])
|
111
|
+
buildizer.user_settings_save! if reset_github_token
|
108
112
|
|
109
113
|
fin.call "LOGGED IN: #{::Travis::User.current.name}"
|
110
114
|
end # with_log
|
data/lib/buildizer/cli/base.rb
CHANGED
@@ -5,11 +5,12 @@ module Buildizer
|
|
5
5
|
|
6
6
|
add_shared_options(
|
7
7
|
debug: {type: :boolean, default: false, desc: "turn on live logging for external commands"},
|
8
|
+
color: {type: :boolean, default: true, desc: "colorized output"},
|
8
9
|
)
|
9
10
|
|
10
11
|
no_commands do
|
11
|
-
def
|
12
|
-
@
|
12
|
+
def buildizer
|
13
|
+
@buildizer ||= ::Buildizer::Buildizer.new(cli: self, **options.zymbolize_keys_deep)
|
13
14
|
end
|
14
15
|
end # no_commands
|
15
16
|
end # Base
|
data/lib/buildizer/cli/main.rb
CHANGED
@@ -38,47 +38,47 @@ module Buildizer
|
|
38
38
|
desc: "clear all docker cache settings"
|
39
39
|
def setup
|
40
40
|
if options['verify_ci']
|
41
|
-
|
41
|
+
buildizer.ci.configuration_actual!
|
42
42
|
else
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
43
|
+
buildizer.project_settings_setup!
|
44
|
+
buildizer.user_settings_setup!
|
45
|
+
buildizer.ci.setup!
|
46
|
+
buildizer.package_cloud_setup!
|
47
|
+
buildizer.docker_cache_setup!
|
48
|
+
buildizer.overcommit_setup!
|
49
|
+
buildizer.overcommit_verify_setup!
|
50
|
+
buildizer.overcommit_ci_setup!
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
desc "deinit", "Deinitialize settings (.buildizer.yml, git pre-commit hook)"
|
55
55
|
shared_options
|
56
56
|
def deinit
|
57
|
-
|
57
|
+
buildizer.deinit!
|
58
58
|
end
|
59
59
|
|
60
60
|
desc "prepare", "Prepare images for building packages"
|
61
61
|
shared_options
|
62
62
|
def prepare
|
63
|
-
|
63
|
+
buildizer.prepare!
|
64
64
|
end
|
65
65
|
|
66
66
|
desc "build", "Build packages"
|
67
67
|
shared_options
|
68
68
|
def build
|
69
|
-
|
69
|
+
buildizer.build!
|
70
70
|
end
|
71
71
|
|
72
72
|
desc "deploy", "Deploy packages"
|
73
73
|
shared_options
|
74
74
|
def deploy
|
75
|
-
|
75
|
+
buildizer.deploy!
|
76
76
|
end
|
77
77
|
|
78
78
|
desc "verify", "Verify targets params"
|
79
79
|
shared_options
|
80
80
|
def verify
|
81
|
-
|
81
|
+
buildizer.verify!
|
82
82
|
end
|
83
83
|
end # Main
|
84
84
|
end # Cli
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Hash
|
2
|
+
def zymbolize_keys
|
3
|
+
map do |key, value|
|
4
|
+
[_symbolize(key), value]
|
5
|
+
end.to_h
|
6
|
+
end
|
7
|
+
|
8
|
+
def zymbolize_keys!
|
9
|
+
keys.each do |key|
|
10
|
+
self[_symbolize(key)] = delete(key)
|
11
|
+
end
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def zymbolize_keys_deep
|
16
|
+
map do |key, value|
|
17
|
+
[_symbolize(key), if value.is_a? Hash
|
18
|
+
value.zymbolize_keys_deep
|
19
|
+
else
|
20
|
+
value
|
21
|
+
end]
|
22
|
+
end.to_h
|
23
|
+
end
|
24
|
+
|
25
|
+
def zymbolize_keys_deep!
|
26
|
+
queue = [self]
|
27
|
+
visited = Set.new
|
28
|
+
while hash = queue.shift
|
29
|
+
visited.add hash
|
30
|
+
hash.keys.each do |key|
|
31
|
+
value = hash.delete(key)
|
32
|
+
hash[_symbolize(key)] = value
|
33
|
+
queue << value if value.is_a? Hash and not visited.include? hash
|
34
|
+
end
|
35
|
+
end
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def net_status_message
|
40
|
+
[self[:error], self[:message]].compact.join(': ')
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def _symbolize(value)
|
46
|
+
value.respond_to?(:to_sym) ? value.to_sym : value
|
47
|
+
end
|
48
|
+
end # Hash
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Pathname
|
2
|
+
def load_yaml
|
3
|
+
exist? ? YAML.load(read) : {}
|
4
|
+
rescue Psych::Exception => err
|
5
|
+
raise Error, error: :input_error,
|
6
|
+
message: "bad yaml config file #{self}: #{err.message}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def dump_yaml(cfg)
|
10
|
+
write! YAML.dump(cfg)
|
11
|
+
end
|
12
|
+
|
13
|
+
def write!(*args, &blk)
|
14
|
+
dirname.mkpath
|
15
|
+
write(*args, &blk)
|
16
|
+
end
|
17
|
+
end # Pathname
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class String
|
2
|
+
def underscore
|
3
|
+
self.gsub(/(.)([A-Z])/,'\1_\2').downcase
|
4
|
+
end
|
5
|
+
|
6
|
+
def match_glob?(glob)
|
7
|
+
File.fnmatch? glob, self, File::FNM_EXTGLOB
|
8
|
+
end
|
9
|
+
|
10
|
+
def on?
|
11
|
+
['1', 'true', 'yes'].include? self.downcase
|
12
|
+
end
|
13
|
+
|
14
|
+
def off?
|
15
|
+
!on?
|
16
|
+
end
|
17
|
+
end # String
|
data/lib/buildizer/docker.rb
CHANGED
@@ -31,10 +31,10 @@ module Buildizer
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def with_cache(&blk)
|
34
|
-
warn
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
builder.buildizer.warn "No docker cache account settings " +
|
35
|
+
"(BUILDIZER_DOCKER_CACHE, BUILDIZER_DOCKER_CACHE_USERNAME," +
|
36
|
+
" BUILDIZER_DOCKER_CACHE_PASSWORD, BUILDIZER_DOCKER_CACHE_EMAIL," +
|
37
|
+
" BUILDIZER_DOCKER_CACHE_SERVER)" unless cache
|
38
38
|
|
39
39
|
cache_login! if cache
|
40
40
|
begin
|
@@ -52,47 +52,47 @@ module Buildizer
|
|
52
52
|
cmd << "--username=#{cache[:user]}" if cache[:user]
|
53
53
|
cmd << "--password=#{cache[:password]}" if cache[:password]
|
54
54
|
cmd << "--server=#{cache[:server]}" if cache[:server]
|
55
|
-
builder.
|
55
|
+
builder.buildizer.command! cmd.join(' '), desc: "Docker cache account login"
|
56
56
|
end
|
57
57
|
|
58
58
|
def cache_logout!
|
59
59
|
raise Error, error: :logical_error, message: "no docker cache account info" unless cache
|
60
|
-
builder.
|
60
|
+
builder.buildizer.command! 'docker logout', desc: "Docker cache account logout"
|
61
61
|
end
|
62
62
|
|
63
63
|
def pull_image(image)
|
64
|
-
builder.
|
64
|
+
builder.buildizer.command! "docker pull #{image.base_image}", desc: "Pull docker base image #{image.base_image}"
|
65
65
|
if cache
|
66
|
-
pull_cache_res = builder.
|
66
|
+
pull_cache_res = builder.buildizer.command(
|
67
67
|
"docker pull #{image.cache_name}",
|
68
|
-
|
68
|
+
desc: "Try to pull docker cache image #{image.cache_name}"
|
69
69
|
)
|
70
70
|
if pull_cache_res.status.success?
|
71
|
-
builder.
|
72
|
-
|
73
|
-
|
74
|
-
builder.
|
75
|
-
|
71
|
+
builder.buildizer.command! "docker tag -f #{image.cache_name} #{image.name}",
|
72
|
+
desc: "Tag cache image #{image.cache_name}" +
|
73
|
+
" as prepared build image #{image.name}"
|
74
|
+
builder.buildizer.command! "docker rmi #{image.cache_name}",
|
75
|
+
desc: "Remove cache image #{image.cache_name}"
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
80
|
def push_image(image)
|
81
81
|
if cache
|
82
|
-
builder.
|
83
|
-
|
84
|
-
|
85
|
-
builder.
|
86
|
-
|
82
|
+
builder.buildizer.command! "docker tag -f #{image.name} #{image.cache_name}",
|
83
|
+
desc: "Tag prepared build image #{image.name}" +
|
84
|
+
" as cache image #{image.cache_name}"
|
85
|
+
builder.buildizer.command! "docker push #{image.cache_name}",
|
86
|
+
desc: "Push cache image #{image.cache_name}"
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
90
|
def build_image!(target)
|
91
91
|
pull_image target.image
|
92
92
|
|
93
|
-
target.image_work_path.join('Dockerfile').write [*target.image.instructions, nil].join("\n")
|
94
|
-
builder.
|
95
|
-
|
93
|
+
target.image_work_path.join('Dockerfile').write! [*target.image.instructions, nil].join("\n")
|
94
|
+
builder.buildizer.command! "docker build -t #{target.image.name} #{target.image_work_path}",
|
95
|
+
desc: "Build docker image #{target.image.name}"
|
96
96
|
|
97
97
|
push_image target.image
|
98
98
|
end
|
@@ -119,37 +119,40 @@ module Buildizer
|
|
119
119
|
|
120
120
|
def run_target_container!(target:, env: {})
|
121
121
|
container = SecureRandom.uuid
|
122
|
-
builder.
|
122
|
+
builder.buildizer.command! [
|
123
123
|
"docker run --detach --name #{container}",
|
124
|
-
*Array(
|
124
|
+
*Array(_prepare_docker_params(target, env)),
|
125
125
|
_wrap_docker_run("while true ; do sleep 1 ; done"),
|
126
126
|
].join(' '), desc: "Run container '#{container}' from docker image '#{target.image.name}'"
|
127
127
|
container
|
128
128
|
end
|
129
129
|
|
130
130
|
def shutdown_container!(container:)
|
131
|
-
builder.
|
132
|
-
builder.
|
131
|
+
builder.buildizer.command! "docker kill #{container}", desc: "Kill container '#{container}'"
|
132
|
+
builder.buildizer.command! "docker rm #{container}", desc: "Remove container '#{container}'"
|
133
133
|
end
|
134
134
|
|
135
135
|
def run_in_container!(container:, cmd:, desc: nil)
|
136
|
-
builder.
|
136
|
+
builder.buildizer.command! [
|
137
137
|
"docker exec #{container}",
|
138
138
|
_wrap_docker_exec(cmd),
|
139
139
|
].join(' '), timeout: 24*60*60, desc: desc
|
140
140
|
end
|
141
141
|
|
142
142
|
def run_in_image!(target:, cmd:, env: {}, desc: nil)
|
143
|
-
builder.
|
143
|
+
builder.buildizer.command! [
|
144
144
|
"docker run --rm",
|
145
|
-
*Array(
|
145
|
+
*Array(_prepare_docker_params(target, env)),
|
146
146
|
_wrap_docker_run(cmd),
|
147
147
|
].join(' '), timeout: 24*60*60, desc: desc
|
148
148
|
end
|
149
149
|
|
150
|
-
def
|
150
|
+
def _prepare_docker_params(target, env)
|
151
|
+
target.image_extra_path.mkpath
|
152
|
+
target.image_build_path.mkpath
|
153
|
+
|
151
154
|
[*env.map {|k,v| "-e #{k}=#{v}"},
|
152
|
-
"-v #{builder.
|
155
|
+
"-v #{builder.buildizer.package_path}:#{container_package_mount_path}:ro",
|
153
156
|
"-v #{target.image_extra_path}:#{container_extra_path}:ro",
|
154
157
|
"-v #{target.image_build_path}:#{container_build_path}",
|
155
158
|
target.image.name]
|
@@ -30,10 +30,6 @@ module Buildizer
|
|
30
30
|
@maintainer = maintainer
|
31
31
|
|
32
32
|
yield if block_given?
|
33
|
-
|
34
|
-
image_work_path.mkpath
|
35
|
-
image_build_path.mkpath
|
36
|
-
image_extra_path.mkpath
|
37
33
|
end
|
38
34
|
|
39
35
|
def image_work_path
|
@@ -62,7 +58,7 @@ module Buildizer
|
|
62
58
|
end
|
63
59
|
|
64
60
|
def docker_image_repository
|
65
|
-
|
61
|
+
package_name
|
66
62
|
end
|
67
63
|
|
68
64
|
def docker_image_tag
|
data/lib/buildizer/version.rb
CHANGED