dapp 0.13.26 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 557eecaf7833aafc8165c5a3191b3c4d961044fa
4
- data.tar.gz: a7d766a573beb19a0cd1c99bfdb9e484e2c344c2
3
+ metadata.gz: 895148a805cfe81e9fd0b6b11fe3dfc58f746a6f
4
+ data.tar.gz: a07d1a3ae7209847e5fa836464a5ab9a6f3d4c90
5
5
  SHA512:
6
- metadata.gz: 6b396fcf8969353a6a704a09344131d04dfe5c6295c003cc69519086c0f1d25c18ceaf99bab0a5b9f2a09108bb3bd22803b575d5cb9c7962a6ef97df71024196
7
- data.tar.gz: dacf00d79fa3004474c3ae45dd231d7e608275075f0624bd789796ad798cfa28912aafe29226b5fce3eacfca0c9a607a25fd6d66d6fbfb6c7b1c14545f61c872
6
+ metadata.gz: eb6190e22c37d6f3709cfe881485e994c3084e0480a10548cab4072ef5eeaf66baf2cca6d81638aaf42781b57f92cf3a07b01a7e26bbcbc3eed873e87796bf00
7
+ data.tar.gz: 62e11ceb271eb71ae7a68e459da907c10f1d8a6ecd08608c99d58a186b7788ac0ce39614a84065dcd1c17963f6cd91ab19a0fba78f544768c87b8fcb4e72ac1e
data/bin/dapp CHANGED
@@ -14,10 +14,6 @@ begin
14
14
  $stderr.puts(message)
15
15
  end
16
16
 
17
- if Dapp::CLI.dapp_object
18
- Dapp::CLI.dapp_object.sentry_exception(e)
19
- end
20
-
21
17
  raise
22
18
  end
23
19
  rescue ::SystemExit
data/lib/dapp.rb CHANGED
@@ -23,8 +23,6 @@ require 'yaml'
23
23
  require 'openssl'
24
24
  require 'etc'
25
25
  require 'zlib'
26
- require 'sentry-raven'
27
- require 'toml-rb'
28
26
 
29
27
  require 'dapp/version'
30
28
  require 'dapp/core_ext/hash'
@@ -35,7 +33,6 @@ require 'dapp/helper/sha256'
35
33
  require 'dapp/helper/net_status'
36
34
  require 'dapp/helper/tar'
37
35
  require 'dapp/helper/yaml'
38
- require 'dapp/helper/url'
39
36
  require 'dapp/prctl'
40
37
  require 'dapp/error/base'
41
38
  require 'dapp/error/dapp'
@@ -51,7 +48,6 @@ require 'dapp/config/config'
51
48
  require 'dapp/config/error/config'
52
49
  require 'dapp/dapp/lock'
53
50
  require 'dapp/dapp/ssh_agent'
54
- require 'dapp/dapp/sentry'
55
51
  require 'dapp/dapp/git_artifact'
56
52
  require 'dapp/dapp/dappfile'
57
53
  require 'dapp/dapp/chef'
data/lib/dapp/cli.rb CHANGED
@@ -37,10 +37,6 @@ BANNER
37
37
  show_options: true,
38
38
  exit: 0
39
39
 
40
- class << self
41
- attr_accessor :dapp_object
42
- end
43
-
44
40
  def initialize(*args)
45
41
  super(*args)
46
42
 
@@ -56,16 +56,12 @@ module Dapp
56
56
  super()
57
57
  end
58
58
 
59
- def run_method
60
- class_to_lowercase
61
- end
62
-
63
59
  def run(_argv = ARGV)
64
60
  raise
65
61
  end
66
62
 
67
63
  def cli_options(**kvargs)
68
- config.merge(dapp_command: run_method, **kvargs)
64
+ config.merge(**kvargs)
69
65
  end
70
66
  end
71
67
  end
@@ -9,6 +9,10 @@ module Dapp
9
9
  !!@_dev_mode
10
10
  end
