dapp 0.26.12 → 0.26.13

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: 150f425d2a33e65251409283bc05c659364f7b06
4
- data.tar.gz: 6e41c8fb2e4bc849a2bbad4eec88ca47fe49d9ba
3
+ metadata.gz: 5d412d73ba9ef9e52304ba44ec6dff7e3d4061da
4
+ data.tar.gz: 8389156770f560f2795986f5d761fe258b006c1f
5
5
  SHA512:
6
- metadata.gz: e46039d285fd2c158dc3d4e1370133660385d4b4936c4fca865692ccad3ae125ca9176e4efd073b260b36e71da080eef0f51fa44063f40281aba230402ed7ab5
7
- data.tar.gz: 94a3d4ee06c7a99963709b760593e69814fe0feb58d61ba60b12102ac5e8656cb6b01bc64b45b9105b034575fbf3664f440857aadb42a4bf81802b8196f52d5b
6
+ metadata.gz: eefabcec93c03e9510070449c1a426a32381b572b38df7a366b68d714a68c390e006d4d0b4f5eb5cbe1fa2299be1936d533225333d328032711eef11152b5794
7
+ data.tar.gz: 4719564edff45d34bc4e4ec1273679d817464b7dc492f76a83c19c1d41aec032220fb8dce36dc1fd6f8673dd464a5b26ec13f92598c4780da0812a6f4fb8fd7d
data/bin/dapp CHANGED
@@ -28,6 +28,10 @@ begin
28
28
  $stderr.puts "\033[1m\033[90mStacktrace dumped to #{filename}\033[0m"
29
29
  end
30
30
 
31
+ if Dapp::CLI.dapp_object
32
+ Dapp::CLI.dapp_object.sentry_exception(e)
33
+ end
34
+
31
35
  raise
32
36
  end
33
37
  rescue Dapp::Error::Shellout => e
data/lib/dapp.rb CHANGED
@@ -28,6 +28,8 @@ require 'base64'
28
28
  require 'io/console'
29
29
  require 'net/http'
30
30
  require 'progressbar'
31
+ require 'sentry-raven'
32
+ require 'toml-rb'
31
33
 
32
34
  require 'dapp/version'
33
35
  require 'dapp/core_ext/hash'
@@ -38,6 +40,7 @@ require 'dapp/helper/sha256'
38
40
  require 'dapp/helper/net_status'
39
41
  require 'dapp/helper/tar'
40
42
  require 'dapp/helper/yaml'
43
+ require 'dapp/helper/url'
41
44
  require 'dapp/prctl'
42
45
  require 'dapp/error/mod/user'
43
46
  require 'dapp/error/base'
@@ -58,6 +61,7 @@ require 'dapp/config/directive/base'
58
61
  require 'dapp/config/config'
59
62
  require 'dapp/dapp/lock'
60
63
  require 'dapp/dapp/ssh_agent'
64
+ require 'dapp/dapp/sentry'
61
65
  require 'dapp/dapp/git_artifact'
62
66
  require 'dapp/dapp/dappfile'
63
67
  require 'dapp/dapp/chef'
data/lib/dapp/cli.rb CHANGED
@@ -38,6 +38,10 @@ BANNER
38
38
  show_options: true,
39
39
  exit: 0
40
40
 
41
+ class << self
42
+ attr_accessor :dapp_object
43
+ end
44
+
41
45
  def initialize(*args)
42
46
  super(*args)
43
47
 
@@ -58,6 +58,8 @@ module Dapp
58
58
 
59
59
  def run_dapp_command(run_method, options: {}, log_running_time: true, try_host_docker_login: false)
60
60
  dapp = ::Dapp::Dapp.new(options: options)
61
+ ::Dapp::CLI.dapp_object = dapp
62
+ dapp.sentry_message("Manual usage: `#{options[:dapp_command]}` command") unless ENV['CI']
61
63
 
62
64
  log_dapp_running_time(dapp, ignore: !log_running_time) do
63
65
  begin
@@ -74,6 +76,10 @@ module Dapp
74
76
  end
75
77
  end
76
78
 
79
+ def run_method
80
+ class_to_lowercase
81
+ end
82
+
77
83
  def log_dapp_running_time(dapp, ignore: false)
78
84
  return yield if ignore
79
85
 
@@ -95,7 +101,7 @@ module Dapp
95
101
  self.class.print_error_with_help_and_die! self, "cannot use alias options --run-dir, --build-dir, --deploy-dir at the same time"
96
102
  end
97
103
 
98
- config.merge(build_dir: dirs.compact.first, **kwargs)
104
+ config.merge(build_dir: dirs.compact.first, dapp_command: run_method, **kwargs)
99
105
  end
