buildizer 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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/cli.rb
CHANGED
@@ -1,64 +1,4 @@
|
|
1
1
|
module Buildizer
|
2
|
-
|
3
|
-
class << self
|
4
|
-
def shared_options
|
5
|
-
(@shared_options || {}).each do |name, options|
|
6
|
-
method_option name, options
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def construct_packager(options)
|
11
|
-
Packager.new(options: {'latest' => options['latest']}, debug: options['debug'])
|
12
|
-
end
|
13
|
-
end # << self
|
14
|
-
|
15
|
-
@shared_options = {
|
16
|
-
debug: {type: :boolean, default: false, desc: "turn on live logging for external commands"},
|
17
|
-
}
|
18
|
-
|
19
|
-
desc "init", "Initialize settings (.travis.yml, .buildizer.yml, git pre-commit hook)"
|
20
|
-
shared_options
|
21
|
-
method_option :latest,
|
22
|
-
type: :boolean,
|
23
|
-
desc: "use buildizer github master branch"
|
24
|
-
def init
|
25
|
-
self.class.construct_packager(options).init!
|
26
|
-
end
|
27
|
-
|
28
|
-
desc "update", "Regenerate .travis.yml"
|
29
|
-
shared_options
|
30
|
-
def update
|
31
|
-
self.class.construct_packager(options).update!
|
32
|
-
end
|
33
|
-
|
34
|
-
desc "deinit", "Deinitialize settings (.buildizer.yml, git pre-commit hook)"
|
35
|
-
shared_options
|
36
|
-
def deinit
|
37
|
-
self.class.construct_packager(options).deinit!
|
38
|
-
end
|
39
|
-
|
40
|
-
desc "prepare", "Prepare images for building packages"
|
41
|
-
shared_options
|
42
|
-
def prepare
|
43
|
-
self.class.construct_packager(options).prepare!
|
44
|
-
end
|
45
|
-
|
46
|
-
desc "build", "Build packages"
|
47
|
-
shared_options
|
48
|
-
def build
|
49
|
-
self.class.construct_packager(options).build!
|
50
|
-
end
|
51
|
-
|
52
|
-
desc "deploy", "Deploy packages"
|
53
|
-
shared_options
|
54
|
-
def deploy
|
55
|
-
self.class.construct_packager(options).deploy!
|
56
|
-
end
|
57
|
-
|
58
|
-
desc "verify", "Verify targets params"
|
59
|
-
shared_options
|
60
|
-
def verify
|
61
|
-
self.class.construct_packager(options).verify!
|
62
|
-
end
|
2
|
+
module Cli
|
63
3
|
end # Cli
|
64
4
|
end # Buildizer
|
data/lib/buildizer/docker.rb
CHANGED
@@ -32,9 +32,9 @@ module Buildizer
|
|
32
32
|
|
33
33
|
def with_cache(&blk)
|
34
34
|
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) [WARN]") unless cache
|
35
|
+
"(BUILDIZER_DOCKER_CACHE, BUILDIZER_DOCKER_CACHE_USERNAME," +
|
36
|
+
" BUILDIZER_DOCKER_CACHE_PASSWORD, BUILDIZER_DOCKER_CACHE_EMAIL," +
|
37
|
+
" BUILDIZER_DOCKER_CACHE_SERVER) [WARN]") unless cache
|
38
38
|
|
39
39
|
cache_login! if cache
|
40
40
|
begin
|
@@ -49,7 +49,7 @@ module Buildizer
|
|
49
49
|
|
50
50
|
cmd = ["docker login"]
|
51
51
|
cmd << "--email=#{cache[:email]}" if cache[:email]
|
52
|
-
cmd << "--username=#{cache[:
|
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
55
|
builder.packager.command! cmd.join(' '), desc: "Docker cache account login"
|
@@ -61,16 +61,30 @@ module Buildizer
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def pull_image(image)
|
64
|
-
builder.packager.command!
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
64
|
+
builder.packager.command! "docker pull #{image.base_image}", desc: "Pull docker base image #{image.base_image}"
|
65
|
+
if cache
|
66
|
+
pull_cache_res = builder.packager.command(
|
67
|
+
"docker pull #{image.cache_name}",
|
68
|
+
desc: "Try to pull docker cache image #{image.cache_name}"
|
69
|
+
)
|
70
|
+
if pull_cache_res.status.success?
|
71
|
+
builder.packager.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.packager.command! "docker rmi #{image.cache_name}",
|
75
|
+
desc: "Remove cache image #{image.cache_name}"
|
76
|
+
end
|
77
|
+
end
|
69
78
|
end
|
70
79
|
|
71
80
|
def push_image(image)
|
72
|
-
|
73
|
-
|
81
|
+
if cache
|
82
|
+
builder.packager.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.packager.command! "docker push #{image.cache_name}",
|
86
|
+
desc: "Push cache image #{image.cache_name}"
|
87
|
+
end
|
74
88
|
end
|
75
89
|
|
76
90
|
def build_image!(target)
|
@@ -78,7 +92,7 @@ module Buildizer
|
|
78
92
|
|
79
93
|
target.image_work_path.join('Dockerfile').write [*target.image.instructions, nil].join("\n")
|
80
94
|
builder.packager.command! "docker build -t #{target.image.name} #{target.image_work_path}",
|
81
|
-
|
95
|
+
desc: "Build docker image #{target.image.name}"
|
82
96
|
|
83
97
|
push_image target.image
|
84
98
|
end
|
data/lib/buildizer/image/base.rb
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module BuildizerConfMod
|
4
|
+
using Refine
|
5
|
+
|
6
|
+
def buildizer_conf_path
|
7
|
+
package_path.join('Buildizer')
|
8
|
+
end
|
9
|
+
|
10
|
+
def buildizer_conf
|
11
|
+
@buildizer_conf ||= buildizer_conf_path.load_yaml
|
12
|
+
end
|
13
|
+
|
14
|
+
def buildizer_conf_update(conf)
|
15
|
+
buildizer_conf.update conf
|
16
|
+
end
|
17
|
+
|
18
|
+
def buildizer_conf_setup!
|
19
|
+
write_path(buildizer_conf_path, YAML.dump(buildizer_conf))
|
20
|
+
end
|
21
|
+
|
22
|
+
def package_name
|
23
|
+
buildizer_conf['package_name']
|
24
|
+
end
|
25
|
+
|
26
|
+
def package_version
|
27
|
+
buildizer_conf['package_version']
|
28
|
+
end
|
29
|
+
|
30
|
+
def before_prepare
|
31
|
+
Array(buildizer_conf['before_prepare'])
|
32
|
+
end
|
33
|
+
|
34
|
+
def after_prepare
|
35
|
+
Array(buildizer_conf['after_prepare'])
|
36
|
+
end
|
37
|
+
|
38
|
+
def targets
|
39
|
+
targets = Array(buildizer_conf['target'])
|
40
|
+
restrict_targets = ENV['BUILDIZER_TARGET']
|
41
|
+
restrict_targets = restrict_targets.split(',').map(&:strip) if restrict_targets
|
42
|
+
targets = targets & restrict_targets if restrict_targets
|
43
|
+
targets
|
44
|
+
end
|
45
|
+
|
46
|
+
def prepare
|
47
|
+
Array(buildizer_conf['prepare'])
|
48
|
+
end
|
49
|
+
|
50
|
+
def build_dep
|
51
|
+
Array(buildizer_conf['build_dep']).to_set
|
52
|
+
end
|
53
|
+
|
54
|
+
def before_build
|
55
|
+
Array(buildizer_conf['before_build'])
|
56
|
+
end
|
57
|
+
|
58
|
+
def maintainer
|
59
|
+
buildizer_conf['maintainer']
|
60
|
+
end
|
61
|
+
end # BuildizerConfMod
|
62
|
+
end # Packager
|
63
|
+
end # Buildizer
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module CiMod
|
4
|
+
def ci_name
|
5
|
+
@ci_name ||= begin
|
6
|
+
case git_remote_url.to_s
|
7
|
+
when /github/
|
8
|
+
'travis'
|
9
|
+
when /gitlab/
|
10
|
+
'gitlab-ci'
|
11
|
+
else
|
12
|
+
raise Error, error: :input_error, message: "unable to determine ci to use"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def ci
|
18
|
+
@ci ||= begin
|
19
|
+
klass = {'travis' => Ci::Travis,
|
20
|
+
'gitlab-ci' => Ci::GitlabCi}[ci_name.to_s.downcase]
|
21
|
+
raise Error, message: "unknown ci '#{ci_name}'" unless klass
|
22
|
+
klass.new(self)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end # CiMod
|
26
|
+
end # Packager
|
27
|
+
end # Buildizer
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module DockerCacheMod
|
4
|
+
def docker_cache
|
5
|
+
return unless repo = ENV['BUILDIZER_DOCKER_CACHE']
|
6
|
+
{user: ENV['BUILDIZER_DOCKER_CACHE_USERNAME'],
|
7
|
+
password: ENV['BUILDIZER_DOCKER_CACHE_PASSWORD'],
|
8
|
+
email: ENV['BUILDIZER_DOCKER_CACHE_EMAIL'],
|
9
|
+
server: ENV['BUILDIZER_DOCKER_CACHE_SERVER'],
|
10
|
+
repo: repo}
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup_docker_cache_repo
|
14
|
+
cli.options['docker_cache']
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_docker_cache_org
|
18
|
+
setup_docker_cache_repo.split('/').first
|
19
|
+
end
|
20
|
+
|
21
|
+
def setup_docker_cache_user
|
22
|
+
cli.options['docker_cache_user'] || user_settings_docker_cache_user_list(setup_docker_cache_org).first
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup_docker_cache_password
|
26
|
+
@setup_docker_cache_password ||= begin
|
27
|
+
settings_password = user_settings_docker_cache_user(setup_docker_cache_user)['password']
|
28
|
+
if cli.options['reset_docker_cache_password'] or settings_password.nil?
|
29
|
+
cli.ask("Docker cache user '#{setup_docker_cache_user}' password:", echo: false).tap{puts}
|
30
|
+
else
|
31
|
+
settings_password
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def setup_docker_cache_email
|
37
|
+
cli.options['docker_cache_email'] || user_settings_docker_cache_user(setup_docker_cache_user)['email']
|
38
|
+
end
|
39
|
+
|
40
|
+
def setup_docker_cache_server
|
41
|
+
cli.options['docker_cache_server'] || user_settings_docker_cache_user(setup_docker_cache_user)['server']
|
42
|
+
end
|
43
|
+
|
44
|
+
def user_settings_docker_cache
|
45
|
+
user_settings['docker_cache'] ||= {}
|
46
|
+
end
|
47
|
+
|
48
|
+
def user_settings_docker_cache_org(org)
|
49
|
+
user_settings_docker_cache['org'] ||= {}
|
50
|
+
user_settings_docker_cache['org'][org] ||= {}
|
51
|
+
end
|
52
|
+
|
53
|
+
def user_settings_docker_cache_user(user)
|
54
|
+
user_settings_docker_cache['user'] ||= {}
|
55
|
+
user_settings_docker_cache['user'][user] ||= {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def user_settings_docker_cache_user_list(org)
|
59
|
+
user_settings_docker_cache_org(org)['user'] ||= []
|
60
|
+
end
|
61
|
+
|
62
|
+
def user_settings_docker_cache_repo_list(org)
|
63
|
+
user_settings_docker_cache_org(org)['repo'] ||= []
|
64
|
+
end
|
65
|
+
|
66
|
+
def docker_cache_update_settings?
|
67
|
+
not setup_docker_cache_repo.nil?
|
68
|
+
end
|
69
|
+
|
70
|
+
def docker_cache_clear_settings?
|
71
|
+
cli.options['clear_docker_cache']
|
72
|
+
end
|
73
|
+
|
74
|
+
def docker_cache_setup!
|
75
|
+
if docker_cache_update_settings?
|
76
|
+
raise Error, error: :input_error,
|
77
|
+
message: "docker cache user required" unless setup_docker_cache_user
|
78
|
+
raise Error, error: :input_error,
|
79
|
+
message: "bad docker cache user" if setup_docker_cache_user.empty?
|
80
|
+
|
81
|
+
user_list = user_settings_docker_cache_user_list(setup_docker_cache_org)
|
82
|
+
user_list.push(setup_docker_cache_user) unless user_list.include? setup_docker_cache_user
|
83
|
+
|
84
|
+
raise Error, error: :input_error,
|
85
|
+
message: 'docker cache email required' unless setup_docker_cache_email
|
86
|
+
raise Error, error: :input_error,
|
87
|
+
message: "bad docker cache email" unless setup_docker_cache_email =~ /.+@.+/
|
88
|
+
|
89
|
+
user_settings_docker_cache_user(setup_docker_cache_user)['email'] = setup_docker_cache_email
|
90
|
+
user_settings_docker_cache_user(setup_docker_cache_user)['server'] = setup_docker_cache_server
|
91
|
+
user_settings_docker_cache_user(setup_docker_cache_user)['password'] = setup_docker_cache_password
|
92
|
+
|
93
|
+
repo_list = user_settings_docker_cache_repo_list(setup_docker_cache_org)
|
94
|
+
repo_list.push(setup_docker_cache_repo) unless repo_list.include? setup_docker_cache_repo
|
95
|
+
|
96
|
+
user_settings_save!
|
97
|
+
end
|
98
|
+
|
99
|
+
ci.docker_cache_setup!
|
100
|
+
end
|
101
|
+
end # DockerCacheMod
|
102
|
+
end # Packager
|
103
|
+
end # Buildizer
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module GitMod
|
4
|
+
def git_available?
|
5
|
+
res = raw_command 'git status'
|
6
|
+
res.status.success?
|
7
|
+
end
|
8
|
+
|
9
|
+
def git_remote_url
|
10
|
+
return unless git_available?
|
11
|
+
res = raw_command 'git config --get remote.origin.url'
|
12
|
+
res.stdout.strip
|
13
|
+
end
|
14
|
+
end # GitMod
|
15
|
+
end # Packager
|
16
|
+
end # Buildizer
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module MiscMod
|
4
|
+
def command(*args, do_raise: false, log_failure: nil, **kwargs)
|
5
|
+
if debug
|
6
|
+
Shellfold.run(*args, log_failure: log_failure, **kwargs).tap do |cmd|
|
7
|
+
if not cmd.status.success? and do_raise
|
8
|
+
raise Error.new(error: :error, message: "external command error")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
else
|
12
|
+
raw_command(*args, do_raise: do_raise, **kwargs)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def command!(*args, **kwargs)
|
17
|
+
command(*args, do_raise: true, log_failure: true, **kwargs)
|
18
|
+
end
|
19
|
+
|
20
|
+
def raw_command(*args, do_raise: false, **kwargs)
|
21
|
+
Mixlib::ShellOut.new(*args, **kwargs).tap do |cmd|
|
22
|
+
cmd.run_command
|
23
|
+
if not cmd.status.success? and do_raise
|
24
|
+
raise Error.new(error: :error,
|
25
|
+
message: "external command error: " +
|
26
|
+
[args.join(' '),
|
27
|
+
cmd.stdout + cmd.stderr].reject(&:empty?).join(' => '))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def raw_command!(*args, **kwargs)
|
33
|
+
raw_command(*args, do_raise: true, **kwargs)
|
34
|
+
end
|
35
|
+
|
36
|
+
def write_path(path, value)
|
37
|
+
with_log(desc: "Write path #{path}") do |&fin|
|
38
|
+
recreate = path.exist?
|
39
|
+
if path.exist?
|
40
|
+
if path.read == value
|
41
|
+
fin.call 'OK'
|
42
|
+
else
|
43
|
+
path.write value
|
44
|
+
fin.call 'UPDATED'
|
45
|
+
end
|
46
|
+
else
|
47
|
+
path.write value
|
48
|
+
fin.call 'CREATED'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def with_log(desc: nil, &blk)
|
54
|
+
puts(" #{desc}") if debug and desc
|
55
|
+
blk.call do |status|
|
56
|
+
puts("=> #{desc} [#{status || 'OK'}]") if debug and desc
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end # MiscMod
|
60
|
+
end # Packager
|
61
|
+
end # Buildizer
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module OvercommitMod
|
4
|
+
using Refine
|
5
|
+
|
6
|
+
def overcommit_conf_path
|
7
|
+
package_path.join('.overcommit.yml')
|
8
|
+
end
|
9
|
+
|
10
|
+
def overcommit_hooks_path
|
11
|
+
package_path.join('.git-hooks')
|
12
|
+
end
|
13
|
+
|
14
|
+
def overcommit_hooks_pre_commit_path
|
15
|
+
overcommit_hooks_path.join('pre_commit')
|
16
|
+
end
|
17
|
+
|
18
|
+
def overcommit_conf
|
19
|
+
@overcommit_conf ||= overcommit_conf_path.load_yaml
|
20
|
+
end
|
21
|
+
|
22
|
+
def overcommit_conf_raw
|
23
|
+
YAML.dump(overcommit_conf)
|
24
|
+
end
|
25
|
+
|
26
|
+
def overcommit_conf_dump!
|
27
|
+
write_path overcommit_conf_path, overcommit_conf_raw
|
28
|
+
command! 'overcommit --sign'
|
29
|
+
end
|
30
|
+
|
31
|
+
def overcommit_setup!
|
32
|
+
overcommit_hooks_path.mkpath
|
33
|
+
overcommit_conf_dump!
|
34
|
+
command! 'overcommit --install'
|
35
|
+
end
|
36
|
+
|
37
|
+
def overcommit_verify_setup!
|
38
|
+
hookcode = <<-HOOKCODE
|
39
|
+
module Overcommit::Hook::PreCommit
|
40
|
+
class BuildizerVerify < Base
|
41
|
+
def run
|
42
|
+
return :fail unless system("buildizer verify")
|
43
|
+
:pass
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
HOOKCODE
|
48
|
+
|
49
|
+
_overcommit_add_precommit!(:buildizer_verify, hookcode, desc: "Verify Buildizer conf file")
|
50
|
+
end
|
51
|
+
|
52
|
+
def overcommit_ci_setup!
|
53
|
+
hookcode = <<-HOOKCODE
|
54
|
+
module Overcommit::Hook::PreCommit
|
55
|
+
class BuildizerCiVerify < Base
|
56
|
+
def run
|
57
|
+
return :fail unless system("buildizer setup --verify-ci")
|
58
|
+
:pass
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
HOOKCODE
|
63
|
+
|
64
|
+
_overcommit_add_precommit!(:buildizer_ci_verify, hookcode,
|
65
|
+
desc: "Verify #{ci.ci_name} configuration is up to date")
|
66
|
+
end
|
67
|
+
|
68
|
+
def _overcommit_add_precommit!(name, hookcode, desc: nil, required: true)
|
69
|
+
hook_name = name.to_s.split('_').map(&:capitalize).join
|
70
|
+
overcommit_conf['PreCommit'] ||= {}
|
71
|
+
overcommit_conf['PreCommit'][hook_name] = {}.tap do |hook|
|
72
|
+
hook['enabled'] = true
|
73
|
+
hook['required'] = required
|
74
|
+
hook['desc'] = desc if desc
|
75
|
+
end
|
76
|
+
overcommit_conf_dump!
|
77
|
+
|
78
|
+
overcommit_hooks_pre_commit_path.mkpath
|
79
|
+
path = overcommit_hooks_pre_commit_path.join("#{name}.rb")
|
80
|
+
write_path path, hookcode
|
81
|
+
command! 'overcommit --sign pre-commit'
|
82
|
+
end
|
83
|
+
end # OvercommitMod
|
84
|
+
end # Packager
|
85
|
+
end # Buildizer
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module PackageCloudMod
|
4
|
+
def package_cloud_repo
|
5
|
+
ENV['PACKAGECLOUD'].to_s.split(',')
|
6
|
+
end
|
7
|
+
|
8
|
+
def package_cloud_org
|
9
|
+
default_token = ENV['PACKAGECLOUD_TOKEN']
|
10
|
+
package_cloud_repo.map {|repo| repo.split('/').first}.uniq.map do |org|
|
11
|
+
[org, ENV["PACKAGECLOUD_TOKEN_#{org.upcase}"] || default_token]
|
12
|
+
end.to_h
|
13
|
+
end
|
14
|
+
|
15
|
+
def package_cloud
|
16
|
+
tokens = package_cloud_org
|
17
|
+
package_cloud_repo.map do |repo|
|
18
|
+
org = repo.split('/').first
|
19
|
+
token = tokens[org]
|
20
|
+
{org: org, repo: repo, token: token}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def user_settings_package_cloud
|
25
|
+
user_settings['package_cloud'] ||= {}
|
26
|
+
end
|
27
|
+
|
28
|
+
def user_settings_package_cloud_token
|
29
|
+
user_settings_package_cloud['token'] ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup_package_cloud_repo_list
|
33
|
+
Array(cli.options['package_cloud']).uniq
|
34
|
+
end
|
35
|
+
|
36
|
+
def setup_package_cloud_repo_desc_list
|
37
|
+
setup_package_cloud_repo_list.map do |repo|
|
38
|
+
org, name = repo.split('/')
|
39
|
+
{repo: repo, org: org, name: name, token: user_settings_package_cloud_token[org]}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def setup_package_cloud_org_desc_list
|
44
|
+
setup_package_cloud_repo_desc_list.map {|desc| {org: desc[:org], token: desc[:token]}}.uniq
|
45
|
+
end
|
46
|
+
|
47
|
+
def setup_package_cloud_org_list
|
48
|
+
setup_package_cloud_repo_desc_list.map {|desc| desc[:org]}.uniq
|
49
|
+
end
|
50
|
+
|
51
|
+
def package_cloud_update_settings?
|
52
|
+
cli.options['package_cloud']
|
53
|
+
end
|
54
|
+
|
55
|
+
def package_cloud_clear_settings?
|
56
|
+
cli.options['clear_package_cloud']
|
57
|
+
end
|
58
|
+
|
59
|
+
def package_cloud_setup!
|
60
|
+
if package_cloud_update_settings?
|
61
|
+
update_user_settings = false
|
62
|
+
setup_package_cloud_org_list.each do |org|
|
63
|
+
if user_settings_package_cloud_token[org].nil? or
|
64
|
+
cli.options['reset_package_cloud_token']
|
65
|
+
token = cli.ask("Enter token for package_cloud org '#{org}':",
|
66
|
+
echo: false, default: 'none').tap{puts}
|
67
|
+
token = (token == 'none' ? nil : token)
|
68
|
+
if user_settings_package_cloud_token[org] != token
|
69
|
+
user_settings_package_cloud_token[org] = token
|
70
|
+
update_user_settings = true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
user_settings_save! if update_user_settings
|
75
|
+
end
|
76
|
+
|
77
|
+
ci.package_cloud_setup!
|
78
|
+
end
|
79
|
+
end # PackageCloudMod
|
80
|
+
end # Packager
|
81
|
+
end # Buildizer
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module PackageVersionTagMod
|
4
|
+
using Refine
|
5
|
+
|
6
|
+
def package_version_tag_required_for_deploy?
|
7
|
+
ENV['BUILDIZER_REQUIRE_TAG'].to_s.on?
|
8
|
+
end
|
9
|
+
|
10
|
+
def package_version_tag
|
11
|
+
ci.git_tag
|
12
|
+
end
|
13
|
+
end # PackageVersionTagMod
|
14
|
+
end # Packager
|
15
|
+
end # Buildizer
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module ProjectSettingsMod
|
4
|
+
using Refine
|
5
|
+
|
6
|
+
def project_settings_path
|
7
|
+
package_path.join('.buildizer.yml')
|
8
|
+
end
|
9
|
+
|
10
|
+
def project_settings
|
11
|
+
@project_settings ||= begin
|
12
|
+
(project_settings_path.load_yaml || {}).tap do |settings|
|
13
|
+
settings['master'] = cli.options['master'] if cli.options.key? 'master'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def project_settings_save!
|
19
|
+
write_path(project_settings_path, YAML.dump(project_settings))
|
20
|
+
end
|
21
|
+
|
22
|
+
def project_settings_setup!
|
23
|
+
project_settings_save!
|
24
|
+
end
|
25
|
+
end # ProjectSettingsMod
|
26
|
+
end # Packager
|
27
|
+
end # Buildizer
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Buildizer
|
2
|
+
class Packager
|
3
|
+
module UserSettingsMod
|
4
|
+
using Refine
|
5
|
+
|
6
|
+
def user_settings_path
|
7
|
+
work_path.join('settings.yml')
|
8
|
+
end
|
9
|
+
|
10
|
+
def user_settings
|
11
|
+
@user_settings ||= (user_settings_path.load_yaml || {})
|
12
|
+
end
|
13
|
+
|
14
|
+
def user_settings_save!
|
15
|
+
write_path(user_settings_path, YAML.dump(user_settings))
|
16
|
+
user_settings_path.chmod(0600)
|
17
|
+
end
|
18
|
+
|
19
|
+
def user_settings_setup!
|
20
|
+
user_settings_save!
|
21
|
+
end
|
22
|
+
end # UserSettingsMod
|
23
|
+
end # Packager
|
24
|
+
end # Buildizer
|