11
11
 
12
+ def after_parsing!
13
+ do_all!('_after_parsing!')
14
+ end
15
+
12
16
  def validate!
13
17
  do_all!('_validate!')
14
18
  end
data/lib/dapp/dapp.rb CHANGED
@@ -12,13 +12,9 @@ module Dapp
12
12
  include Logging::Paint
13
13
 
14
14
  include SshAgent
15
- include Sentry
16
-
17
15
  include Helper::Sha256
18
- extend Helper::Trivia
19
16
  include Helper::Trivia
20
17
  include Helper::Tar
21
- include Helper::Url
22
18
 
23
19
  include Deps::Gitartifact
24
20
  include Deps::Base
@@ -32,21 +28,6 @@ module Dapp
32
28
  Logging::I18n.initialize
33
29
  validate_config_options!
34
30
  Logging::Paint.initialize(option_color)
35
-
36
- ::Dapp::CLI.dapp_object = self
37
- sentry_message("Manual usage: `#{options[:dapp_command]}` command") unless ENV['CI']
38
- end
39
-
40
- def settings
41
- @settings ||= begin
42
- settings_path = File.join(self.class.home_dir, "settings.toml")
43
-
44
- if File.exists? settings_path
45
- TomlRB.load_file(settings_path)
46
- else
47
- {}
48
- end
49
- end
50
31
  end
51
32
 
52
33
  def name
@@ -89,18 +70,15 @@ module Dapp
89
70
  File.expand_path(options[:tmp_dir_prefix] || '/tmp')
90
71
  end
91
72
 
92
- def build_dir
93
- @build_dir ||= begin
73
+ def build_path(*path)
74
+ @build_path ||= begin
94
75
  if option_build_dir
95
76
  Pathname.new(option_build_dir)
96
77
  else
97
78
  path('.dapp_build')
98
79
  end.expand_path.tap(&:mkpath)
99
80
  end
100
- end
101
-
102
- def build_path(*path)
103
- make_path(build_dir, *path)
81
+ make_path(@build_path, *path)
104
82
  end
105
83
 
106
84
  def local_git_artifact_exclude_paths(&blk)
@@ -124,10 +102,6 @@ module Dapp
124
102
  self.class.host_docker_bin
125
103
  end
126
104
 
127
- def self.home_dir
128
- File.join(Dir.home, ".dapp")
129
- end
130
-
131
105
  def self.host_docker_bin
132
106
  @host_docker_bin ||= begin
133
107
  raise Error::Dapp, code: :docker_not_found if (res = shellout('which docker')).exitstatus.nonzero?
@@ -33,6 +33,7 @@ module Dapp
33
33
  ::Dapp::Config::Config.new(dapp: self).tap do |config|
34
34
  begin
35
35
  config.instance_eval File.read(dappfile_path), dappfile_path
36
+ config.after_parsing!
36
37
  config.validate!
37
38
  rescue SyntaxError, StandardError => e
38
39
  backtrace = e.backtrace.find { |line| line.start_with?(dappfile_path) }
@@ -31,7 +31,7 @@ module Dapp
31
31
  end
32
32
 
33
33
  def git_artifacts_dev_patch_hashes
34
- dimg.git_artifacts.map(&:dev_patch_hash)
34
+ dimg.git_artifacts.map {|ga| ga.dev_patch_hash(self)}
35
35
  end
36
36
  end # GALatestPatch
37
37
  end # Stage
@@ -5,6 +5,10 @@ module Dapp::Dimg::CLI
5
5
  self.class.parse_options(self, argv)
6
6
  ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments)).public_send(run_method)
7
7
  end
8
+
9
+ def run_method
10
+ class_to_lowercase
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -8,6 +8,10 @@ module Dapp
8
8
 
9
9
  protected
10
10
 
11
+ def dimg_after_parsing!
12
+ _dimg.each(&:artifacts_after_parsing!)
13
+ end
14
+
11
15
  def dimg_config_validate!
