dapp 0.26.14 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +0 -4
  3. data/config/en/common.yml +1 -0
  4. data/config/en/net_status.yml +2 -0
  5. data/lib/dapp.rb +1 -4
  6. data/lib/dapp/cli.rb +0 -4
  7. data/lib/dapp/cli/command/base.rb +1 -7
  8. data/lib/dapp/dapp.rb +4 -22
  9. data/lib/dapp/dapp/dappfile.rb +2 -2
  10. data/lib/dapp/dapp/deps/base.rb +6 -2
  11. data/lib/dapp/dapp/option_tags.rb +1 -7
  12. data/lib/dapp/dimg/artifact.rb +4 -0
  13. data/lib/dapp/dimg/build/stage/artifact_base.rb +7 -7
  14. data/lib/dapp/dimg/build/stage/artifact_default.rb +4 -5
  15. data/lib/dapp/dimg/build/stage/base.rb +1 -3
  16. data/lib/dapp/dimg/build/stage/before_install.rb +2 -3
  17. data/lib/dapp/dimg/build/stage/from.rb +31 -5
  18. data/lib/dapp/dimg/build/stage/ga_base.rb +1 -1
  19. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +1 -3
  20. data/lib/dapp/dimg/build/stage/import_artifact.rb +3 -4
  21. data/lib/dapp/dimg/builder/ansible.rb +167 -2
  22. data/lib/dapp/dimg/builder/ansible/assets.rb +332 -0
  23. data/lib/dapp/dimg/builder/chef.rb +2 -2
  24. data/lib/dapp/dimg/cli/command/base.rb +14 -0
  25. data/lib/dapp/dimg/cli/command/dimg/build.rb +15 -24
  26. data/lib/dapp/dimg/cli/command/dimg/run.rb +14 -1
  27. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +2 -1
  28. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +2 -2
  29. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +4 -3
  30. data/lib/dapp/dimg/dapp/command/cleanup.rb +2 -2
  31. data/lib/dapp/dimg/dapp/command/common.rb +16 -5
  32. data/lib/dapp/dimg/dapp/command/mrproper.rb +6 -8
  33. data/lib/dapp/dimg/dapp/command/push.rb +1 -1
  34. data/lib/dapp/dimg/dapp/command/run.rb +3 -2
  35. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +3 -0
  36. data/lib/dapp/dimg/dapp/command/tag.rb +1 -1
  37. data/lib/dapp/dimg/dapp/dimg.rb +8 -0
  38. data/lib/dapp/dimg/dimg.rb +14 -3
  39. data/lib/dapp/dimg/dimg/stages.rb +1 -1
  40. data/lib/dapp/dimg/docker_registry/base.rb +10 -0
  41. data/lib/dapp/dimg/docker_registry/base/authorization.rb +1 -16
  42. data/lib/dapp/dimg/git_artifact.rb +9 -2
  43. data/lib/dapp/dimg/git_repo/base.rb +2 -2
  44. data/lib/dapp/dimg/git_repo/local.rb +2 -2
  45. data/lib/dapp/kube/dapp/command/deploy.rb +0 -1
  46. data/lib/dapp/kube/dapp/command/lint.rb +11 -4
  47. data/lib/dapp/kube/helm/values.rb +7 -7
  48. data/lib/dapp/version.rb +2 -2
  49. metadata +5 -34
  50. data/lib/dapp/dapp/sentry.rb +0 -106
  51. data/lib/dapp/helper/url.rb +0 -23
@@ -192,10 +192,17 @@ module Dapp
192
192
  if any_changes?(*dev_patch_stage_commits(stage))
193
193
  case archive_type(stage)
194
194
  when :directory
