dapp 0.12.7 → 0.12.8

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: 0ae33ea300290cdf11a46bab9e8432d2c71f3433
4
- data.tar.gz: 32c5e1589de895853f62dfbd9d62bd811264662f
3
+ metadata.gz: abb0b46dd26ada57b287c0fb49aec41ce51b5519
4
+ data.tar.gz: 45e624bd7960c59a03dfdf85969b66af9007ab2a
5
5
  SHA512:
6
- metadata.gz: 0096daae7f8e449896e3d498f93c89cb694df5ccd6c3693d39744bfb5f3bbfa962fac02177999101066ffa37eccb6887ee2737968e3b7e8caa3eb788d04d521d
7
- data.tar.gz: 1977267b13a8c8035877c3c204491f0ec8f5841cbc360c321b44baebac0dc5212e4709532dc5d03b67c05e9d28fd974893cdf3775127c00676c58ac46a9a3bbd
6
+ metadata.gz: becc23aa741a453d0fc3cae98b1ec0aad96e6de24c0db7e835bd4e82c3e0e5be6f5a8fc3f4d9a9b05c43220ddb89d9fc530d2ecf8fc1fc76b5fd7a3bfa25f85a
7
+ data.tar.gz: 11fdcb6e12957eb737c3cf68479ff1044264de3d9ddf275a1a770412ad3e00e7c55ca99fb803b3eb98ecdfa29f41332af3413b480736e8e4503d05b50e11f51f
data/bin/dapp CHANGED
@@ -27,6 +27,10 @@ begin
27
27
  $stderr.puts(message)
28
28
  end
29
29
 
30
+ if Dapp::CLI.dapp_object
31
+ Dapp::CLI.dapp_object.sentry_exception(e)
32
+ end
33
+
30
34
  raise
31
35
  end
32
36
  rescue ::SystemExit
data/lib/dapp.rb CHANGED
@@ -22,6 +22,8 @@ require 'net_status'
22
22
  require 'yaml'
23
23
  require 'openssl'
24
24
  require 'etc'
25
+ require 'sentry-raven'
26
+ require 'toml-rb'
25
27
 
26
28
  require 'dapp/version'
27
29
  require 'dapp/core_ext/hash'
@@ -30,6 +32,7 @@ require 'dapp/helper/cli'
30
32
  require 'dapp/helper/trivia'
31
33
  require 'dapp/helper/sha256'
32
34
  require 'dapp/helper/net_status'
35
+ require 'dapp/helper/url'
33
36
  require 'dapp/prctl'
34
37
  require 'dapp/error/base'
35
38
  require 'dapp/error/dapp'
@@ -43,6 +46,7 @@ require 'dapp/config/config'
43
46
  require 'dapp/config/error/config'
44
47
  require 'dapp/dapp/lock'
45
48
  require 'dapp/dapp/ssh_agent'
49
+ require 'dapp/dapp/sentry'
46
50
  require 'dapp/dapp/git_artifact'
47
51
  require 'dapp/dapp/dappfile'
48
52
  require 'dapp/dapp/chef'
data/lib/dapp/cli.rb CHANGED
@@ -35,6 +35,10 @@ BANNER
35
35
  show_options: true,
36
36
  exit: 0
37
37
 
38
+ class << self
39
+ attr_accessor :dapp_object
40
+ end
41
+
38
42
  def initialize(*args)
39
43
  super(*args)
40
44
 
@@ -56,12 +56,16 @@ module Dapp
56
56
  super()
57
57
  end
58
58
 
59
+ def run_method
60
+ class_to_lowercase
61
+ end
62
+
59
63
  def run(_argv = ARGV)
60
64
  raise
61
65
  end
62
66
 
63
67
  def cli_options(**kvargs)
64
- config.merge(**kvargs)
68
+ config.merge(dapp_command: run_method, **kvargs)
65
69
  end
66
70
  end
67
71
  end