12
16
  raise Error::Config, code: :dimg_name_required if _dimg.any? { |dimg| dimg._name.nil? } && _dimg.size > 1
13
17
  _dimg.each(&:validate!)
@@ -130,6 +130,10 @@ module Dapp
130
130
  end
131
131
  end
132
132
 
133
+ def artifacts_after_parsing!
134
+ _artifacts_auto_excluding!
135
+ end
136
+
133
137
  protected
134
138
 
135
139
  def builder(type)
@@ -140,6 +144,42 @@ module Dapp
140
144
  def passed_directives
141
145
  [:@_chef, :@_shell, :@_docker, :@_git_artifact, :@_mount, :@_artifact_groups, :@_builder]
142
146
  end
147
+
148
+ def _artifacts_auto_excluding!
149
+ path_to_relative = proc { |path| path.reverse.chomp('/').reverse }
150
+
151
+ all_artifacts.reduce({}) do |hash, artifact|
152
+ unless artifact._to.nil?
153
+ to_common = artifact._to[/^\/[^\/]*/]
154
+ hash[to_common] ||= []
155
+ hash[to_common] << artifact
156
+ end
157
+ hash
158
+ end.each do |to_common, artifacts|
159
+ include_paths_common = artifacts.reduce([]) do |arr, artifact|
160
+ arr << artifact._to.sub(to_common, '')
161
+ arr.concat(artifact._include_paths.map { |path| File.join(artifact._to.sub(to_common, ''), path) } )
162
+ arr
163
+ end.map(&path_to_relative).uniq
164
+
165
+ artifacts.each do |artifact|
166
+ artifact_include_shift = path_to_relative.call(artifact._to.sub(to_common, ''))
167
+
168
+ include_paths_common.each do |path|
169
+ next if artifact_include_shift.start_with? path
170
+
171
+ path = path_to_relative.call(path.sub(artifact_include_shift, ''))
172
+ unless artifact._include_paths.any? { |ipath| ipath.start_with? path } || artifact._exclude_paths.any? { |epath| path.start_with? epath }
173
+ artifact._exclude_paths << path
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ def all_artifacts
181
+ _artifact + _git_artifact._local + _git_artifact._remote
182
+ end
143
183
  end # InstanceMethods
144
184
  # rubocop:enable Metrics/ModuleLength
145
185
  end # Dimg
@@ -67,7 +67,7 @@ module Dapp
67
67
  end
68
68
 
69
69
  def validate_artifacts!
70
- artifacts = validate_artifact_format(validated_artifacts)
70
+ artifacts = validate_artifact_format(all_artifacts)
71
71
  loop do
72
72
  break if artifacts.empty?
73
73
  verifiable_artifact = artifacts.shift
@@ -133,10 +133,6 @@ module Dapp
133
133
  !(art._before.nil? && art._after.nil?)
134
134
  end
135
135
  end
136
-
137
- def validated_artifacts
138
- _artifact + _git_artifact._local + _git_artifact._remote
139
- end
140
136
  end # Validation
141
137
  # rubocop:enable Metrics/ModuleLength
142
138
  end # Dimg
@@ -3,13 +3,11 @@ 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
- @_name = git_url_to_name(url)
10
+ @_name = url.gsub(%r{.*?([^\/ ]+)\.git}, '\\1')
13
11
 
14
12
  super(**kwargs, &blk)
15
13
  end
@@ -7,6 +7,8 @@ module Dapp
7
7
  attr_reader :repo
8
8
  attr_reader :name
9
9
 
10
+ # FIXME: переименовать cwd в from
11
+
10
12
  # rubocop:disable Metrics/ParameterLists
