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
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NzJlYTY0NmI3OGFiMTRmOGEwMjg4ZmY2YjFkZmFkNTJlZjc5ZDQyZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTdiYzQ0YWNjYjZmM2VlYmI3Mzk2ZjNlODNkZjFjYmVkOWZkZTY4ZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGVlZmNiYzFkN2U3NDM5NWVmZDg0ZDNmNmU0ZjJiN2UxZmE3OTg0YWJlYWIx
|
10
|
+
NGQwYTg4NTA4MDkzYTdhZDFjYzI3MzJkNGI3MTVlZTNlNDlhZGJjNzhkOGRl
|
11
|
+
NTA5OGNlN2Y5Y2ZmNzMxOTQ1MDE1OTI1ZDNjZmM1ZTkxODRhNmE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTU5ZTRhYTgyOTJhMWQ4ZDY4ZjQ1YWFlZWU3ODk4MGMyOGMyMDgxYTBlZWNh
|
14
|
+
ZWVjYTE4NzUzMGYzOTIwMTIyMTQ1ZGE2MWI4NTUwYmIxY2JmM2VmZWI5MTM1
|
15
|
+
OGIxYzJhYzBiNzhhYjE5NjQ1OTZjZDdhZTcxNDEyMWViZWU0YWM=
|
data/Gemfile.lock
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/flant/shellfold.git
|
3
|
-
revision:
|
3
|
+
revision: 4db6a6a953412f2973fb6a814a0517cd04b0658c
|
4
4
|
specs:
|
5
5
|
shellfold (0.0.3)
|
6
6
|
mixlib-shellout (>= 2.2.6, < 3.0)
|
@@ -8,8 +8,9 @@ GIT
|
|
8
8
|
PATH
|
9
9
|
remote: .
|
10
10
|
specs:
|
11
|
-
buildizer (0.0.
|
11
|
+
buildizer (0.0.8)
|
12
12
|
net_status (>= 0.0.1, < 1.0)
|
13
|
+
overcommit (>= 0.33.0, < 1.0)
|
13
14
|
package_cloud (>= 0.2, < 1.0)
|
14
15
|
shellfold (>= 0.0.1, < 1.0)
|
15
16
|
thor (>= 0.19.1, < 1.0)
|
@@ -21,6 +22,8 @@ GEM
|
|
21
22
|
backports (3.6.8)
|
22
23
|
binding_of_caller (0.7.2)
|
23
24
|
debug_inspector (>= 0.0.1)
|
25
|
+
childprocess (0.5.9)
|
26
|
+
ffi (~> 1.0, >= 1.0.11)
|
24
27
|
coderay (1.1.1)
|
25
28
|
colorize (0.6.0)
|
26
29
|
debug_inspector (0.0.2)
|
@@ -40,6 +43,7 @@ GEM
|
|
40
43
|
net-http-persistent (>= 2.7)
|
41
44
|
net-http-pipeline
|
42
45
|
highline (1.6.20)
|
46
|
+
iniparse (1.4.2)
|
43
47
|
json (1.8.3)
|
44
48
|
json_pure (1.8.1)
|
45
49
|
launchy (2.4.3)
|
@@ -52,6 +56,9 @@ GEM
|
|
52
56
|
net-http-persistent (2.9.4)
|
53
57
|
net-http-pipeline (1.0.1)
|
54
58
|
net_status (0.0.2)
|
59
|
+
overcommit (0.33.0)
|
60
|
+
childprocess (~> 0.5.8)
|
61
|
+
iniparse (~> 1.4)
|
55
62
|
package_cloud (0.2.29)
|
56
63
|
colorize (= 0.6.0)
|
57
64
|
highline (= 1.6.20)
|
data/bin/buildizer
CHANGED
data/buildizer.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.add_dependency "net_status", ">= 0.0.1", "< 1.0"
|
21
21
|
spec.add_dependency "shellfold", ">= 0.0.1", "< 1.0"
|
22
22
|
spec.add_dependency "package_cloud", ">= 0.2", "< 1.0"
|
23
|
+
spec.add_dependency "overcommit", ">= 0.33.0", "< 1.0"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.7"
|
25
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -95,7 +95,7 @@ module Buildizer
|
|
95
95
|
def _required_params!(required_params, params)
|
96
96
|
Array(required_params).each do |param|
|
97
97
|
unless params[param] and not params[param].to_s.empty?
|
98
|
-
raise Error, error: :input_error, message: "#{param} is not defined"
|
98
|
+
raise Error, error: :input_error, message: "Buildizer #{param} is not defined"
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -107,7 +107,7 @@ module Buildizer
|
|
107
107
|
def verify
|
108
108
|
targets.tap do |res|
|
109
109
|
unless res.any?
|
110
|
-
raise Error, error: :input_error, message: "target is not defined"
|
110
|
+
raise Error, error: :input_error, message: "Buildizer target is not defined"
|
111
111
|
end
|
112
112
|
end
|
113
113
|
end
|
@@ -170,7 +170,7 @@ module Buildizer
|
|
170
170
|
|
171
171
|
packager.package_cloud_org.each do |org, token|
|
172
172
|
unless token
|
173
|
-
warn "No
|
173
|
+
warn "No package cloud token defined for org '#{org}' " +
|
174
174
|
"(PACKAGECLOUD_TOKEN or PACKAGECLOUD_TOKEN_#{org.upcase}) [WARN]"
|
175
175
|
end
|
176
176
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Ci
|
3
|
+
class Base
|
4
|
+
using Refine
|
5
|
+
|
6
|
+
attr_reader :packager
|
7
|
+
|
8
|
+
def initialize(packager)
|
9
|
+
super()
|
10
|
+
|
11
|
+
@packager = packager
|
12
|
+
end
|
13
|
+
|
14
|
+
def conf
|
15
|
+
@conf ||= conf_path.load_yaml
|
16
|
+
end
|
17
|
+
|
18
|
+
def conf_path
|
19
|
+
packager.package_path.join(conf_file_name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def conf_file_name
|
23
|
+
".#{ci_name}.yml"
|
24
|
+
end
|
25
|
+
|
26
|
+
def ci_name
|
27
|
+
self.class.ci_name
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup!
|
31
|
+
raise
|
32
|
+
end
|
33
|
+
|
34
|
+
def configuration_actual?
|
35
|
+
raise
|
36
|
+
end
|
37
|
+
|
38
|
+
def git_tag
|
39
|
+
res = _git_tag.to_s
|
40
|
+
if res.empty? then nil else res end
|
41
|
+
end
|
42
|
+
|
43
|
+
def _git_tag
|
44
|
+
raise
|
45
|
+
end
|
46
|
+
|
47
|
+
def buildizer_install_instructions(master: nil)
|
48
|
+
if master
|
49
|
+
['git clone https://github.com/flant/buildizer ~/buildizer',
|
50
|
+
'echo "export BUNDLE_GEMFILE=~/buildizer/Gemfile" | tee -a ~/.bashrc',
|
51
|
+
'export BUNDLE_GEMFILE=~/buildizer/Gemfile',
|
52
|
+
'gem install bundler',
|
53
|
+
'gem install overcommit',
|
54
|
+
'bundle install',
|
55
|
+
]
|
56
|
+
else
|
57
|
+
'gem install buildizer'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def package_cloud_setup!
|
62
|
+
raise
|
63
|
+
end
|
64
|
+
|
65
|
+
def docker_cache_setup!
|
66
|
+
raise
|
67
|
+
end
|
68
|
+
|
69
|
+
class << self
|
70
|
+
def ci_name
|
71
|
+
raise
|
72
|
+
end
|
73
|
+
end # << self
|
74
|
+
end # Base
|
75
|
+
end # Ci
|
76
|
+
end # Buildizer
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Ci
|
3
|
+
class Travis
|
4
|
+
module DockerCacheMod
|
5
|
+
class << self
|
6
|
+
def included(base)
|
7
|
+
base.class_eval do
|
8
|
+
env_vars prefix: :docker_cache, repo: 'BUILDIZER_DOCKER_CACHE',
|
9
|
+
user: 'BUILDIZER_DOCKER_CACHE_USERNAME',
|
10
|
+
password: 'BUILDIZER_DOCKER_CACHE_PASSWORD',
|
11
|
+
email: 'BUILDIZER_DOCKER_CACHE_EMAIL',
|
12
|
+
server: 'BUILDIZER_DOCKER_CACHE_SERVER'
|
13
|
+
end # class_eval
|
14
|
+
end
|
15
|
+
end # << self
|
16
|
+
|
17
|
+
def docker_cache_setup!
|
18
|
+
if packager.docker_cache_clear_settings?
|
19
|
+
with_travis do
|
20
|
+
packager.with_log(desc: "Travis docker cache settings") do |&fin|
|
21
|
+
docker_cache_repo_var_delete!
|
22
|
+
docker_cache_user_var_delete!
|
23
|
+
docker_cache_password_var_delete!
|
24
|
+
docker_cache_email_var_delete!
|
25
|
+
docker_cache_server_var_delete!
|
26
|
+
|
27
|
+
fin.call 'DELETED'
|
28
|
+
end # with_log
|
29
|
+
end # with_travis
|
30
|
+
elsif packager.docker_cache_update_settings?
|
31
|
+
with_travis do
|
32
|
+
packager.with_log(desc: "Travis docker cache settings") do |&fin|
|
33
|
+
docker_cache_repo_var_update! packager.setup_docker_cache_repo, public: true
|
34
|
+
docker_cache_user_var_update! packager.setup_docker_cache_user, public: false
|
35
|
+
docker_cache_password_var_update! packager.setup_docker_cache_password, public: false
|
36
|
+
docker_cache_email_var_update! packager.setup_docker_cache_email, public: false
|
37
|
+
docker_cache_server_var_update! packager.setup_docker_cache_server, public: true
|
38
|
+
|
39
|
+
fin.call 'UPDATED'
|
40
|
+
end # with_log
|
41
|
+
end # with_travis
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end # DockerCacheMod
|
45
|
+
end # Travis
|
46
|
+
end # Ci
|
47
|
+
end # Buildizer
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Ci
|
3
|
+
class Travis
|
4
|
+
module PackageCloudMod
|
5
|
+
class << self
|
6
|
+
def included(base)
|
7
|
+
base.class_eval do
|
8
|
+
env_vars prefix: :package_cloud, repo_list: 'PACKAGECLOUD'
|
9
|
+
end # class_eval
|
10
|
+
end
|
11
|
+
end # << self
|
12
|
+
|
13
|
+
def package_cloud_token_var_name(org: nil)
|
14
|
+
if org
|
15
|
+
"PACKAGECLOUD_TOKEN_#{org.upcase}"
|
16
|
+
else
|
17
|
+
'PACKAGECLOUD_TOKEN'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def package_cloud_token_var(org: nil)
|
22
|
+
repo.env_vars[package_cloud_token_var_name(org: org)]
|
23
|
+
end
|
24
|
+
|
25
|
+
def package_cloud_token_var_delete!(**kwargs)
|
26
|
+
var = package_cloud_token_var(**kwargs)
|
27
|
+
var.delete if var
|
28
|
+
end
|
29
|
+
|
30
|
+
def package_cloud_token_var_update!(value, org: nil, **kwargs)
|
31
|
+
if value
|
32
|
+
repo.env_vars.upsert(package_cloud_token_var_name(org: org), value, **kwargs)
|
33
|
+
else
|
34
|
+
package_cloud_token_var_delete!(org: org)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def package_cloud_setup!
|
39
|
+
if packager.package_cloud_clear_settings?
|
40
|
+
with_travis do
|
41
|
+
repo_list = []
|
42
|
+
repo_list = package_cloud_repo_list_var.value.split(',') if package_cloud_repo_list_var
|
43
|
+
org_list = repo_list.map {|repo| repo.split('/').first}.uniq
|
44
|
+
org_list.each do |org|
|
45
|
+
packager.with_log(desc: "Travis package cloud token for '#{org}'") do |&fin|
|
46
|
+
package_cloud_token_var_delete! org: org
|
47
|
+
fin.call 'DELETED'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
packager.with_log(desc: "Travis package cloud repo list") do |&fin|
|
52
|
+
package_cloud_repo_list_var_delete!
|
53
|
+
fin.call 'DELETED'
|
54
|
+
end
|
55
|
+
end # with_travis
|
56
|
+
elsif packager.package_cloud_update_settings?
|
57
|
+
with_travis do
|
58
|
+
packager.with_log(desc: "Travis package cloud repo list") do |&fin|
|
59
|
+
package_cloud_repo_list_var_update! packager.setup_package_cloud_repo_list.join(','), public: true
|
60
|
+
fin.call 'UPDATED'
|
61
|
+
end # with_log
|
62
|
+
|
63
|
+
packager.setup_package_cloud_org_desc_list.each do |desc|
|
64
|
+
next unless desc[:token]
|
65
|
+
packager.with_log(desc: "Travis package cloud token for '#{desc[:org]}'") do |&fin|
|
66
|
+
package_cloud_token_var_update! desc[:token], org: desc[:org], public: false
|
67
|
+
fin.call 'UPDATED'
|
68
|
+
end # with_log
|
69
|
+
end
|
70
|
+
end # with_travis
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end # PackageCloudMod
|
74
|
+
end # Travis
|
75
|
+
end # Ci
|
76
|
+
end # Buildizer
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Ci
|
3
|
+
class Travis
|
4
|
+
module PackageVersionTagMod
|
5
|
+
using Refine
|
6
|
+
|
7
|
+
def require_tag_var_name
|
8
|
+
'BUILDIZER_REQUIRE_TAG'
|
9
|
+
end
|
10
|
+
|
11
|
+
def require_tag_var
|
12
|
+
repo.env_vars[require_tag_var_name]
|
13
|
+
end
|
14
|
+
|
15
|
+
def require_tag_var_upsert(**kwargs)
|
16
|
+
repo.env_vars.upsert(require_tag_var_name, kwargs.delete(:value), public: true, **kwargs)
|
17
|
+
end
|
18
|
+
|
19
|
+
def require_tag_setup!
|
20
|
+
with_travis do
|
21
|
+
packager.with_log(desc: "Travis require tag for deploy") do |&fin|
|
22
|
+
if packager.cli.options['require_tag'].nil?
|
23
|
+
unless require_tag_var
|
24
|
+
require_tag_var_upsert(value: true.to_env)
|
25
|
+
fin.call 'ENABLED'
|
26
|
+
else
|
27
|
+
fin.call
|
28
|
+
end
|
29
|
+
elsif packager.cli.options['require_tag']
|
30
|
+
require_tag_var_upsert(value: true.to_env)
|
31
|
+
fin.call 'ENABLED'
|
32
|
+
else
|
33
|
+
require_tag_var_upsert(value: false.to_env)
|
34
|
+
fin.call 'DISABLED'
|
35
|
+
end
|
36
|
+
end # with_log
|
37
|
+
end # with_travis
|
38
|
+
end
|
39
|
+
end # PackageVersionTagMod
|
40
|
+
end # Travis
|
41
|
+
end # Ci
|
42
|
+
end # Buildizer
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Ci
|
3
|
+
class Travis < Base
|
4
|
+
class << self
|
5
|
+
def ci_name
|
6
|
+
'travis'
|
7
|
+
end
|
8
|
+
|
9
|
+
def env_vars(prefix:, **kwargs)
|
10
|
+
kwargs.each do |name, var_name|
|
11
|
+
define_method("#{prefix}_#{name}_var") {repo.env_vars[var_name]}
|
12
|
+
define_method("#{prefix}_#{name}_var_name") {var_name}
|
13
|
+
define_method("#{prefix}_#{name}_var_delete!") do
|
14
|
+
var = send("#{prefix}_#{name}_var")
|
15
|
+
var.delete if var
|
16
|
+
end
|
17
|
+
define_method("#{prefix}_#{name}_var_update!") do |value, **kwargs|
|
18
|
+
if value
|
19
|
+
repo.env_vars.upsert(var_name, value, **kwargs)
|
20
|
+
else
|
21
|
+
send("#{prefix}_#{name}_var_delete!")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end # each
|
25
|
+
end
|
26
|
+
end # << self
|
27
|
+
|
28
|
+
autoload :PackageCloudMod, 'buildizer/ci/travis/package_cloud_mod'
|
29
|
+
autoload :DockerCacheMod, 'buildizer/ci/travis/docker_cache_mod'
|
30
|
+
autoload :PackageVersionTagMod, 'buildizer/ci/travis/package_version_tag_mod'
|
31
|
+
|
32
|
+
include PackageCloudMod
|
33
|
+
include DockerCacheMod
|
34
|
+
include PackageVersionTagMod
|
35
|
+
|
36
|
+
def setup!
|
37
|
+
packager.write_path(conf_path, YAML.dump(actual_conf))
|
38
|
+
require_tag_setup!
|
39
|
+
end
|
40
|
+
|
41
|
+
def configuration_actual?
|
42
|
+
conf == actual_conf
|
43
|
+
end
|
44
|
+
|
45
|
+
def actual_conf
|
46
|
+
install = [
|
47
|
+
'sudo apt-get update',
|
48
|
+
'sudo apt-get install -y apt-transport-https ca-certificates',
|
49
|
+
'sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D',
|
50
|
+
'echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list',
|
51
|
+
'sudo apt-get update',
|
52
|
+
|
53
|
+
# FIXME [https://github.com/docker/docker/issues/20316]:
|
54
|
+
'sudo apt-get -o dpkg::options::="--force-confnew" install -y docker-engine=1.9.1-0~trusty',
|
55
|
+
|
56
|
+
'echo "docker-engine hold" | sudo dpkg --set-selections',
|
57
|
+
]
|
58
|
+
install.push(*Array(buildizer_install_instructions(master: packager.project_settings['master'])))
|
59
|
+
|
60
|
+
env = packager.targets.map {|t| "BUILDIZER_TARGET=#{t}"}
|
61
|
+
conf.merge(
|
62
|
+
'dist' => 'trusty',
|
63
|
+
'sudo' => 'required',
|
64
|
+
'cache' => 'apt',
|
65
|
+
'language' => 'ruby',
|
66
|
+
'rvm' => '2.2.1',
|
67
|
+
'install' => install,
|
68
|
+
'before_script' => 'buildizer prepare',
|
69
|
+
'script' => 'buildizer build',
|
70
|
+
'env' => env,
|
71
|
+
'after_success' => 'buildizer deploy',
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
def _git_tag
|
76
|
+
ENV['TRAVIS_TAG']
|
77
|
+
end
|
78
|
+
|
79
|
+
def repo_name
|
80
|
+
packager.git_remote_url.split(':')[1].split('.')[0]
|
81
|
+
rescue
|
82
|
+
raise Error, error: :input_error,
|
83
|
+
message: "unable to determine travis repo name " +
|
84
|
+
"from git remote url #{packager.git_remote_url}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def repo
|
88
|
+
::Travis::Repository.find(repo_name)
|
89
|
+
end
|
90
|
+
|
91
|
+
def login
|
92
|
+
@logged_in ||= begin
|
93
|
+
packager.with_log(desc: "Login into travis") do |&fin|
|
94
|
+
packager.user_settings['travis'] ||= {}
|
95
|
+
|
96
|
+
if packager.cli.options['reset_github_token']
|
97
|
+
packager.user_settings['travis'].delete('github_token')
|
98
|
+
packager.user_settings_save!
|
99
|
+
end
|
100
|
+
|
101
|
+
packager.user_settings['travis']['github_token'] ||= begin
|
102
|
+
reset_github_token = true
|
103
|
+
packager.cli.ask("GitHub access token:", echo: false).tap{puts}
|
104
|
+
end
|
105
|
+
|
106
|
+
::Travis.github_auth(packager.user_settings['travis']['github_token'])
|
107
|
+
packager.user_settings_save! if reset_github_token
|
108
|
+
|
109
|
+
fin.call "LOGGED IN: #{::Travis::User.current.name}"
|
110
|
+
end # with_log
|
111
|
+
|
112
|
+
true
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def with_travis(&blk)
|
117
|
+
login
|
118
|
+
yield
|
119
|
+
rescue ::Travis::Client::Error => err
|
120
|
+
raise Error, message: "travis: #{err.message}"
|
121
|
+
end
|
122
|
+
end # Travis
|
123
|
+
end # Ci
|
124
|
+
end # Buildizer
|
data/lib/buildizer/ci.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Cli
|
3
|
+
class Base < ::Thor
|
4
|
+
include OptionMod
|
5
|
+
|
6
|
+
add_shared_options(
|
7
|
+
debug: {type: :boolean, default: false, desc: "turn on live logging for external commands"},
|
8
|
+
)
|
9
|
+
|
10
|
+
no_commands do
|
11
|
+
def packager
|
12
|
+
@packager ||= Buildizer::Packager.new(self)
|
13
|
+
end
|
14
|
+
end # no_commands
|
15
|
+
end # Base
|
16
|
+
end # Cli
|
17
|
+
end # Buildizer
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Cli
|
3
|
+
class Main < Base
|
4
|
+
include OptionMod
|
5
|
+
|
6
|
+
desc "setup", "Setup buildizer"
|
7
|
+
shared_options
|
8
|
+
method_option :master, type: :boolean, default: nil,
|
9
|
+
desc: "use latest master branch of buildizer from github in ci"
|
10
|
+
method_option :verify_ci, type: :boolean, default: false,
|
11
|
+
desc: "only verify ci configuration is up to date"
|
12
|
+
method_option :reset_github_token, type: :boolean, default: false,
|
13
|
+
desc: "delete github token from user settings and enter new"
|
14
|
+
method_option :require_tag, type: :boolean, default: nil,
|
15
|
+
desc: "pass only git tagged commits for deploy stage"
|
16
|
+
|
17
|
+
method_option :package_cloud, type: :array, default: nil,
|
18
|
+
desc: "package cloud repo list"
|
19
|
+
method_option :reset_package_cloud_token, type: :boolean, default: false,
|
20
|
+
desc: "delete package cloud tokens " +
|
21
|
+
"from user settings for each specified repo " +
|
22
|
+
"and enter new"
|
23
|
+
method_option :clear_package_cloud, type: :boolean, default: false,
|
24
|
+
desc: "clear all package cloud settings"
|
25
|
+
|
26
|
+
method_option :docker_cache, type: :string, default: nil,
|
27
|
+
desc: "docker cache repo name in format '<org>/<name>'"
|
28
|
+
method_option :docker_cache_user, type: :string, default: nil,
|
29
|
+
desc: "docker cache login user name to access specified repo"
|
30
|
+
method_option :docker_cache_email, type: :string, default: nil,
|
31
|
+
desc: "docker cache login email to access specified repo"
|
32
|
+
method_option :docker_cache_server, type: :string, default: nil,
|
33
|
+
desc: "docker cache login server to access specified repo"
|
34
|
+
method_option :reset_docker_cache_password, type: :boolean, default: false,
|
35
|
+
desc: "delete docker cache user password " +
|
36
|
+
"from user settings and enter new"
|
37
|
+
method_option :clear_docker_cache, type: :boolean, default: false,
|
38
|
+
desc: "clear all docker cache settings"
|
39
|
+
def setup
|
40
|
+
if options['verify_ci']
|
41
|
+
raise(Error, message: "#{packager.ci.ci_name} confugration update needed") unless packager.ci.configuration_actual?
|
42
|
+
else
|
43
|
+
packager.project_settings_setup!
|
44
|
+
packager.user_settings_setup!
|
45
|
+
packager.ci.setup!
|
46
|
+
packager.package_cloud_setup!
|
47
|
+
packager.docker_cache_setup!
|
48
|
+
packager.overcommit_setup!
|
49
|
+
packager.overcommit_verify_setup!
|
50
|
+
packager.overcommit_ci_setup!
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "deinit", "Deinitialize settings (.buildizer.yml, git pre-commit hook)"
|
55
|
+
shared_options
|
56
|
+
def deinit
|
57
|
+
packager.deinit!
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "prepare", "Prepare images for building packages"
|
61
|
+
shared_options
|
62
|
+
def prepare
|
63
|
+
packager.prepare!
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "build", "Build packages"
|
67
|
+
shared_options
|
68
|
+
def build
|
69
|
+
packager.build!
|
70
|
+
end
|
71
|
+
|
72
|
+
desc "deploy", "Deploy packages"
|
73
|
+
shared_options
|
74
|
+
def deploy
|
75
|
+
packager.deploy!
|
76
|
+
end
|
77
|
+
|
78
|
+
desc "verify", "Verify targets params"
|
79
|
+
shared_options
|
80
|
+
def verify
|
81
|
+
packager.verify!
|
82
|
+
end
|
83
|
+
end # Main
|
84
|
+
end # Cli
|
85
|
+
end # Buildizer
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Cli
|
3
|
+
module OptionMod
|
4
|
+
class << self
|
5
|
+
def included(base)
|
6
|
+
base.send(:extend, ClassMethods)
|
7
|
+
end
|
8
|
+
end # << self
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def _shared_options
|
12
|
+
@_shared_options ||= {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def _all_shared_options
|
16
|
+
res = _shared_options
|
17
|
+
if klass = self.superclass and klass.respond_to?(:_all_shared_options)
|
18
|
+
res = res.merge(klass._all_shared_options)
|
19
|
+
end
|
20
|
+
res
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_shared_options(options)
|
24
|
+
_shared_options.merge! options
|
25
|
+
end
|
26
|
+
|
27
|
+
def shared_options
|
28
|
+
_all_shared_options.each do |name, options|
|
29
|
+
method_option name, options
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end # ClassMethods
|
33
|
+
end # OptionMod
|
34
|
+
end # Cli
|
35
|
+
end # Buildizer
|