dapp 0.27.5 → 0.27.6

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