dapp 0.21.16 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/bin/dapp +0 -4
- data/config/en/net_status.yml +3 -2
- data/lib/dapp.rb +1 -4
- data/lib/dapp/cli.rb +0 -4
- data/lib/dapp/cli/command/base.rb +1 -7
- data/lib/dapp/cli/command/update.rb +1 -1
- data/lib/dapp/dapp.rb +19 -40
- data/lib/dapp/dapp/command/common.rb +19 -0
- data/lib/dapp/dapp/option_tags.rb +4 -6
- data/lib/dapp/dimg/build/stage/artifact_default.rb +1 -1
- data/lib/dapp/dimg/builder/chef/cookbook.rb +1 -1
- data/lib/dapp/dimg/cli/command/base.rb +4 -0
- data/lib/dapp/dimg/config/directive/artifact_dimg.rb +7 -0
- data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +0 -1
- data/lib/dapp/dimg/config/directive/dimg/validation.rb +16 -39
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +7 -6
- data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +98 -24
- data/lib/dapp/dimg/dapp/command/common.rb +4 -13
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +9 -7
- data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +1 -1
- data/lib/dapp/dimg/dapp/command/stages/common.rb +1 -6
- data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +5 -3
- data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +1 -1
- data/lib/dapp/dimg/docker_registry/dimg.rb +0 -9
- data/lib/dapp/dimg/git_repo/base.rb +30 -4
- data/lib/dapp/dimg/image/argument.rb +1 -3
- data/lib/dapp/helper/trivia.rb +0 -35
- data/lib/dapp/kube/cli/command/kube/deploy.rb +6 -0
- data/lib/dapp/kube/dapp/command/common.rb +129 -13
- data/lib/dapp/kube/dapp/command/deploy.rb +2 -9
- data/lib/dapp/kube/dapp/command/render.rb +2 -2
- data/lib/dapp/kube/error/base.rb +5 -1
- data/lib/dapp/kube/helm/release.rb +39 -3
- data/lib/dapp/kube/kubernetes/client.rb +2 -0
- data/lib/dapp/version.rb +2 -2
- metadata +4 -33
- data/lib/dapp/dapp/sentry.rb +0 -112
- data/lib/dapp/helper/url.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 77598b3aaf53c25bda513349cdd1d04f7bbb3b0381553c674753926cd9422ecc
|
4
|
+
data.tar.gz: c921eb3a8041c2c4bdb86b28ba6179b6cdefb17095558d44ebc87f79518a726c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27a73294f4dc0bc778bad4f766f30ae6bd717258b920bf55a0c85a52274c8b7042f02c3c5b55fff308e870026b698cac55e69fe428802db9971972b475299a55
|
7
|
+
data.tar.gz: 27e40f37ffd4d68f06f573840b2c5d72bd5405dca1f8a0de691fd71abcc080db432cb5259c69884eaecca6abb26b43a351b545eff10060bc4c5556907a377728
|
data/bin/dapp
CHANGED
data/config/en/net_status.yml
CHANGED
@@ -8,6 +8,7 @@ en:
|
|
8
8
|
dimg_not_run: "Dimg run failed!"
|
9
9
|
kube:
|
10
10
|
deploy_timeout: "Deploy timeout!"
|
11
|
+
connect_timeout: "Connect timeout when connecting to kube API."
|
11
12
|
dappfile:
|
12
13
|
incorrect: "Dappfile with `%{error}`:\n%{message}"
|
13
14
|
build:
|
@@ -51,7 +52,7 @@ en:
|
|
51
52
|
cannot_run_ssh_agent: "Can't run ssh-agent!"
|
52
53
|
ssh_key_not_found: "Ssh key `%{path}` doesn't exist!"
|
53
54
|
docker_not_found: "Docker not found!"
|
54
|
-
docker_version: "Required docker version (`%{version}`):
|
55
|
+
docker_version: "Required docker version (`%{version}`): `%{min_version}` <= VERSION <= `%{max_version}`!"
|
55
56
|
dapp_config_file_incorrect: "%{message}"
|
56
57
|
yaml_file_incorrect: "Yaml file `%{file}`: `%{message}`"
|
57
58
|
yaml_incorrect: "`%{message}`"
|
@@ -80,7 +81,7 @@ en:
|
|
80
81
|
stage_artifact_double_associate: "Can't use `%{stage}` stage for artifact; already used in `%{conflict_stage}` stage!"
|
81
82
|
stage_artifact_not_supported_associated_stage: "Bad artifact stage `%{stage}`!"
|
82
83
|
git_artifact_remote_branch_with_commit: "Remote git repo: use `commit` or `branch` directive!"
|
83
|
-
artifact_conflict: "Conflict between artifacts
|
84
|
+
artifact_conflict: "Conflict between artifacts paths!"
|
84
85
|
scratch_unsupported_directive: "Scratch dimg has unsupported directive `%{directive}`!"
|
85
86
|
scratch_artifact_required: "Scratch dimg without artifacts!"
|
86
87
|
scratch_artifact_associated: "Scratch artifact can't be associated: not expected `before`/`after` attribute!"
|
data/lib/dapp.rb
CHANGED
@@ -24,8 +24,6 @@ require 'openssl'
|
|
24
24
|
require 'etc'
|
25
25
|
require 'zlib'
|
26
26
|
require 'slugify'
|
27
|
-
require 'sentry-raven'
|
28
|
-
require 'toml-rb'
|
29
27
|
|
30
28
|
require 'dapp/version'
|
31
29
|
require 'dapp/core_ext/hash'
|
@@ -36,7 +34,6 @@ require 'dapp/helper/sha256'
|
|
36
34
|
require 'dapp/helper/net_status'
|
37
35
|
require 'dapp/helper/tar'
|
38
36
|
require 'dapp/helper/yaml'
|
39
|
-
require 'dapp/helper/url'
|
40
37
|
require 'dapp/prctl'
|
41
38
|
require 'dapp/error/base'
|
42
39
|
require 'dapp/error/dapp'
|
@@ -52,7 +49,6 @@ require 'dapp/config/config'
|
|
52
49
|
require 'dapp/config/error/config'
|
53
50
|
require 'dapp/dapp/lock'
|
54
51
|
require 'dapp/dapp/ssh_agent'
|
55
|
-
require 'dapp/dapp/sentry'
|
56
52
|
require 'dapp/dapp/git_artifact'
|
57
53
|
require 'dapp/dapp/dappfile'
|
58
54
|
require 'dapp/dapp/chef'
|
@@ -67,6 +63,7 @@ require 'dapp/dapp/deps/base'
|
|
67
63
|
require 'dapp/dapp/deps/gitartifact'
|
68
64
|
require 'dapp/dapp/shellout/streaming'
|
69
65
|
require 'dapp/dapp/shellout/base'
|
66
|
+
require 'dapp/dapp/command/common'
|
70
67
|
require 'dapp/dapp'
|
71
68
|
require 'dapp/deployment'
|
72
69
|
require 'dapp/deployment/config/directive/mod/group'
|
data/lib/dapp/cli.rb
CHANGED
@@ -62,8 +62,6 @@ module Dapp
|
|
62
62
|
|
63
63
|
def run_dapp_command(run_method, options: {}, log_running_time: true)
|
64
64
|
dapp = ::Dapp::Dapp.new(options: options)
|
65
|
-
::Dapp::CLI.dapp_object = dapp
|
66
|
-
dapp.sentry_message("Manual usage: `#{options[:dapp_command]}` command") unless ENV['CI']
|
67
65
|
|
68
66
|
log_dapp_running_time(dapp, ignore: !log_running_time) do
|
69
67
|
if block_given?
|
@@ -74,10 +72,6 @@ module Dapp
|
|
74
72
|
end
|
75
73
|
end
|
76
74
|
|
77
|
-
def run_method
|
78
|
-
class_to_lowercase
|
79
|
-
end
|
80
|
-
|
81
75
|
def log_dapp_running_time(dapp, ignore: false)
|
82
76
|
return yield if ignore
|
83
77
|
|
@@ -94,7 +88,7 @@ module Dapp
|
|
94
88
|
end
|
95
89
|
|
96
90
|
def cli_options(**kwargs)
|
97
|
-
config.merge(
|
91
|
+
config.merge(**kwargs)
|
98
92
|
end
|
99
93
|
end
|
100
94
|
end
|
@@ -4,7 +4,7 @@ module Dapp
|
|
4
4
|
class Update < ::Dapp::CLI
|
5
5
|
def run(_argv)
|
6
6
|
spec = Gem::Specification.find do |s|
|
7
|
-
File.fnmatch
|
7
|
+
File.fnmatch(File.join(s.full_gem_path, '*'), __FILE__)
|
8
8
|
end
|
9
9
|
unless (latest_version = latest_beta_version(spec)).nil?
|
10
10
|
try_lock do
|
data/lib/dapp/dapp.rb
CHANGED
@@ -7,19 +7,18 @@ module Dapp
|
|
7
7
|
include DappConfig
|
8
8
|
include OptionTags
|
9
9
|
|
10
|
+
include Command::Common
|
11
|
+
|
10
12
|
include Logging::Base
|
11
13
|
include Logging::Process
|
12
14
|
include Logging::I18n
|
13
15
|
include Logging::Paint
|
14
16
|
|
15
17
|
include SshAgent
|
16
|
-
include Sentry
|
17
|
-
|
18
18
|
include Helper::Sha256
|
19
|
-
extend
|
19
|
+
extend Helper::Trivia
|
20
20
|
include Helper::Trivia
|
21
21
|
include Helper::Tar
|
22
|
-
include Helper::Url
|
23
22
|
|
24
23
|
include Deps::Toolchain
|
25
24
|
include Deps::Gitartifact
|
@@ -40,18 +39,6 @@ module Dapp
|
|
40
39
|
self.class.options
|
41
40
|
end
|
42
41
|
|
43
|
-
def settings
|
44
|
-
@settings ||= begin
|
45
|
-
settings_path = File.join(self.class.home_dir, "settings.toml")
|
46
|
-
|
47
|
-
if File.exists? settings_path
|
48
|
-
TomlRB.load_file(settings_path)
|
49
|
-
else
|
50
|
-
{}
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
42
|
def name
|
56
43
|
@name ||= begin
|
57
44
|
if name = options[:name]
|
@@ -94,18 +81,15 @@ module Dapp
|
|
94
81
|
self.class.tmp_base_dir
|
95
82
|
end
|
96
83
|
|
97
|
-
def
|
98
|
-
@
|
84
|
+
def build_path(*path)
|
85
|
+
@build_path ||= begin
|
99
86
|
if option_build_dir
|
100
87
|
Pathname.new(option_build_dir)
|
101
88
|
else
|
102
89
|
path('.dapp_build')
|
103
90
|
end.expand_path.tap(&:mkpath)
|
104
91
|
end
|
105
|
-
|
106
|
-
|
107
|
-
def build_path(*path)
|
108
|
-
make_path(build_dir, *path)
|
92
|
+
make_path(@build_path, *path)
|
109
93
|
end
|
110
94
|
|
111
95
|
def local_git_artifact_exclude_paths(&blk)
|
@@ -151,38 +135,33 @@ module Dapp
|
|
151
135
|
end
|
152
136
|
|
153
137
|
class << self
|
154
|
-
def home_dir
|
155
|
-
File.join(Dir.home, ".dapp")
|
156
|
-
end
|
157
|
-
|
158
138
|
def options
|
159
139
|
@options ||= {}
|
160
140
|
end
|
161
141
|
|
162
142
|
def host_docker
|
163
143
|
@host_docker ||= begin
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
144
|
+
raise Error::Dapp, code: :docker_not_found if (res = shellout('which docker')).exitstatus.nonzero?
|
145
|
+
docker_bin = res.stdout.strip
|
146
|
+
|
147
|
+
current_docker_version = shellout!("#{docker_bin} --version").stdout.strip
|
148
|
+
required_min_docker_version = '1.10.0'
|
149
|
+
required_max_docker_version = '17.09.0'
|
150
|
+
|
151
|
+
if Gem::Version.new(required_min_docker_version) > Gem::Version.new(current_docker_version[/(\d+\.)+\d+/]) ||
|
152
|
+
Gem::Version.new(required_max_docker_version) < Gem::Version.new(current_docker_version[/(\d+\.)+\d+/])
|
153
|
+
raise Error::Dapp, code: :docker_version, data: { min_version: required_min_docker_version,
|
154
|
+
max_version: required_max_docker_version,
|
155
|
+
version: current_docker_version[/(\d+\.)+\d+/] }
|
168
156
|
end
|
169
157
|
|
170
158
|
[].tap do |cmd|
|
171
|
-
cmd <<
|
159
|
+
cmd << docker_bin
|
172
160
|
cmd << "--config #{host_docker_config_dir}"
|
173
161
|
end.join(' ')
|
174
162
|
end
|
175
163
|
end
|
176
164
|
|
177
|
-
def host_docker_bin
|
178
|
-
raise Error::Dapp, code: :docker_not_found if (res = shellout('which docker')).exitstatus.nonzero?
|
179
|
-
res.stdout.strip
|
180
|
-
end
|
181
|
-
|
182
|
-
def host_docker_minor_version
|
183
|
-
Gem::Version.new(shellout!("#{host_docker_bin} --version").stdout.strip[/\d+\.\d+/])
|
184
|
-
end
|
185
|
-
|
186
165
|
def host_docker_config_dir
|
187
166
|
if options_with_docker_credentials? && !options[:repo].nil?
|
188
167
|
host_docker_tmp_config_dir
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Dapp
|
2
|
+
class Dapp
|
3
|
+
module Command
|
4
|
+
module Common
|
5
|
+
def option_repo
|
6
|
+
unless options[:repo].nil?
|
7
|
+
return "localhost:5000/#{name}" if options[:repo] == ':minikube'
|
8
|
+
options[:repo]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def dimg_registry(repo)
|
13
|
+
validate_repo_name!(repo)
|
14
|
+
::Dapp::Dimg::DockerRegistry.new(repo)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -5,14 +5,12 @@ module Dapp
|
|
5
5
|
@git_repo ||= ::Dapp::Dimg::GitRepo::Own.new(self)
|
6
6
|
end
|
7
7
|
|
8
|
+
def tagging_schemes
|
9
|
+
%w(git_tag git_branch git_commit custom ci)
|
10
|
+
end
|
11
|
+
|
8
12
|
def tags_by_scheme
|
9
13
|
@tags_by_scheme_name ||= begin
|
10
|
-
if simple_tags[:custom].any?
|
11
|
-
if settings.fetch("sentry", {}).fetch("detect-push-tag-usage", false)
|
12
|
-
sentry_message("--tag or --tag-slug usage detected", extra: {"slug_tags" => simple_tags})
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
14
|
[simple_tags, branch_tags, commit_tags, build_tags, ci_tags].reduce({}) do |some_tags_by_scheme, tags_by_scheme|
|
17
15
|
tags_by_scheme.in_depth_merge(some_tags_by_scheme)
|
18
16
|
end.tap do |tags_by_scheme|
|
@@ -32,7 +32,7 @@ module Dapp
|
|
32
32
|
def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
|
33
33
|
''.tap do |cmd|
|
34
34
|
cmd << dimg.dapp.rsync_bin
|
35
|
-
cmd << ' --archive --links
|
35
|
+
cmd << ' --archive --links'
|
36
36
|
cmd << " --chown=#{owner}:#{group}" if owner or group
|
37
37
|
|
38
38
|
if include_paths.any?
|
@@ -87,7 +87,7 @@ module Dapp
|
|
87
87
|
"#{builder.dimg.dapp.mkdir_bin} -p ~/.ssh",
|
88
88
|
'echo "Host *" >> ~/.ssh/config',
|
89
89
|
'echo " StrictHostKeyChecking no" >> ~/.ssh/config',
|
90
|
-
*local_paths.map {|path| "#{builder.dimg.dapp.rsync_bin} --
|
90
|
+
*local_paths.map {|path| "#{builder.dimg.dapp.rsync_bin} --archive --relative #{path} /tmp/local_cookbooks"},
|
91
91
|
"cd /tmp/local_cookbooks/#{path}",
|
92
92
|
"cp #{tmp_berksfile_path} Berksfile",
|
93
93
|
"cp #{tmp_metadata_path} metadata.rb",
|
@@ -4,8 +4,6 @@ module Dapp
|
|
4
4
|
module Directive
|
5
5
|
class Dimg < Base
|
6
6
|
module Validation
|
7
|
-
include Helper::Trivia
|
8
|
-
|
9
7
|
def validate!
|
10
8
|
directives_validate!
|
11
9
|
validate_scratch!
|
@@ -75,39 +73,12 @@ module Dapp
|
|
75
73
|
verifiable_artifact = artifacts.shift
|
76
74
|
artifacts.select { |a| a[:to] == verifiable_artifact[:to] }.each do |artifact|
|
77
75
|
next if verifiable_artifact[:index] == artifact[:index]
|
78
|
-
|
79
|
-
|
80
|
-
validate_artifact!(artifact, verifiable_artifact)
|
81
|
-
rescue Error::Config => e
|
82
|
-
conflict_between_artifacts!(artifact, verifiable_artifact) if e.net_status[:code] == :artifact_conflict
|
83
|
-
raise
|
84
|
-
end
|
76
|
+
validate_artifact!(verifiable_artifact, artifact)
|
77
|
+
validate_artifact!(artifact, verifiable_artifact)
|
85
78
|
end
|
86
79
|
end
|
87
80
|
end
|
88
81
|
|
89
|
-
def conflict_between_artifacts!(*formatted_artifacts)
|
90
|
-
artifacts = formatted_artifacts.flatten.map { |formatted_artifact| formatted_artifact[:related_artifact] }
|
91
|
-
dappfile_context = artifacts.map do |artifact|
|
92
|
-
artifact_directive = []
|
93
|
-
artifact_directive << begin
|
94
|
-
if artifact.is_a? Artifact::Export
|
95
|
-
"artifact.export('#{artifact._cwd}') do"
|
96
|
-
else
|
97
|
-
"git#{"('#{artifact._url}')" if artifact.respond_to?(:_url)}.add('#{artifact._cwd}') do"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
[:include_paths, :exclude_paths].each do |directive|
|
101
|
-
next if (paths = artifact.send("_#{directive}")).empty?
|
102
|
-
artifact_directive << " #{directive} '#{paths.join("', '")}'"
|
103
|
-
end
|
104
|
-
artifact_directive << " to '#{artifact._to}'"
|
105
|
-
artifact_directive << 'end'
|
106
|
-
artifact_directive.join("\n")
|
107
|
-
end.join("\n\n")
|
108
|
-
raise Error::Config, code: :artifact_conflict, data: { dappfile_context: dappfile_context }
|
109
|
-
end
|
110
|
-
|
111
82
|
def validate_artifact_format(artifacts)
|
112
83
|
artifacts.map do |a|
|
113
84
|
path_format = proc { |path| File.expand_path(File.join('/', path, '/'))[1..-1] }
|
@@ -135,20 +106,26 @@ module Dapp
|
|
135
106
|
index: artifacts.index(a),
|
136
107
|
to: to,
|
137
108
|
include_paths: include_paths,
|
138
|
-
exclude_paths: exclude_paths
|
139
|
-
related_artifact: a
|
109
|
+
exclude_paths: exclude_paths
|
140
110
|
}
|
141
111
|
end
|
142
112
|
end
|
143
113
|
|
144
114
|
def validate_artifact!(verifiable_artifact, artifact)
|
145
|
-
|
146
|
-
|
147
|
-
!
|
148
|
-
end
|
149
|
-
|
115
|
+
verifiable_artifact[:include_paths].each do |verifiable_path|
|
116
|
+
potential_conflicts = artifact[:include_paths].select { |path| path.start_with?(verifiable_path) }
|
117
|
+
validate_artifact_path!(verifiable_artifact, potential_conflicts)
|
118
|
+
end.empty? && verifiable_artifact[:exclude_paths].empty? && raise(Error::Config, code: :artifact_conflict)
|
119
|
+
validate_artifact_path!(verifiable_artifact, artifact[:include_paths]) if verifiable_artifact[:include_paths].empty?
|
120
|
+
end
|
150
121
|
|
151
|
-
|
122
|
+
def validate_artifact_path!(verifiable_artifact, potential_conflicts)
|
123
|
+
potential_conflicts.all? do |path|
|
124
|
+
loop do
|
125
|
+
break if verifiable_artifact[:exclude_paths].include?(path) || ((path = File.dirname(path)) == '.')
|
126
|
+
end
|
127
|
+
verifiable_artifact[:exclude_paths].include?(path)
|
128
|
+
end.tap { |res| res || raise(Error::Config, code: :artifact_conflict) }
|
152
129
|
end
|
153
130
|
|
154
131
|
def _associated_artifacts
|
@@ -3,13 +3,14 @@ module Dapp
|
|
3
3
|
module Config
|
4
4
|
module Directive
|
5
5
|
class GitArtifactRemote < GitArtifactLocal
|
6
|
-
include ::Dapp::Helper::Url
|
7
|
-
|
8
6
|
attr_reader :_url, :_name, :_branch, :_commit
|
9
7
|
|
10
8
|
def initialize(url, **kwargs, &blk)
|
11
9
|
@_url = url
|
12
|
-
|
10
|
+
|
11
|
+
url_without_scheme = url.split("://", 2).last
|
12
|
+
url_without_creds = url_without_scheme.split(":", 2).last
|
13
|
+
@_name = url_without_creds.gsub(%r{.*?([^\/ ]+\/[^\/ ]+)\.git}, '\\1')
|
13
14
|
|
14
15
|
super(**kwargs, &blk)
|
15
16
|
end
|
@@ -19,7 +20,7 @@ module Dapp
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def commit(value)
|
22
|
-
sub_directive_eval { @_commit = value
|
23
|
+
sub_directive_eval { @_commit = value }
|
23
24
|
end
|
24
25
|
|
25
26
|
def _export
|
@@ -39,11 +40,11 @@ module Dapp
|
|
39
40
|
end
|
40
41
|
|
41
42
|
def branch(value)
|
42
|
-
sub_directive_eval { @_branch = value
|
43
|
+
sub_directive_eval { @_branch = value }
|
43
44
|
end
|
44
45
|
|
45
46
|
def commit(value)
|
46
|
-
sub_directive_eval { @_commit = value
|
47
|
+
sub_directive_eval { @_commit = value }
|
47
48
|
end
|
48
49
|
|
49
50
|
def validate!
|