100
106
  end
101
107
  end
data/lib/dapp/dapp.rb CHANGED
@@ -17,10 +17,13 @@ module Dapp
17
17
  include Logging::Paint
18
18
 
19
19
  include SshAgent
20
+ include Sentry
21
+
20
22
  include Helper::Sha256
21
- extend Helper::Trivia
23
+ extend Helper::Trivia
22
24
  include Helper::Trivia
23
25
  include Helper::Tar
26
+ include Helper::Url
24
27
 
25
28
  include Deps::Toolchain
26
29
  include Deps::Gitartifact
@@ -43,6 +46,18 @@ module Dapp
43
46
  self.class.options
44
47
  end
45
48
 
49
+ def settings
50
+ @settings ||= begin
51
+ settings_path = File.join(self.class.home_dir, "settings.toml")
52
+
53
+ if File.exists? settings_path
54
+ TomlRB.load_file(settings_path)
55
+ else
56
+ {}
57
+ end
58
+ end
59
+ end
60
+
46
61
  def name
47
62
  @name ||= begin
48
63
  n = begin
@@ -96,8 +111,8 @@ module Dapp
96
111
  self.class.tmp_base_dir
97
112
  end
98
113
 
99
- def build_path(*path)
100
- @build_path ||= begin
114
+ def build_dir
115
+ @build_dir ||= begin
101
116
  if option_build_dir
102
117
  Pathname.new(option_build_dir)
103
118
  else
@@ -105,7 +120,10 @@ module Dapp
105
120
  Pathname.new(dir)
106
121
  end.expand_path.tap(&:mkpath)
107
122
  end
108
- make_path(@build_path, *path)
123
+ end
124
+
125
+ def build_path(*path)
126
+ make_path(build_dir, *path)
109
127
  end
110
128
 
111
129
  def local_git_artifact_exclude_paths(&blk)
@@ -7,6 +7,12 @@ module Dapp
7
7
 
8
8
  def tags_by_scheme
9
9
  @tags_by_scheme_name ||= begin
10
+ if slug_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" => slug_tags})
13
+ end
14
+ end
15
+
10
16
  {}.tap do |tags_by_scheme|
11
17
  [slug_tags, branch_tags, ci_tags].each do |_tags_by_scheme|
12
18
  _tags_by_scheme.each do |scheme, tags|
@@ -89,4 +95,4 @@ module Dapp
89
95
  end
90
96
  end # Tags
91
97
  end # Dapp
92
- end # Dapp
98
+ end # Dapp
@@ -0,0 +1,106 @@
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
@@ -9,10 +9,6 @@ module Dapp::Dimg::CLI
9
9
  self.class.parse_options(self, argv)
10
10
  run_dapp_command(run_method, options: cli_options(dimgs_patterns: cli_arguments))
11
11
  end
12
-
13
- def run_method
14
- class_to_lowercase
15
- end
16
12
  end
17
13
  end
18
14
  end
@@ -3,14 +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
-
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')
12
+ @_name = git_url_to_name(url)
14
13
 
15
14
  super(**kwargs, &blk)
16
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
@@ -165,6 +165,7 @@ 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})
168
169
  end
169
170
 
170
171
  end # Thread
data/lib/dapp/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = "0.26.12"
2
+ VERSION = "0.26.13"
3
3
  BUILD_CACHE_VERSION = 27.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.26.12
4
+ version: 0.26.13
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-15 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
@@ -200,6 +200,34 @@ 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
203
231
  - !ruby/object:Gem::Dependency
204
232
  name: bundler
205
233
  requirement: !ruby/object:Gem::Requirement
@@ -462,6 +490,7 @@ files:
462
490
  - lib/dapp/dapp/logging/paint.rb
463
491
  - lib/dapp/dapp/logging/process.rb
464
492
  - lib/dapp/dapp/option_tags.rb
493
+ - lib/dapp/dapp/sentry.rb
465
494
  - lib/dapp/dapp/shellout/base.rb
466
495
  - lib/dapp/dapp/shellout/streaming.rb
467
496
  - lib/dapp/dapp/slug.rb
@@ -666,6 +695,7 @@ files:
666
695
  - lib/dapp/helper/sha256.rb
667
696
  - lib/dapp/helper/tar.rb
668
697
  - lib/dapp/helper/trivia.rb
698
+ - lib/dapp/helper/url.rb
669
699
  - lib/dapp/helper/yaml.rb
670
700
  - lib/dapp/kube.rb
671
701
  - lib/dapp/kube/cli/cli.rb