dapp 0.19.10 → 0.19.11

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
- 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