195
- changed_files = diff_patches(*dev_patch_stage_commits(stage)).map {|p| "\"#{File.join(to, cwd, p.delta.new_file[:path])}\""}
196
- commands << "#{repo.dapp.rm_bin} -rf #{changed_files.join(' ')}"
195
+ files_to_remove_file_name = file_name('dev_files_to_remove')
196
+ File.open(dimg.tmp_path('archives', files_to_remove_file_name), File::RDWR | File::CREAT) do |f|
197
+ diff_patches(*dev_patch_stage_commits(stage))
198
+ .map {|p| File.join(to, cwd, p.delta.new_file[:path])}
199
+ .each(&f.method(:puts))
200
+ end
201
+
202
+ commands << "#{repo.dapp.rm_bin} -rf $(#{repo.dapp.cat_bin} #{dimg.container_tmp_path('archives', files_to_remove_file_name)})"
197
203
  commands << "#{repo.dapp.install_bin} #{credentials.join(' ')} -d \"#{to}\""
198
204
  commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage)} -C \"#{to}\""
205
+ commands << "#{repo.dapp.find_bin} \"#{to}\" -empty -type d -delete"
199
206
  when :file
200
207
  commands << "#{repo.dapp.rm_bin} -rf \"#{to}\""
201
208
  commands << "#{repo.dapp.install_bin} #{credentials.join(' ')} -d \"#{File.dirname(to)}\""
@@ -104,12 +104,12 @@ module Dapp
104
104
 
105
105
  def patches(from, to, paths: [], exclude_paths: [], **kwargs)
106
106
  diff(from, to, **kwargs).patches.select do |patch|
107
- !ignore_patch?(patch, paths: paths, exclude_paths: exclude_paths)
107
+ ignore_patch?(patch, paths: paths, exclude_paths: exclude_paths)
108
108
  end
109
109
  end
110
110
 
111
111
  def ignore_patch?(patch, paths: [], exclude_paths: [])
112
- ignore_path?(patch.delta.new_file[:path], paths: paths, exclude_paths: exclude_paths)
112
+ !ignore_path?(patch.delta.new_file[:path], paths: paths, exclude_paths: exclude_paths)
113
113
  end
114
114
 
115
115
  def entries(commit, paths: [], exclude_paths: [])
@@ -48,9 +48,9 @@ module Dapp
48
48
  delta_new_file = patch.delta.new_file
49
49
  args = [delta_new_file[:path], paths: paths, exclude_paths: exclude_paths]
50
50
  if nested_git_repository_mode?(delta_new_file[:mode])
51
- ignore_directory?(*args)
51
+ !ignore_directory?(*args)
52
52
  else
53
- ignore_path?(*args)
53
+ !ignore_path?(*args)
54
54
  end
55
55
  end
56
56
 
@@ -165,7 +165,6 @@ module Dapp
165
165
  # Поэтому перехватываем и просто отображаем произошедшую
166
166
  # ошибку для информации пользователю без завершения работы dapp.
167
167
  $stderr.puts(::Dapp::Dapp.paint_string(::Dapp::Helper::NetStatus.message(e), :warning))
168
- sentry_exception(e, extra: {"job-spec" => job.spec})
169
168
  end
170
169
 
171
170
  end # Thread
@@ -4,11 +4,10 @@ module Dapp
4
4
  module Command
5
5
  module Lint
6
6
  def kube_chart_name
7
- chart_yaml_path = kube_chart_path.join("Chart.yaml")
8
- chart_spec = yaml_load_file(chart_yaml_path)
7
+ chart_spec = yaml_load_file(kube_chart_yaml_path)
9
8
 
10
9
  if chart_spec["name"].nil? || chart_spec["name"].empty?
11
- raise ::Dapp::Error::Command, code: :no_helm_chart_spec_name, data: { name: chart_spec["name"], path: chart_yaml_path, raw_spec: chart_yaml_path.read.strip }
10
+ raise ::Dapp::Error::Command, code: :no_helm_chart_spec_name, data: { name: chart_spec["name"], path: kube_chart_yaml_path, raw_spec: kube_chart_yaml_path.read.strip }
12
11
  end
13
12
 
14
13
  chart_spec["name"]
@@ -29,6 +28,7 @@ module Dapp
29
28
 
30
29
  def kube_lint
31
30
  kube_check_helm_chart!
31
+ kube_check_helm_chart_yaml!
32
32
 
33
33
  repo = option_repo
34
34
 
