dapp 0.19.10 → 0.19.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 9fea42eded6c41094e25751793e547b800ee07d9cb18f62accabaf6790ce9981
4
- data.tar.gz: af2996d835b94654a95ef57da7a72c98e9995703bed577faff03b9ea405eda57
2
+ SHA1:
3
+ metadata.gz: 3886b35e5f607e9753dfc72ca24008f6cc7c2723
4
+ data.tar.gz: 11ba036e48859960e826cc769b8df3e4e60b98b6
5
5
  SHA512:
6
- metadata.gz: a60897def80c96664d06bab35cfc2aa7caa8ccde46859e91583ecb22d5113ccc3b74b706e5a59df8e38e7656ab4f51dd0e4ffdfea4e2f0b3ecfd91271ce85812
7
- data.tar.gz: ed3fb680bc94d7e1bd05064f3cf3c9d14a6ffcb05ae96dd2c041e61799fcb766c0c83600d2ad8362eff54e33270bc890d15481f5f00660b40530ca3ba250b3b7
6
+ metadata.gz: 36cb56f06eadb64c74d13d423f50a2b737e2160919951463bf24c3bc3df0444b45779088a28ceb2c07169f056c6152f6c1720ad08e1b372cbf9a54a38d5751c6
7
+ data.tar.gz: eb23d51a61669705e76103320b21f16e18fc1ead511c3daa1df28866901d1235c631ba548d382e7db0f6cf8ffaeef02328dad9311a8b3f5a1e6acadde5b3f5fa
data/bin/dapp CHANGED
@@ -26,6 +26,10 @@ begin
26
26
  $stderr.puts "\033[1m\033[90mStacktrace dumped to #{filename}\033[0m"
27
27
  end
28
28
 
29
+ if Dapp::CLI.dapp_object
30
+ Dapp::CLI.dapp_object.sentry_exception(e)
31
+ end
32
+
29
33
  raise
30
34
  end
31
35
  rescue Dapp::Error::Shellout => e
@@ -24,6 +24,8 @@ require 'openssl'
24
24
  require 'etc'
25
25
  require 'zlib'
26
26
  require 'slugify'
27
+ require 'sentry-raven'
28
+ require 'toml-rb'
27
29
 
28
30
  require 'dapp/version'
29
31
  require 'dapp/core_ext/hash'
@@ -34,6 +36,7 @@ require 'dapp/helper/sha256'
34
36
  require 'dapp/helper/net_status'
35
37
  require 'dapp/helper/tar'
36
38
  require 'dapp/helper/yaml'
39
+ require 'dapp/helper/url'
37
40
  require 'dapp/prctl'
38
41
  require 'dapp/error/base'
39
42
  require 'dapp/error/dapp'
@@ -49,6 +52,7 @@ require 'dapp/config/config'
49
52
  require 'dapp/config/error/config'
50
53
  require 'dapp/dapp/lock'
51
54
  require 'dapp/dapp/ssh_agent'
55
+ require 'dapp/dapp/sentry'
52
56
  require 'dapp/dapp/git_artifact'
53
57
  require 'dapp/dapp/dappfile'
54
58
  require 'dapp/dapp/chef'
@@ -37,6 +37,10 @@ BANNER
37
37
  show_options: true,
38
38
  exit: 0
39
39
 
40
+ class << self
41
+ attr_accessor :dapp_object
42
+ end
43
+
40
44
  def initialize(*args)
41
45
  super(*args)
42
46
 
@@ -62,6 +62,8 @@ 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']
65
67
 
66
68
  log_dapp_running_time(dapp, ignore: !log_running_time) do
67
69
  if block_given?
@@ -72,6 +74,10 @@ module Dapp
72
74
  end
73
75
  end
74
76
 
77
+ def run_method
78
+ class_to_lowercase
79
+ end
80
+
75
81
  def log_dapp_running_time(dapp, ignore: false)
76
82
  return yield if ignore
77
83
 
@@ -88,7 +94,7 @@ module Dapp
88
94
  end
89
95
 
90
96
  def cli_options(**kwargs)
91
- config.merge(**kwargs)
97
+ config.merge(dapp_command: run_method, **kwargs)
92
98
  end
93
99
  end
94
100
  end
@@ -12,10 +12,13 @@ module Dapp
12
12
  include Logging::Paint
13
13
 
14
14
  include SshAgent
15
+ include Sentry
16
+
15
17
  include Helper::Sha256
16
- extend Helper::Trivia
18
+ extend Helper::Trivia
17
19
  include Helper::Trivia
18
20
  include Helper::Tar
21
+ include Helper::Url
19
22
 
20
23
  include Deps::Gitartifact
21
24
  include Deps::Base
@@ -35,6 +38,18 @@ module Dapp
35
38
  self.class.options
36
39
  end
37
40
 
41
+ def settings
42
+ @settings ||= begin
43
+ settings_path = File.join(self.class.home_dir, "settings.toml")
44
+
45
+ if File.exists? settings_path
46
+ TomlRB.load_file(settings_path)
47
+ else
48
+ {}
49
+ end
50
+ end
51
+ end
52
+
38
53
  def name