data/lib/dapp/dapp.rb CHANGED
@@ -11,8 +11,12 @@ module Dapp
11
11
  include Logging::Paint
12
12
 
13
13
  include SshAgent
14
+ include Sentry
15
+
14
16
  include Helper::Sha256
17
+ extend Helper::Trivia
15
18
  include Helper::Trivia
19
+ include Helper::Url
16
20
 
17
21
  include Deps::Gitartifact
18
22
  include Deps::Base
@@ -25,6 +29,20 @@ module Dapp
25
29
  @options = options
26
30
  Logging::Paint.initialize(options[:log_color])
27
31
  Logging::I18n.initialize
32
+ ::Dapp::CLI.dapp_object = self
33
+ sentry_message("Manual usage: `#{options[:dapp_command]}` command") unless ENV['CI']
34
+ end
35
+
36
+ def settings
37
+ @settings ||= begin
38
+ settings_path = File.join(self.class.home_dir, "settings.toml")
39
+
40
+ if File.exists? settings_path
41
+ TomlRB.load_file(settings_path)
42
+ else
43
+ {}
44
+ end
45
+ end
28
46
  end
29
47
 
30
48
  def name
@@ -88,5 +106,9 @@ module Dapp
88
106
  def stage_dapp_label
89
107
  name
90
108
  end
109
+
110
+ def self.home_dir
111
+ File.join(Dir.home, ".dapp")
112
+ end
91
113
  end # Dapp
92
114
  end # Dapp
@@ -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
@@ -5,10 +5,6 @@ module Dapp::Dimg::CLI
5
5
  self.class.parse_options(self, argv)
6
6
  ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments)).public_send(run_method)
7
7
  end
8
-
9
- def run_method
10
- class_to_lowercase
11
- end
12
8
  end
13
9
  end
14
10
  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
data/lib/dapp/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = '0.12.7'.freeze
2
+ VERSION = '0.12.8'.freeze
3
3
  BUILD_CACHE_VERSION = 13
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.12.7
4
+ version: 0.12.8
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-05-30 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
@@ -166,6 +166,34 @@ dependencies:
166
166
  - - "~>"
167
167
  - !ruby/object:Gem::Version
168
168
  version: 0.1.6
169
+ - !ruby/object:Gem::Dependency
170
+ name: sentry-raven
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: 2.7.2
176
+ type: :runtime
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: 2.7.2
183
+ - !ruby/object:Gem::Dependency
184
+ name: toml-rb
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: 1.1.1
190
+ type: :runtime
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: 1.1.1
169
197
  - !ruby/object:Gem::Dependency
170
198
  name: bundler
171
199
  requirement: !ruby/object:Gem::Requirement
@@ -420,6 +448,7 @@ files:
420
448
  - lib/dapp/dapp/logging/i18n.rb
421
449
  - lib/dapp/dapp/logging/paint.rb
422
450
  - lib/dapp/dapp/logging/process.rb
451
+ - lib/dapp/dapp/sentry.rb
423
452
  - lib/dapp/dapp/shellout/base.rb
424
453
  - lib/dapp/dapp/shellout/streaming.rb
425
454
  - lib/dapp/dapp/ssh_agent.rb
@@ -620,6 +649,7 @@ files:
620
649
  - lib/dapp/helper/net_status.rb
621
650
  - lib/dapp/helper/sha256.rb
622
651
  - lib/dapp/helper/trivia.rb
652
+ - lib/dapp/helper/url.rb
623
653
  - lib/dapp/prctl.rb
624
654
  - lib/dapp/version.rb
625
655
  homepage: https://github.com/flant/dapp
@@ -642,7 +672,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
642
672
  version: 2.5.0
643
673
  requirements: []
644
674
  rubyforge_project:
645
- rubygems_version: 2.4.8
675
+ rubygems_version: 2.5.1
646
676
  signing_key:
647
677
  specification_version: 4
648
678
  summary: Build docker packaged apps using chef or shell