11
13
  def initialize(repo, to:, name: nil, branch: nil, commit: nil,
12
14
  cwd: nil, include_paths: nil, exclude_paths: nil, owner: nil, group: nil,
@@ -28,28 +30,89 @@ module Dapp
28
30
  end
29
31
  # rubocop:enable Metrics/ParameterLists
30
32
 
31
- def apply_archive_command(stage)
32
- credentials = [:owner, :group].map { |attr| "--#{attr}=#{send(attr)}" unless send(attr).nil? }.compact
33
+ def cwd_type(stage)
34
+ if dev_mode?
35
+ p = repo.workdir_path.join(cwd)
36
+ if p.exist?
37
+ if p.directory?
38
+ :directory
39
+ else
40
+ :file
41
+ end
42
+ end
43
+ elsif cwd == ''
44
+ :directory
45
+ else
46
+ commit = repo.lookup_commit(stage.layer_commit(self))
47
+
48
+ cwd_entry = begin
49
+ commit.tree.path(cwd)
50
+ rescue Rugged::TreeError
51
+ end
52
+
53
+ if cwd_entry
54
+ if cwd_entry[:type] == :tree
55
+ :directory
56
+ else
57
+ :file
58
+ end
59
+ end
60
+ end
61
+ end
33
62
 
63
+ def apply_archive_command(stage)
34
64
  [].tap do |commands|
35
- commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{to}"
36
65
  if archive_any_changes?(stage)
37
- commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(*archive_stage_commits(stage))} -C #{to}"
66
+ case cwd_type(stage)
67
+ when :directory
68
+ stage.image.add_service_change_label :"dapp-git-#{paramshash}-type" => 'directory'
69
+
70
+ commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{to}"
71
+ commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(stage, *archive_stage_commits(stage))} -C #{to}"
72
+ when :file
73
+ stage.image.add_service_change_label :"dapp-git-#{paramshash}-type" => 'file'
74
+
75
+ commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{File.dirname(to)}"
76
+ commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(stage, *archive_stage_commits(stage))} -C #{File.dirname(to)}"
77
+ end
38
78
  end
39
79
  end
40
80
  end
41
81
 
82
+ def archive_type
83
+ repo.dimg.stage_by_name(:g_a_archive).image.labels["dapp-git-#{paramshash}-type"].to_s.to_sym
84
+ end
85
+
42
86
  def apply_patch_command(stage)
43
87
  [].tap do |commands|
44
88
  if dev_mode?
45
89
  if any_changes?(*dev_patch_stage_commits(stage))
46
- changed_files = diff_patches(*dev_patch_stage_commits(stage)).map {|p| File.join(to, cwd, p.delta.new_file[:path])}
47
- commands << "#{sudo}#{repo.dimg.dapp.rm_bin} -rf #{changed_files.join(' ')}"
48
- commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(*dev_patch_stage_commits(stage))} -C #{to}"
90
+ case archive_type
91
+ when :directory
92
+ changed_files = diff_patches(*dev_patch_stage_commits(stage)).map {|p| File.join(to, cwd, p.delta.new_file[:path])}
93
+ commands << "#{repo.dimg.dapp.rm_bin} -rf #{changed_files.join(' ')}"
94
+ commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{to}"
95
+ commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(stage, *dev_patch_stage_commits(stage))} -C #{to}"
96
+ when :file
97
+ commands << "#{repo.dimg.dapp.rm_bin} -rf #{to}"
98
+ commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{File.dirname(to)}"
99
+ commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(stage, *dev_patch_stage_commits(stage))} -C #{File.dirname(to)}"
100
+ else
101
+ raise
102
+ end
49
103
  end
50
104
  else
51
105
  if patch_any_changes?(stage)
52
- commands << "#{sudo}#{repo.dimg.dapp.git_bin} apply --whitespace=nowarn --directory=#{to} --unsafe-paths #{patch_file(*patch_stage_commits(stage))}"
106
+ case archive_type
107
+ when :directory
108
+ commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{to}"
109
+ commands << "#{sudo}#{repo.dimg.dapp.git_bin} apply --whitespace=nowarn --directory=#{to} --unsafe-paths #{patch_file(stage, *patch_stage_commits(stage))}"
110
+ when :file
111
+ commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{File.dirname(to)}"
112
+ commands << "#{sudo}#{repo.dimg.dapp.git_bin} apply --whitespace=nowarn --directory=#{File.dirname(to)} --unsafe-paths #{patch_file(stage, *patch_stage_commits(stage))}"
113
+ else
114
+ raise
115
+ end
53
116
  end