@@ -41,7 +41,7 @@ module Dapp
41
41
 
42
42
  all_values = {}
43
43
  [kube_chart_path('values.yaml').expand_path, *kube_values_paths, *kube_tmp_chart_secret_values_paths].each do |values_path|
44
- all_values = all_values.in_depth_merge(yaml_load_file(values_path))
44
+ all_values = all_values.in_depth_merge(yaml_load_file(values_path)) if File.file?(values_path)
45
45
  end
46
46
 
47
47
  options[:helm_set_options].each do |opt_spec|
@@ -68,6 +68,13 @@ module Dapp
68
68
  end
69
69
  end
70
70
 
71
+ def kube_check_helm_chart_yaml!
72
+ raise ::Dapp::Error::Command, code: :chart_yaml_not_found, data: { path: kube_chart_yaml_path } unless kube_chart_yaml_path.exist?
73
+ end
74
+
75
+ def kube_chart_yaml_path
76
+ kube_chart_path.join("Chart.yaml")
77
+ end
71
78
  end
72
79
  end
73
80
  end
@@ -65,15 +65,15 @@ module Dapp
65
65
  dimgs = dapp.build_configs.map do |config|
66
66
  dapp.dimg(config: config, ignore_git_fetch: true)
67
67
  end.uniq do |dimg|
68
- dimg.config._name
68
+ dimg.name
69
69
  end
70
70
 
71
71
  dimgs.each do |dimg|
72
72
  dimg_data = {}
73
- if dimg.config._name
73
+ if dimg.name
74
74
  res["global"]["dapp"]["is_nameless_dimg"] = false
75
75
  res["global"]["dapp"]["dimg"] ||= {}
76
- res["global"]["dapp"]["dimg"][dimg.config._name] = dimg_data
76
+ res["global"]["dapp"]["dimg"][dimg.name] = dimg_data
77
77
  else
78
78
  res["global"]["dapp"]["is_nameless_dimg"] = true
79
79
  res["global"]["dapp"]["dimg"] = dimg_data
@@ -83,16 +83,16 @@ module Dapp
83
83
  docker_image_id = TEMPLATE_EMPTY_VALUE
84
84
  unless fake || without_registry
85
85
  begin
86
- dimg_labels = dapp.dimg_registry(repo).image_labels(docker_tag, dimg.config._name)
87
- docker_image_id = dapp.dimg_registry(repo).image_id(docker_tag, dimg.config._name)
86
+ dimg_labels = dapp.dimg_registry(repo).image_labels(docker_tag, dimg.name)
87
+ docker_image_id = dapp.dimg_registry(repo).image_id(docker_tag, dimg.name)
88
88
  rescue ::Dapp::Dimg::Error::Registry => err
89
89
  unless disable_warnings
90
- dapp.log_warning "Registry `#{err.net_status[:data][:registry]}` is not availabble: cannot determine <dimg>.docker_image_id and <dimg>.git.<ga>.commit_id helm values of dimg#{dimg.config._name ? " `#{dimg.config._name}`" : nil}"
90
+ dapp.log_warning "Registry `#{err.net_status[:data][:registry]}` is not availabble: cannot determine <dimg>.docker_image_id and <dimg>.git.<ga>.commit_id helm values of dimg#{dimg.name ? " `#{dimg.name}`" : nil}"
91
91
  end
92
92
  end
93
93
  end
94
94
 
95
- dimg_data["docker_image"] = [[repo, dimg.config._name].compact.join("/"), docker_tag].join(":")
95
+ dimg_data["docker_image"] = [[repo, dimg.name].compact.join("/"), docker_tag].join(":")
96
96
  dimg_data["docker_image_id"] = docker_image_id
97
97
 
98
98
  [*dimg.local_git_artifacts, *dimg.remote_git_artifacts].each do |ga|
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = "0.26.14"
3
- BUILD_CACHE_VERSION = 27.1
2
+ VERSION = "0.27.0"
3
+ BUILD_CACHE_VERSION = 27
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.14
4
+ version: 0.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-17 00:00:00.000000000 Z
11
+ date: 2018-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -200,48 +200,20 @@ dependencies:
200
200
  - - "~>"
