dapp 0.27.5 → 0.27.6

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: d1e643078bf570017b9c6e9094ad4931c7abfd65
4
- data.tar.gz: e2c385bc8931033054991efd1d6bdd4ec007f954
3
+ metadata.gz: 753a7c5401e466656b8eb3f7b5cc7a2a992f947d
4
+ data.tar.gz: b64dc0fc8e098b74630961a0935ead2628f0f4dd
5
5
  SHA512:
6
- metadata.gz: fb802f2a3a31e22d6fb7b040d375212b2db356a208c53b15b3e1460ff9cdf6f3dff0bd696ee6bda69891924d4c95e92cc1867656bd3f121aa4589164b657ec05
7
- data.tar.gz: 77622c1f4c45722a7026aced780593b7cf1d97a18d239f011e69dc974c6017a4fc22c5d8740cec0f6303d4623f94fb1a6f28416310aa981a4b1404206bb3814e
6
+ metadata.gz: cfab073aca54e884b871ee8e1451f08f2f749a0404cab7cfa4cb85f07b561b9f1650ef5167d094252889e09a672c3cc648c3139e0b28bdaaeddfb3a9f18ae5fe
7
+ data.tar.gz: ac085142a1fc6b329475deaed346283bfbdb84840f6efa1e6405a252b5a4b76e7c42074a8e65b612b1103d3d71f12d58f4b9b777b53e0afca0bf5ac1a173b3c2
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
@@ -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'
@@ -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
 
@@ -58,6 +58,7 @@ module Dapp
58
58
 
59
59
  def run_dapp_command(run_method, options: {}, try_host_docker_login: false)
60
60
  dapp = ::Dapp::Dapp.new(options: options)
61
+ ::Dapp::CLI.dapp_object = dapp
61
62
 
62
63
  log_dapp_running_time(dapp) do
63
64
  begin
@@ -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,101 @@
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
+ Raven.capture_exception(exception, _make_sentry_params(**kwargs))
13
+ end
14
+
15
+ def ensure_sentry_configured
16
+ return false unless sentry_settings = settings["sentry"]
17
+
18
+ unless @sentry_settings_configured
19
+ Raven.configure do |config|
20
+ logger = ::Logger.new(STDOUT)
21
+ logger.level = ::Logger::WARN
22
+
23
+ config.logger = logger
24
+ config.dsn = sentry_settings["dsn"]
25
+ end
26
+
27
+ @sentry_settings_configured = true
28
+ end
29
+
30
+ return true
31
+ end
32
+
33
+ def _make_sentry_params(level: nil, tags: {}, extra: {}, user: {})
34
+ {
35
+ level: level,
36
+ tags: _sentry_tags_context.merge(tags),
37
+ extra: _sentry_extra_context.merge(extra),
38
+ user: _sentry_user_context.merge(user),
39
+ }
40
+ end
41
+
42
+ def _sentry_extra_context
43
+ @_sentry_extra_context ||= {
44
+ "pwd" => Dir.pwd,
45
+ "dapp-dir" => self.work_dir,
46
+ "build-dir" => self.build_dir,
47
+ "options" => self.options,
48
+ "env-options" => {
49
+ "DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
50
+ "DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
51
+ "ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
52
+ "DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
53
+ },
54
+ }.tap {|extra|
55
+ if git_own_repo_exist?
56
+ extra["git"] = {
57
+ "remote_origin_url" => git_own_repo.remote_origin_url, # may contain https token
58
+ "name" => self.git_url_to_name(git_own_repo.remote_origin_url),
59
+ "path" => git_own_repo.path,
60
+ "workdir_path" => git_own_repo.workdir_path,
61
+ "latest_commit" => git_own_repo.latest_commit,
62
+ }
63
+ end
64
+
65
+ extra["ci-env"] = {"CI" => ENV["CI"]}
66
+ ENV.select {|k, v| k.start_with?("CI_")}.each do |k, v|
67
+ extra["ci-env"][k] = v
68
+ end
69
+ }
70
+ end
71
+
72
+ def _sentry_tags_context
73
+ @_sentry_tags_context ||= {
74
+ "dapp-name" => self.name,
75
+ "dapp-short-version" => ::Dapp::VERSION.split(".")[0..1].join("."),
76
+ "dapp-version" => ::Dapp::VERSION,
77
+ "dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
78
+ }.tap {|tags|
79
+ if git_own_repo_exist?
80
+ tags["git-host"] = self.get_host_from_git_url(git_own_repo.remote_origin_url)
81
+
82
+ git_name = self.git_url_to_name(git_own_repo.remote_origin_url)
83
+
84
+ tags["git-group"] = git_name.partition("/")[0]
85
+ tags["git-name"] = git_name
86
+ end
87
+
88
+ begin
89
+ ver = self.class.host_docker_minor_version
90
+ tags["docker-minor-version"] = ver.to_s
91
+ rescue ::Exception
92
+ end
93
+ }
94
+ end
95
+
96
+ def _sentry_user_context
97
+ @__sentry_user_context ||= {}
98
+ end
99
+ end # Sentry
100
+ end # Dapp
101
+ end # Dapp
@@ -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
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = "0.27.5"
2
+ VERSION = "0.27.6"
3
3
  BUILD_CACHE_VERSION = 28
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.27.5
4
+ version: 0.27.6
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
@@ -667,6 +696,7 @@ files:
667
696
  - lib/dapp/helper/sha256.rb
668
697
  - lib/dapp/helper/tar.rb
669
698
  - lib/dapp/helper/trivia.rb
699
+ - lib/dapp/helper/url.rb
670
700
  - lib/dapp/helper/yaml.rb
671
701
  - lib/dapp/kube.rb
672
702
  - lib/dapp/kube/cli/cli.rb
@@ -741,7 +771,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
741
771
  version: 2.5.0
742
772
  requirements: []
743
773
  rubyforge_project:
744
- rubygems_version: 2.6.11
774
+ rubygems_version: 2.5.1
745
775
  signing_key:
746
776
  specification_version: 4
747
777
  summary: Build docker packaged apps using chef or shell