54
117
  end
55
118
  end
@@ -103,12 +166,11 @@ module Dapp
103
166
  end
104
167
  end
105
168
 
106
- def dev_patch_hash
169
+ def dev_patch_hash(stage)
107
170
  return unless dev_mode?
108
171
 
109
172
  Digest::SHA256.hexdigest(diff_patches(latest_commit, nil).map do |patch|
110
- next unless (path = repo.path.dirname.join(patch.delta.new_file[:path])).file?
111
- File.read(path)
173
+ change_patch_new_file_path(stage, patch)
112
174
  end.join(':::'))
113
175
  end
114
176
 
@@ -146,7 +208,11 @@ module Dapp
146
208
  repo.dimg.dapp.sudo_command(owner: owner, group: group)
147
209
  end
148
210
 
149
- def archive_file(from_commit, to_commit)
211
+ def credentials
212
+ [:owner, :group].map { |attr| "--#{attr}=#{send(attr)}" unless send(attr).nil? }.compact
213
+ end
214
+
215
+ def archive_file(stage, from_commit, to_commit)
150
216
  tar_write(repo.dimg.tmp_path('archives', archive_file_name(from_commit, to_commit))) do |tar|
151
217
  diff_patches(from_commit, to_commit).each do |patch|
152
218
  entry = patch.delta.new_file
@@ -161,9 +227,9 @@ module Dapp
161
227
  end
162
228
 
163
229
  if entry[:mode] == 40960 # symlink
164
- tar.add_symlink slice_cwd(entry[:path]), content, entry[:mode]
230
+ tar.add_symlink slice_cwd(stage, entry[:path]), content, entry[:mode]
165
231
  else
166
- tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
232
+ tar.add_file slice_cwd(stage, entry[:path]), entry[:mode] do |tf|
167
233
  tf.write content
168
234
  end
169
235
  end
@@ -174,35 +240,54 @@ module Dapp
174
240
  raise Error::TarWriter, message: e.message
175
241
  end
176
242
 
177
- def slice_cwd(path)
243
+ def slice_cwd(stage, path)
178
244
  return path if cwd.empty?
179
- path
180
- .reverse
181
- .chomp(cwd.reverse)
182
- .reverse
245
+
246
+ case cwd_type(stage)
247
+ when :directory
248
+ path
249
+ .reverse
250
+ .chomp(cwd.reverse)
251
+ .reverse
252
+ when :file
253
+ File.basename(to)
254
+ else
255
+ raise
256
+ end
183
257
  end
184
258
 
185
259
  def archive_file_name(from_commit, to_commit)
186
260
  file_name(from_commit, to_commit, 'tar')
187
261
  end
188
262
 
189
- def patch_file(from_commit, to_commit)
263
+ def patch_file(stage, from_commit, to_commit)
190
264
  File.open(repo.dimg.tmp_path('patches', patch_file_name(from_commit, to_commit)), File::RDWR | File::CREAT) do |f|
191
- diff_patches(from_commit, to_commit).each { |patch| f.write change_patch_new_file_path(patch) }
265
+ diff_patches(from_commit, to_commit).each { |patch| f.write change_patch_new_file_path(stage, patch) }
192
266
  end
193
267
  repo.dimg.container_tmp_path('patches', patch_file_name(from_commit, to_commit))
194
268
  end
195
269
 
196
270
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
197
- def change_patch_new_file_path(patch)
271
+ def change_patch_new_file_path(stage, patch)
198
272
  patch.to_s.lines.tap do |lines|
199
273
  modify_patch_line = proc do |line_number, path_char|
200
274
  action_part, path_part = lines[line_number].split