201
201
  - !ruby/object:Gem::Version
202
202
  version: 1.9.0
203
- - !ruby/object:Gem::Dependency
204
- name: sentry-raven
205
- requirement: !ruby/object:Gem::Requirement
206
- requirements:
207
- - - "~>"
208
- - !ruby/object:Gem::Version
209
- version: 2.7.2
210
- type: :runtime
211
- prerelease: false
212
- version_requirements: !ruby/object:Gem::Requirement
213
- requirements:
214
- - - "~>"
215
- - !ruby/object:Gem::Version
216
- version: 2.7.2
217
- - !ruby/object:Gem::Dependency
218
- name: toml-rb
219
- requirement: !ruby/object:Gem::Requirement
220
- requirements:
221
- - - "~>"
222
- - !ruby/object:Gem::Version
223
- version: 1.1.1
224
- type: :runtime
225
- prerelease: false
226
- version_requirements: !ruby/object:Gem::Requirement
227
- requirements:
228
- - - "~>"
229
- - !ruby/object:Gem::Version
230
- version: 1.1.1
231
203
  - !ruby/object:Gem::Dependency
232
204
  name: bundler
233
205
  requirement: !ruby/object:Gem::Requirement
234
206
  requirements:
235
207
  - - "~>"
236
208
  - !ruby/object:Gem::Version
237
- version: '2.0'
209
+ version: '1.7'
238
210
  type: :development
239
211
  prerelease: false
240
212
  version_requirements: !ruby/object:Gem::Requirement
241
213
  requirements:
242
214
  - - "~>"
243
215
  - !ruby/object:Gem::Version
244
- version: '2.0'
216
+ version: '1.7'
245
217
  - !ruby/object:Gem::Dependency
246
218
  name: rake
247
219
  requirement: !ruby/object:Gem::Requirement
@@ -490,7 +462,6 @@ files:
490
462
  - lib/dapp/dapp/logging/paint.rb
491
463
  - lib/dapp/dapp/logging/process.rb
492
464
  - lib/dapp/dapp/option_tags.rb
493
- - lib/dapp/dapp/sentry.rb
494
465
  - lib/dapp/dapp/shellout/base.rb
495
466
  - lib/dapp/dapp/shellout/streaming.rb
496
467
  - lib/dapp/dapp/slug.rb
@@ -564,6 +535,7 @@ files:
564
535
  - lib/dapp/dimg/build/stage/setup/setup.rb
565
536
  - lib/dapp/dimg/builder.rb
566
537
  - lib/dapp/dimg/builder/ansible.rb
538
+ - lib/dapp/dimg/builder/ansible/assets.rb
567
539
  - lib/dapp/dimg/builder/base.rb
568
540
  - lib/dapp/dimg/builder/chef.rb
569
541
  - lib/dapp/dimg/builder/chef/berksfile.rb
@@ -695,7 +667,6 @@ files:
695
667
  - lib/dapp/helper/sha256.rb
696
668
  - lib/dapp/helper/tar.rb
697
669
  - lib/dapp/helper/trivia.rb
698
- - lib/dapp/helper/url.rb
699
670
  - lib/dapp/helper/yaml.rb
700
671
  - lib/dapp/kube.rb
701
672
  - lib/dapp/kube/cli/cli.rb