39
54
  @name ||= begin
40
55
  if name = options[:name]
@@ -77,15 +92,18 @@ module Dapp
77
92
  self.class.tmp_base_dir
78
93
  end
79
94
 
80
- def build_path(*path)
81
- @build_path ||= begin
95
+ def build_dir
96
+ @build_dir ||= begin
82
97
  if option_build_dir
83
98
  Pathname.new(option_build_dir)
84
99
  else
85
100
  path('.dapp_build')
86
101
  end.expand_path.tap(&:mkpath)
87
102
  end
88
- make_path(@build_path, *path)
103
+ end
104
+
105
+ def build_path(*path)
106
+ make_path(build_dir, *path)
89
107
  end
90
108
 
91
109
  def local_git_artifact_exclude_paths(&blk)
@@ -131,6 +149,10 @@ module Dapp
131
149
  end
132
150
 
133
151
  class << self
152
+ def home_dir
153
+ File.join(Dir.home, ".dapp")
154
+ end
155
+
134
156
  def options
135
157
  @options ||= {}
136
158
  end
@@ -0,0 +1,112 @@
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
@@ -20,10 +20,6 @@ module Dapp::Dimg::CLI
20
20
  end
21
21
  end
22
22
  end
23
-
24
- def run_method
25
- class_to_lowercase
26
- end
27
23
  end
28
24
  end
29
25
  end
@@ -3,11 +3,13 @@ module Dapp
3
3
  module Config
4
4
  module Directive
5
5
  class GitArtifactRemote < GitArtifactLocal
6
+ include ::Dapp::Helper::Url
7
+
6
8
  attr_reader :_url, :_name, :_branch, :_commit
7
9
 
8
10
  def initialize(url, **kwargs, &blk)
9
11
  @_url = url
10
- @_name = url.gsub(%r{.*?([^\/ ]+\/[^\/ ]+)\.git}, '\\1')
12
+ @_name = git_url_to_name(url)
11
13
 
12
14
  super(**kwargs, &blk)
13
15
  end
@@ -0,0 +1,23 @@
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
@@ -59,7 +59,14 @@ module Dapp
59
59
  end
60
60
 
61
61
  watch_hooks_thr = Thread.new do
62
- watch_hooks.each {|job| Kubernetes::Manager::Job.new(self, job.name).watch_till_done!}
62
+ watch_hooks.each {|job|
63
+ begin
64
+ Kubernetes::Manager::Job.new(self, job.name).watch_till_done!
65
+ rescue ::Exception => e
66
+ sentry_exception(e, extra: {"job-spec" => job.spec})
67
+ raise
68
+ end
69
+ }
63
70
  end
64
71
 
65
72
  deployment_managers = release.deployments.values
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = '0.19.10'.freeze
2
+ VERSION = '0.19.11'.freeze
3
3
  BUILD_CACHE_VERSION = 22.1
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.19.10
4
+ version: 0.19.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-04 00:00:00.000000000 Z
11
+ date: 2018-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -186,6 +186,34 @@ dependencies:
186
186
  - - ">="
187
187
  - !ruby/object:Gem::Version
188
188
  version: 1.0.6
189
+ - !ruby/object:Gem::Dependency
190
+ name: sentry-raven
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: 2.7.2
196
+ type: :runtime
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: 2.7.2
203
+ - !ruby/object:Gem::Dependency
204
+ name: toml-rb
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: 1.1.1
210
+ type: :runtime
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: 1.1.1
189
217
  - !ruby/object:Gem::Dependency
190
218
  name: bundler
191
219
  requirement: !ruby/object:Gem::Requirement
@@ -443,6 +471,7 @@ files:
443
471
  - lib/dapp/dapp/logging/i18n.rb
444
472
  - lib/dapp/dapp/logging/paint.rb
445
473
  - lib/dapp/dapp/logging/process.rb
474
+ - lib/dapp/dapp/sentry.rb
446
475
  - lib/dapp/dapp/shellout/base.rb
447
476
  - lib/dapp/dapp/shellout/streaming.rb
448
477
  - lib/dapp/dapp/ssh_agent.rb
@@ -634,6 +663,7 @@ files:
634
663
  - lib/dapp/helper/sha256.rb
635
664
  - lib/dapp/helper/tar.rb
636
665
  - lib/dapp/helper/trivia.rb
666
+ - lib/dapp/helper/url.rb
637
667
  - lib/dapp/helper/yaml.rb
638
668
  - lib/dapp/kube.rb
639
669
  - lib/dapp/kube/cli/cli.rb
@@ -705,7 +735,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
705
735
  version: 2.5.0
706
736
  requirements: []
707
737
  rubyforge_project:
708
- rubygems_version: 2.7.3
738
+ rubygems_version: 2.5.1
709
739
  signing_key:
710
740
  specification_version: 4
711
741
  summary: Build docker packaged apps using chef or shell