201
275
  if (path_with_cwd = path_part.partition("#{path_char}/").last).start_with?(cwd)
202
- path_with_cwd.sub(cwd, '').tap do |native_path|
276
+ native_path = case archive_type
277
+ when :directory
278
+ path_with_cwd.sub(cwd, '')
279
+ when :file
280
+ File.basename(to)
281
+ else
282
+ raise
283
+ end
284
+
285
+ if native_path
203
286
  expected_path = File.join(path_char, native_path)
204
287
  lines[line_number] = [action_part, expected_path].join(' ') + "\n"
205
288
  end
289
+
290
+ native_path
206
291
  end
207
292
  end
208
293
 
@@ -10,6 +10,10 @@ module Dapp
10
10
  dimg.dapp.local_git_artifact_exclude_paths
11
11
  end
12
12
 
13
+ def workdir_path
14
+ Pathname(git.workdir)
15
+ end
16
+
13
17
  def path
14
18
  @path ||= Pathname(Rugged::Repository.discover(dimg.home_path.to_s).path)
15
19
  rescue Rugged::RepositoryError => _e
@@ -143,14 +143,7 @@ module Dapp
143
143
  end
144
144
 
145
145
  watch_hooks_thr = Thread.new do
146
- watch_hooks.each {|job|
147
- begin
148
- Kubernetes::Manager::Job.new(self, job.name).watch_till_done!
149
- rescue ::Exception => e
150
- sentry_exception(e, extra: {"job-spec" => job.spec})
151
- raise
152
- end
153
- }
146
+ watch_hooks.each {|job| Kubernetes::Manager::Job.new(self, job.name).watch_till_done!}
154
147
  end
155
148
 
156
149
  deployment_managers = release.deployments.values
@@ -4,8 +4,6 @@ module Dapp
4
4
  class Client
5
5
  include Helper::YAML
6
6
 
7
- ::Dapp::Dapp::Shellout::Base.default_env_keys << 'KUBECONFIG'
8
-
9
7
  def initialize(namespace: nil)
10
8
  @namespace = namespace
11
9
  @query_parameters = {}
@@ -255,10 +253,7 @@ module Dapp
255
253
 
256
254
  def kube_config
257
255
  @kube_config ||= begin
258
- kube_config_path = ENV['KUBECONFIG']
259
- kube_config_path = File.join(ENV['HOME'], '.kube/config') unless kube_config_path
260
-
261
- if File.exist?(kube_config_path)
256
+ if File.exist?((kube_config_path = File.join(ENV['HOME'], '.kube/config')))
262
257
  yaml_load_file(kube_config_path)
263
258
  else
264
259
  raise Error::Base, code: :kube_config_not_found, data: { path: kube_config_path }
data/lib/dapp/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = '0.13.26'.freeze
3
- BUILD_CACHE_VERSION = 18
2
+ VERSION = '0.14.0'.freeze
3
+ BUILD_CACHE_VERSION = 16
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.13.26
4
+ version: 0.14.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: 2018-03-16 00:00:00.000000000 Z
11
+ date: 2017-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -166,34 +166,6 @@ dependencies:
166
166
  - - "~>"
167
167
  - !ruby/object:Gem::Version
168
168
  version: 0.1.6
169
- - !ruby/object:Gem::Dependency
170
- name: sentry-raven
171
- requirement: !ruby/object:Gem::Requirement
172
- requirements:
173
- - - "~>"
174
- - !ruby/object:Gem::Version
175
- version: 2.7.2
176
- type: :runtime
177
- prerelease: false
178
- version_requirements: !ruby/object:Gem::Requirement
179
- requirements:
180
- - - "~>"
181
- - !ruby/object:Gem::Version
182
- version: 2.7.2
183
- - !ruby/object:Gem::Dependency
184
- name: toml-rb
185
- requirement: !ruby/object:Gem::Requirement
186
- requirements:
187
- - - "~>"
188
- - !ruby/object:Gem::Version
189
- version: 1.1.1
190
- type: :runtime
191
- prerelease: false
192
- version_requirements: !ruby/object:Gem::Requirement
193
- requirements:
194
- - - "~>"
195
- - !ruby/object:Gem::Version
196
- version: 1.1.1
197
169
  - !ruby/object:Gem::Dependency