@@ -1,106 +0,0 @@
1
- module Dapp
2
- class Dapp
3
- module Sentry
4
- def sentry_message(msg, **kwargs)
5
- return if not ensure_sentry_configured
6
- kwargs[:level] ||= "info"
7
- Raven.capture_message(msg, _make_sentry_params(**kwargs))
8
- end
9
-
10
- def sentry_exception(exception, **kwargs)
11
- return if not ensure_sentry_configured
12
- (kwargs[:tags] ||= {})['error-code'] = begin
13
- net_status = exception.net_status
14
- [net_status[:context], net_status[:code]].compact.join('_')
15
- end
16
- Raven.capture_exception(exception, _make_sentry_params(**kwargs))
17
- end
18
-
19
- def ensure_sentry_configured
20
- return false unless sentry_settings = settings["sentry"]
21
-
22
- unless @sentry_settings_configured
23
- Raven.configure do |config|
24
- logger = ::Logger.new(STDOUT)
25
- logger.level = ::Logger::WARN
26
-
27
- config.logger = logger
28
- config.dsn = sentry_settings["dsn"]
29
- end
30
-
31
- @sentry_settings_configured = true
32
- end
33
-
34
- return true
35
- end
36
-
37
- def _make_sentry_params(level: nil, tags: {}, extra: {}, user: {})
38
- {
39
- level: level,
40
- tags: _sentry_tags_context.merge(tags),
41
- extra: _sentry_extra_context.merge(extra),
42
- user: _sentry_user_context.merge(user),
43
- }
44
- end
45
-
46
- def _sentry_extra_context
47
- @_sentry_extra_context ||= {
48
- "pwd" => Dir.pwd,
49
- "dapp-dir" => self.work_dir,
50
- "build-dir" => self.build_dir,
51
- "options" => self.options,
52
- "env-options" => {
53
- "DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
54
- "DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
55
- "ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
56
- "DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
57
- },
58
- }.tap {|extra|
59
- if git_own_repo_exist?
60
- extra["git"] = {
61
- "remote_origin_url" => git_own_repo.remote_origin_url, # may contain https token
62
- "name" => self.git_url_to_name(git_own_repo.remote_origin_url),
63
- "path" => git_own_repo.path,
64
- "workdir_path" => git_own_repo.workdir_path,
65
- "latest_commit" => git_own_repo.latest_commit,
66
- }
67
- end
68
-
69
- extra["ci-env"] = {"CI" => ENV["CI"]}
70
- ENV.select {|k, v| k.start_with?("CI_")}.each do |k, v|
71
- extra["ci-env"][k] = v
72
- end
73
- }
74
- end
75
-
76
- def _sentry_tags_context
77
- @_sentry_tags_context ||= {
78
- "dapp-name" => self.name,
79
- "dapp-short-version" => ::Dapp::VERSION.split(".")[0..1].join("."),
80
- "dapp-version" => ::Dapp::VERSION,
81
- "dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
82
- "dapp-command" => self.options[:dapp_command],
83
- }.tap {|tags|
84
- if git_own_repo_exist?
85
- tags["git-host"] = self.get_host_from_git_url(git_own_repo.remote_origin_url)
86
-
87
- git_name = self.git_url_to_name(git_own_repo.remote_origin_url)
88
-
89
- tags["git-group"] = git_name.partition("/")[0]
90
- tags["git-name"] = git_name
91
- end
92
-
93
- begin
94
- ver = self.class.host_docker_minor_version
95
- tags["docker-minor-version"] = ver.to_s
96
- rescue ::Exception
97
- end
98
- }
99
- end
100
-
101
- def _sentry_user_context
102
- @__sentry_user_context ||= {}
103
- end
104
- end # Sentry
105
- end # Dapp
106
- end # Dapp
@@ -1,23 +0,0 @@
1
- module Dapp
2
- module Helper
3
- module Url
4
- def git_url_to_name(url)
5
- url_without_scheme = url.split("://", 2).last
6
- # This may be broken, because "@" should delimit creds, not a ":"
7
- url_without_creds = url_without_scheme.split(":", 2).last
8
- url_without_creds.gsub(%r{.*?([^\/ ]+\/[^\/ ]+)\.git}, '\\1')
9
- end
10
-
11
- def get_host_from_git_url(url)
12
- url_without_scheme = url.split("://", 2).last
13
- url_without_creds = url_without_scheme.split("@", 2).last
14
-
15
- # Split out part after ":" in this kind of url: github.com:flant/dapp.git
16
- url_part = url_without_creds.split(":", 2).first
17
-
18
- # Split out part after first "/": github.com/flant/dapp.git
19
- url_part.split("/", 2).first
20
- end
21
- end # Url
22
- end # Helper
23
- end # Dapp