198
170
  name: bundler
199
171
  requirement: !ruby/object:Gem::Requirement
@@ -451,7 +423,6 @@ files:
451
423
  - lib/dapp/dapp/logging/i18n.rb
452
424
  - lib/dapp/dapp/logging/paint.rb
453
425
  - lib/dapp/dapp/logging/process.rb
454
- - lib/dapp/dapp/sentry.rb
455
426
  - lib/dapp/dapp/shellout/base.rb
456
427
  - lib/dapp/dapp/shellout/streaming.rb
457
428
  - lib/dapp/dapp/ssh_agent.rb
@@ -648,7 +619,6 @@ files:
648
619
  - lib/dapp/helper/sha256.rb
649
620
  - lib/dapp/helper/tar.rb
650
621
  - lib/dapp/helper/trivia.rb
651
- - lib/dapp/helper/url.rb
652
622
  - lib/dapp/helper/yaml.rb
653
623
  - lib/dapp/kube.rb
654
624
  - lib/dapp/kube/cli/cli.rb
@@ -716,7 +686,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
716
686
  version: 2.5.0
717
687
  requirements: []
718
688
  rubyforge_project:
719
- rubygems_version: 2.5.1
689
+ rubygems_version: 2.6.11
720
690
  signing_key:
721
691
  specification_version: 4
722
692
  summary: Build docker packaged apps using chef or shell
@@ -1,112 +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
- "options" => self.options,
51
- "env-options" => {
52
- "DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
53
- "DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
54
- "ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
55
- "DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
56
- },
57
- }.tap {|extra|
58
- extra["ci-env"] = {"CI" => ENV["CI"]}
59
- ENV.select {|k, v| k.start_with?("CI_")}.each do |k, v|
60
- extra["ci-env"][k] = v
61
- end
62
- }
63
- end
64
-
65
- def _sentry_tags_context
66
- name = options[:name] ||
67
- @_sentry_tags_context ||= {
68
- "dapp-short-version" => ::Dapp::VERSION.split(".")[0..1].join("."),
69
- "dapp-version" => ::Dapp::VERSION,
70
- "dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
71
- "dapp-command" => self.options[:dapp_command],
72
- }.tap {|tags|
73
- git_config_path = File.join(Dir.pwd, ".git/config")
74
-
75
- tags["dapp-name"] = options[:name]
76
-
77
- if File.exists? git_config_path
78
- cfg = IniFile.load(File.join(Dir.pwd, ".git/config"))
79
- remote_origin_cfg = cfg['remote "origin"']
80
- remote_origin_url = remote_origin_cfg["url"]
81
- if remote_origin_url
82
- tags["dapp-name"] ||= begin
83
- repo_name = remote_origin_url.split('/').last
84
- repo_name = repo_name[/.*(?=\.git)/] if repo_name.end_with? '.git'
85
- repo_name
86
- end
87
-
88
- tags["git-host"] = self.get_host_from_git_url(remote_origin_url)
89
-
90
- git_name = self.git_url_to_name(remote_origin_url)
91
-
92
- tags["git-group"] = git_name.partition("/")[0]
93
- tags["git-name"] = git_name
94
- end
95
- end
96
-
97
- tags["dapp-name"] ||= File.basename(Dir.pwd)
98
-
99
- begin
100
- ver = self.class.host_docker_minor_version
101
- tags["docker-minor-version"] = ver.to_s
102
- rescue ::Exception
103
- end
104
- }
105
- end
106
-
107
- def _sentry_user_context
108
- @_sentry_user_context ||= {}
109
- end
110
- end # Sentry
111
- end # Dapp
112
- 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