dapp 0.22.17 → 0.23.0

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: 125ccf57682d13035150191173dd8b2f0ad8af3b
4
- data.tar.gz: a1c74f6511df262e5a3423549c0909ff21110f23
3
+ metadata.gz: 501a8c18b049fad1debe8448c6e595e6b6ece898
4
+ data.tar.gz: c2a3cd337e13baa495acb67d76295608ff7828ab
5
5
  SHA512:
6
- metadata.gz: 60cb923e5e5cf44001c0dabdc04d56a903f7680219492f336900a2e36622da578c77836f77d3fc3c3a0855f5740a8ba82747d46d2c09296373c529118844a730
7
- data.tar.gz: 47a57d0155fd13388240fdae1b42dc475d8f5ce3b30c051f118afb783b1ef805ad7aeb00a25a38848967c4a60b508ad87d6d508ab724503c52a9ba6b4dd2e2ef
6
+ metadata.gz: d786163dbf0bc002be691579dd0c6b7835e88201ff37bc77bbc323dcf4bd411e1993677d5603546f094ee932f6799ea4204a7af2da0c166b4dae25c620f35c26
7
+ data.tar.gz: 2c77b2d54789be940ef323cb6529b1143b12fb2bd82ea915936e0343158e4113c619bc4d710ed73264164c2ef9fcad0941e3638c2e8aee5f6c5fd030a98dab1c
data/bin/dapp CHANGED
@@ -26,10 +26,6 @@ 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
-
33
29
  raise
34
30
  end
35
31
  rescue Dapp::Error::Shellout => e
@@ -81,7 +81,7 @@ en:
81
81
  stage_artifact_double_associate: "Can't use `%{stage}` stage for artifact; already used in `%{conflict_stage}` stage!"
82
82
  stage_artifact_not_supported_associated_stage: "Bad artifact stage `%{stage}`!"
83
83
  git_artifact_remote_branch_with_commit: "Remote git repo: use `commit` or `branch` directive!"
84
- artifact_conflict: "Conflict between artifacts!\n\n%{dappfile_context}"
84
+ artifact_conflict: "Conflict between artifacts paths!"
85
85
  scratch_unsupported_directive: "Scratch dimg has unsupported directive `%{directive}`!"
86
86
  scratch_artifact_required: "Scratch dimg without artifacts!"
87
87
  scratch_artifact_associated: "Scratch artifact can't be associated: not expected `before`/`after` attribute!"
data/lib/dapp.rb CHANGED
@@ -25,8 +25,6 @@ require 'etc'
25
25
  require 'zlib'
26
26
  require 'slugify'
27
27
  require 'base64'
28
- require 'sentry-raven'
29
- require 'toml-rb'
30
28
 
31
29
  require 'dapp/version'
32
30
  require 'dapp/core_ext/hash'
@@ -37,7 +35,6 @@ require 'dapp/helper/sha256'
37
35
  require 'dapp/helper/net_status'
38
36
  require 'dapp/helper/tar'
39
37
  require 'dapp/helper/yaml'
40
- require 'dapp/helper/url'
41
38
  require 'dapp/prctl'
42
39
  require 'dapp/error/mod/user'
43
40
  require 'dapp/error/base'
@@ -58,7 +55,6 @@ require 'dapp/config/directive/base'
58
55
  require 'dapp/config/config'
59
56
  require 'dapp/dapp/lock'
60
57
  require 'dapp/dapp/ssh_agent'
61
- require 'dapp/dapp/sentry'
62
58
  require 'dapp/dapp/git_artifact'
63
59
  require 'dapp/dapp/dappfile'
64
60
  require 'dapp/dapp/chef'
data/lib/dapp/cli.rb CHANGED
@@ -38,10 +38,6 @@ BANNER
38
38
  show_options: true,
39
39
  exit: 0
40
40
 
41
- class << self
42
- attr_accessor :dapp_object
43
- end
44
-
45
41
  def initialize(*args)
46
42
  super(*args)
47
43
 
@@ -58,8 +58,6 @@ 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']
63
61
 
64
62
  log_dapp_running_time(dapp, ignore: !log_running_time) do
65
63
  begin
@@ -76,10 +74,6 @@ module Dapp
76
74
  end
77
75
  end
78
76
 
79
- def run_method
80
- class_to_lowercase
81
- end
82
-
83
77
  def log_dapp_running_time(dapp, ignore: false)
84
78
  return yield if ignore
85
79
 
@@ -101,7 +95,7 @@ module Dapp
101
95
  self.class.print_error_with_help_and_die! self, "cannot use alias options --run-dir, --build-dir, --deploy-dir at the same time"
102
96
  end
103
97
 
104
- config.merge(build_dir: dirs.compact.first, dapp_command: run_method, **kwargs)
98
+ config.merge(build_dir: dirs.compact.first, **kwargs)
105
99
  end
106
100
  end
107
101
  end
data/lib/dapp/dapp.rb CHANGED
@@ -17,13 +17,10 @@ module Dapp
17
17
  include Logging::Paint
18
18
 
19
19
  include SshAgent
20
- include Sentry
21
-
22
20
  include Helper::Sha256
23
- extend Helper::Trivia
21
+ extend Helper::Trivia
24
22
  include Helper::Trivia
25
23
  include Helper::Tar
26
- include Helper::Url
27
24
 
28
25
  include Deps::Toolchain
29
26
  include Deps::Gitartifact
@@ -44,18 +41,6 @@ module Dapp
44
41
  self.class.options
45
42
  end
46
43
 
47
- def settings
48
- @settings ||= begin
49
- settings_path = File.join(self.class.home_dir, "settings.toml")
50
-
51
- if File.exists? settings_path
52
- TomlRB.load_file(settings_path)
53
- else
54
- {}
55
- end
56
- end
57
- end
58
-
59
44
  def name
60
45
  @name ||= begin
61
46
  n = begin
@@ -101,8 +86,8 @@ module Dapp
101
86
  self.class.tmp_base_dir
102
87
  end
103
88
 
104
- def build_dir
105
- @build_dir ||= begin
89
+ def build_path(*path)
90
+ @build_path ||= begin
106
91
  if option_build_dir
107
92
  Pathname.new(option_build_dir)
108
93
  else
@@ -110,10 +95,7 @@ module Dapp
110
95
  Pathname.new(dir)
111
96
  end.expand_path.tap(&:mkpath)
112
97
  end
113
- end
114
-
115
- def build_path(*path)
116
- make_path(build_dir, *path)
98
+ make_path(@build_path, *path)
117
99
  end
118
100
 
119
101
  def local_git_artifact_exclude_paths(&blk)
@@ -2,18 +2,6 @@ module Dapp
2
2
  class Dapp
3
3
  module Logging
4
4
  module Base
5
- class << self
6
- def included(base)
7
- base.send(:extend, ClassMethods)
8
- end
9
- end
10
-
11
- module ClassMethods
12
- def log_time
13
- "#{DateTime.now.strftime('%Y-%m-%dT%T%z')} "
14
- end
15
- end
16
-
17
5
  def log_quiet?
18
6
  option_quiet
19
7
  end
@@ -99,6 +87,10 @@ module Dapp
99
87
  self.class.log_time
100
88
  end
101
89
 
90
+ def self.log_time
91
+ "#{DateTime.now.strftime('%Y-%m-%dT%T%z')} "
92
+ end
93
+
102
94
  def log_format_string(str, time: true, indent: true, style: nil)
103
95
  str.to_s.lines.map do |line|
104
96
  line = paint_string(line, style) if style
@@ -11,12 +11,6 @@ module Dapp
11
11
 
12
12
  def tags_by_scheme
13
13
  @tags_by_scheme_name ||= begin
14
- if simple_tags[:custom].any?
15
- if settings.fetch("sentry", {}).fetch("detect-push-tag-usage", false)
16
- sentry_message("--tag or --tag-slug usage detected", extra: {"slug_tags" => simple_tags})
17
- end
18
- end
19
-
20
14
  [simple_tags, branch_tags, commit_tags, build_tags, ci_tags].reduce({}) do |some_tags_by_scheme, tags_by_scheme|
21
15
  tags_by_scheme.in_depth_merge(some_tags_by_scheme)
22
16
  end.tap do |tags_by_scheme|
@@ -32,7 +32,7 @@ module Dapp
32
32
  def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
33
33
  ''.tap do |cmd|
34
34
  cmd << dimg.dapp.rsync_bin
35
- cmd << ' --archive --links --inplace'
35
+ cmd << ' --archive --links'
36
36
  cmd << " --chown=#{owner}:#{group}" if owner or group
37
37
 
38
38
  if include_paths.any?
@@ -32,7 +32,7 @@ module Dapp
32
32
  end
33
33
 
34
34
  def git_artifacts_dev_patch_hashes
35
- dimg.git_artifacts.map {|ga| ga.dev_patch_hash(self)}
35
+ dimg.git_artifacts.map(&:dev_patch_hash)
36
36
  end
37
37
  end # GALatestPatch
38
38
  end # Stage
@@ -27,7 +27,7 @@ module Dapp
27
27
  def changes_size_since_g_a_pre_setup_patch
28
28
  dimg.git_artifacts.map do |git_artifact|
29
29
  if git_artifact.repo.commit_exists? prev_stage.layer_commit(git_artifact)
30
- git_artifact.patch_size(prev_stage.layer_commit(git_artifact), git_artifact.latest_commit)
30
+ git_artifact.patch_size(prev_stage.layer_commit(git_artifact))
31
31
  else
32
32
  0
33
33
  end
@@ -87,7 +87,7 @@ module Dapp
87
87
  "#{builder.dimg.dapp.mkdir_bin} -p ~/.ssh",
88
88
  'echo "Host *" >> ~/.ssh/config',
89
89
  'echo " StrictHostKeyChecking no" >> ~/.ssh/config',
90
- *local_paths.map {|path| "#{builder.dimg.dapp.rsync_bin} --inplace --archive --relative #{path} /tmp/local_cookbooks"},
90
+ *local_paths.map {|path| "#{builder.dimg.dapp.rsync_bin} --archive --relative #{path} /tmp/local_cookbooks"},
91
91
  "cd /tmp/local_cookbooks/#{path}",
92
92
  "cp #{tmp_berksfile_path} Berksfile",
93
93
  "cp #{tmp_metadata_path} metadata.rb",
@@ -9,6 +9,10 @@ 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
12
16
  end
13
17
  end
14
18
  end
@@ -5,6 +5,13 @@ module Dapp
5
5
  class ArtifactDimg < Dimg
6
6
  def validate_scratch!
7
7
  end
8
+
9
+ def validate_artifacts_artifacts!
10
+ end
11
+
12
+ def validated_artifacts
13
+ _git_artifact._local + _git_artifact._remote
14
+ end
8
15
  end
9
16
  end
10
17
  end
@@ -136,7 +136,6 @@ module Dapp
136
136
 
137
137
  def artifacts_after_parsing!
138
138
  _artifacts_auto_excluding!
139
- _artifact.map(&:_config).each(&:artifacts_after_parsing!)
140
139
  end
141
140
 
142
141
  protected
@@ -4,8 +4,6 @@ module Dapp
4
4
  module Directive
5
5
  class Dimg < Base
6
6
  module Validation
7
- include Helper::Trivia
8
-
9
7
  def validate!
10
8
  directives_validate!
11
9
  validate_scratch!
@@ -73,39 +71,12 @@ module Dapp
73
71
  verifiable_artifact = artifacts.shift
74
72
  artifacts.select { |a| a[:to] == verifiable_artifact[:to] }.each do |artifact|
75
73
  next if verifiable_artifact[:index] == artifact[:index]
76
- begin
77
- validate_artifact!(verifiable_artifact, artifact)
78
- validate_artifact!(artifact, verifiable_artifact)
79
- rescue ::Dapp::Error::Config => e
80
- conflict_between_artifacts!(artifact, verifiable_artifact) if e.net_status[:code] == :artifact_conflict
81
- raise
82
- end
74
+ validate_artifact!(verifiable_artifact, artifact)
75
+ validate_artifact!(artifact, verifiable_artifact)
83
76
  end
84
77
  end
85
78
  end
86
79
 
87
- def conflict_between_artifacts!(*formatted_artifacts)
88
- artifacts = formatted_artifacts.flatten.map { |formatted_artifact| formatted_artifact[:related_artifact] }
89
- dappfile_context = artifacts.map do |artifact|
90
- artifact_directive = []
91
- artifact_directive << begin
92
- if artifact.is_a? Artifact::Export
93
- "artifact.export('#{artifact._cwd}') do"
94
- else
95
- "git#{"('#{artifact._url}')" if artifact.respond_to?(:_url)}.add('#{artifact._cwd}') do"
96
- end
97
- end
98
- [:include_paths, :exclude_paths].each do |directive|
99
- next if (paths = artifact.send("_#{directive}")).empty?
100
- artifact_directive << " #{directive} '#{paths.join("', '")}'"
101
- end
102
- artifact_directive << " to '#{artifact._to}'"
103
- artifact_directive << 'end'
104
- artifact_directive.join("\n")
105
- end.join("\n\n")
106
- raise ::Dapp::Error::Config, code: :artifact_conflict, data: { dappfile_context: dappfile_context }
107
- end
108
-
109
80
  def validate_artifact_format(artifacts)
110
81
  artifacts.map do |a|
111
82
  path_format = proc { |path| File.expand_path(File.join('/', path, '/'))[1..-1] }
@@ -133,20 +104,26 @@ module Dapp
133
104
  index: artifacts.index(a),
134
105
  to: to,
135
106
  include_paths: include_paths,
136
- exclude_paths: exclude_paths,
137
- related_artifact: a
107
+ exclude_paths: exclude_paths
138
108
  }
139
109
  end
140
110
  end
141
111
 
142
112
  def validate_artifact!(verifiable_artifact, artifact)
143
- cases = []
144
- cases << verifiable_artifact[:include_paths].any? do |verifiable_path|
145
- !ignore_path?(verifiable_path, paths: artifact[:include_paths], exclude_paths: artifact[:exclude_paths])
146
- end
147
- cases << (verifiable_artifact[:include_paths].empty? && artifact[:include_paths].empty?)
113
+ verifiable_artifact[:include_paths].each do |verifiable_path|
114
+ potential_conflicts = artifact[:include_paths].select { |path| path.start_with?(verifiable_path) }
115
+ validate_artifact_path!(verifiable_artifact, potential_conflicts)
116
+ end.empty? && verifiable_artifact[:exclude_paths].empty? && raise(::Dapp::Error::Config, code: :artifact_conflict)
117
+ validate_artifact_path!(verifiable_artifact, artifact[:include_paths]) if verifiable_artifact[:include_paths].empty?
118
+ end
148
119
 
149
- raise ::Dapp::Error::Config, code: :artifact_conflict if cases.any?
120
+ def validate_artifact_path!(verifiable_artifact, potential_conflicts)
121
+ potential_conflicts.all? do |path|
122
+ loop do
123
+ break if verifiable_artifact[:exclude_paths].include?(path) || ((path = File.dirname(path)) == '.')
124
+ end
125
+ verifiable_artifact[:exclude_paths].include?(path)
126
+ end.tap { |res| res || raise(::Dapp::Error::Config, code: :artifact_conflict) }
150
127
  end
151
128
 
152
129
  def _associated_artifacts
@@ -3,13 +3,14 @@ module Dapp
3
3
  module Config
4
4
  module Directive
5
5
  class GitArtifactRemote < GitArtifactLocal
6
- include ::Dapp::Helper::Url
7
-
8
6
  attr_reader :_url, :_name, :_branch, :_commit
9
7
 
10
8
  def initialize(url, **kwargs, &blk)
11
9
  @_url = url
12
- @_name = git_url_to_name(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')
13
14
 
14
15
  super(**kwargs, &blk)
15
16
  end
@@ -19,7 +20,7 @@ module Dapp
19
20
  end
20
21
 
21
22
  def commit(value)
22
- sub_directive_eval { @_commit = value.to_s }
23
+ sub_directive_eval { @_commit = value }
23
24
  end
24
25
 
25
26
  def _export
@@ -41,11 +42,11 @@ module Dapp
41
42
  end
42
43
 
43
44
  def branch(value)
44
- sub_directive_eval { @_branch = value.to_s }
45
+ sub_directive_eval { @_branch = value }
45
46
  end
46
47
 
47
48
  def commit(value)
48
- sub_directive_eval { @_commit = value.to_s }
49
+ sub_directive_eval { @_commit = value }
49
50
  end
50
51
 
51
52
  def validate!
@@ -70,12 +70,12 @@ module Dapp
70
70
  stage.image.add_service_change_label(repo.dapp.dimgstage_g_a_type_label(paramshash).to_sym => 'directory')
71
71
 
72
72
  commands << "#{repo.dapp.install_bin} #{credentials.join(' ')} -d \"#{to}\""
73
- commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage, *archive_stage_commit(stage))} -C \"#{to}\""
73
+ commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage)} -C \"#{to}\""
74
74
  when :file
75
75
  stage.image.add_service_change_label(repo.dapp.dimgstage_g_a_type_label(paramshash).to_sym => 'file')
76
76
 
77
77
  commands << "#{repo.dapp.install_bin} #{credentials.join(' ')} -d \"#{File.dirname(to)}\""
78
- commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage, *archive_stage_commit(stage))} -C \"#{File.dirname(to)}\""
78
+ commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage)} -C \"#{File.dirname(to)}\""
79
79
  end
80
80
  end
81
81
  end
@@ -94,11 +94,11 @@ module Dapp
94
94
  changed_files = diff_patches(*dev_patch_stage_commits(stage)).map {|p| "\"#{File.join(to, cwd, p.delta.new_file[:path])}\""}
95
95
  commands << "#{repo.dapp.rm_bin} -rf #{changed_files.join(' ')}"
96
96
  commands << "#{repo.dapp.install_bin} #{credentials.join(' ')} -d \"#{to}\""
97
- commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage, *dev_patch_stage_commits(stage))} -C \"#{to}\""
97
+ commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage)} -C \"#{to}\""
98
98
  when :file
99
99
  commands << "#{repo.dapp.rm_bin} -rf \"#{to}\""
100
100
  commands << "#{repo.dapp.install_bin} #{credentials.join(' ')} -d \"#{File.dirname(to)}\""
101
- commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage, *dev_patch_stage_commits(stage))} -C \"#{File.dirname(to)}\""
101
+ commands << "#{sudo}#{repo.dapp.tar_bin} -xf #{archive_file(stage)} -C \"#{File.dirname(to)}\""
102
102
  else
103
103
  raise
104
104
  end
@@ -130,44 +130,44 @@ module Dapp
130
130
 
131
131
  @stage_dependencies_checksums ||= {}
132
132
  @stage_dependencies_checksums[stage_dependencies_key] ||= begin
133
- if (entries = repo_entries(commit, paths: paths)).empty?
134
- repo.dapp.log_warning(desc: { code: :stage_dependencies_not_found,
135
- data: { repo: repo.respond_to?(:url) ? repo.url : 'local',
136
- dependencies: stage_dependencies.join(', ') } })
137
- end
133
+ if dev_mode?
134
+ dev_patch_hash(paths: paths)
135
+ else
136
+ if (entries = repo_entries(commit, paths: paths)).empty?
137
+ repo.dapp.log_warning(desc: { code: :stage_dependencies_not_found,
138
+ data: { repo: repo.respond_to?(:url) ? repo.url : 'local',
139
+ dependencies: stage_dependencies.join(', ') } })
140
+ end
138
141
 
139
- entries
140
- .sort_by {|root, entry| File.join(root, entry[:name])}
141
- .reduce(nil) {|prev_hash, (root, entry)|
142
- content = nil
143
- content = repo.lookup_object(entry[:oid]).content if entry[:type] == :blob
142
+ entries
143
+ .sort_by {|root, entry| File.join(root, entry[:name])}
144
+ .reduce(nil) {|prev_hash, (root, entry)|
145
+ content = nil
146
+ content = repo.lookup_object(entry[:oid]).content if entry[:type] == :blob
144
147
 
145
- hexdigest prev_hash, File.join(root, entry[:name]), entry[:filemode].to_s, content
146
- }
148
+ hexdigest prev_hash, File.join(root, entry[:name]), entry[:filemode].to_s, content
149
+ }
150
+ end
147
151
  end
148
152
  end
149
153
 
150
- def patch_size(from_commit, to_commit)
154
+ def patch_size(from_commit)
155
+ to_commit = dev_mode? ? nil : latest_commit
151
156
  diff_patches(from_commit, to_commit).reduce(0) do |bytes, patch|
152
- patch.hunks.each do |hunk|
153
- hunk.lines.each do |l|
154
- bytes +=
155
- case l.line_origin
156
- when :eof_newline_added, :eof_newline_removed then 1
157
- when :addition, :deletion, :binary then l.content.size
158
- else # :context, :file_header, :hunk_header, :eof_no_newline
159
- 0
160
- end
161
- end
162
- end
157
+ bytes += patch.delta.deleted? ? patch.delta.old_file[:size] : patch.delta.new_file[:size]
163
158
  bytes
164
159
  end
165
160
  end
166
161
 
167
- def dev_patch_hash(stage)
162
+ def dev_patch_hash(**options)
168
163
  return unless dev_mode?
169
-
170
- hexdigest *diff_patches(latest_commit, nil).map {|patch| change_patch_new_file_path(stage, patch)}
164
+ hexdigest begin
165
+ diff_patches(nil, nil, **options).map do |patch|
166
+ file = patch.delta.new_file
167
+ raise_if_submodule!(file[:path], file[:mode])
168
+ [file[:path], File.read(File.join(repo.workdir_path, file[:path])), file[:mode]]
169
+ end
170
+ end
171
171
  end
172
172
 
173
173
  def latest_commit
@@ -183,7 +183,7 @@ module Dapp
183
183
  end
184
184
 
185
185
  def archive_any_changes?(stage)
186
- repo_entries(archive_stage_commit(stage)).any?
186
+ repo_entries(stage_commit(stage)).any?
187
187
  end
188
188
 
189
189
  def patch_any_changes?(stage)
@@ -212,7 +212,8 @@ module Dapp
212
212
  [:owner, :group].map { |attr| "--#{attr}=#{send(attr)}" unless send(attr).nil? }.compact
213
213
  end
214
214
 
215
- def archive_file(stage, commit)
215
+ def archive_file(stage)
216
+ commit = stage_commit(stage)
216
217
  if repo.dapp.options[:use_system_tar]
217
218
  archive_file_with_system_tar(stage, commit)
218
219
  else
@@ -279,17 +280,17 @@ module Dapp
279
280
  def patch_file(stage, from_commit, to_commit)
280
281
  File.open(repo.dimg.tmp_path('patches', patch_file_name(from_commit, to_commit)), File::RDWR | File::CREAT) do |f|
281
282
  diff_patches(from_commit, to_commit).each do |patch|
282
- raise_if_submodule_entry!(patch.delta.new_file)
283
+ file = patch.delta.new_file
284
+ raise_if_submodule!(file[:path], file[:mode])
283
285
  f.write change_patch_new_file_path(stage, patch)
284
286
  end
285
287
  end
286
288
  repo.dimg.container_tmp_path('patches', patch_file_name(from_commit, to_commit))
287
289
  end
288
290
 
289
- def raise_if_submodule_entry!(entry) # FIXME
290
- if entry[:mode] == 57344 # submodule
291
- raise Error::Rugged, code: :submodule_not_supported, data: { path: repo.path.dirname.join(entry[:path]) }
292
- end
291
+ def raise_if_submodule!(relative_file_path, mode) # FIXME
292
+ return unless mode == 57344
293
+ raise Error::Rugged, code: :submodule_not_supported, data: { path: repo.path.dirname.join(relative_file_path) }
293
294
  end
294
295
 
295
296
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
@@ -359,14 +360,28 @@ module Dapp
359
360
  end
360
361
  end
361
362
 
362
- def each_archive_entry(stage, commit, &blk)
363
- repo_entries(commit).each do |root, entry|
364
- raise_if_submodule_entry!(entry)
363
+ def each_archive_entry(stage, commit)
364
+ if dev_mode? && stage.name != :g_a_archive
365
+ diff_patches(commit, nil).each do |patch|
366
+ file = patch.delta.new_file
367
+ host_file_path = File.join(repo.workdir_path, file[:path])
365
368
 
366
- if entry[:type] == :blob
367
- content = repo.lookup_object(entry[:oid]).content
369
+ next unless File.exist?(host_file_path)
370
+ raise_if_submodule!(file[:path], file[:mode])
368
371
 
369
- yield slice_cwd(stage, File.join(root, entry[:name])), content, entry[:filemode]
372
+ content = File.read(host_file_path)
373
+ yield slice_cwd(stage, file[:path]), content, file[:mode]
374
+ end
375
+ else
376
+ repo_entries(commit).each do |root, entry|
377
+ next unless entry[:type] == :blob
378
+
379
+ entry_file_path = File.join(root, entry[:name])
380
+
381
+ raise_if_submodule!(entry_file_path, entry[:filemode])
382
+
383
+ content = repo.lookup_object(entry[:oid]).content
384
+ yield slice_cwd(stage, entry_file_path), content, entry[:filemode]
370
385
  end
371
386
  end
372
387
  end
@@ -414,7 +429,7 @@ module Dapp
414
429
  end
415
430
  end
416
431
 
417
- def archive_stage_commit(stage)
432
+ def stage_commit(stage)
418
433
  stage.layer_commit(self)
419
434
  end
420
435
 
@@ -3,8 +3,6 @@ module Dapp
3
3
  module GitRepo
4
4
  # Base class for any Git repo (remote, gitkeeper, etc)
5
5
  class Base
6
- include Helper::Trivia
7
-
8
6
  attr_reader :name
9
7
 
10
8
  def initialize(manager, name)
@@ -134,6 +132,32 @@ module Dapp
134
132
  def git(**kwargs)
135
133
  @git ||= Rugged::Repository.new(path.to_s, **kwargs)
136
134
  end
135
+
136
+ private
137
+
138
+ def ignore_path?(path, paths: [], exclude_paths: [])
139
+ is_exclude_path = exclude_paths.any? { |p| check_path?(path, p) }
140
+ is_include_path = begin
141
+ paths.empty? ||
142
+ paths.any? do |p|
143
+ File.fnmatch?(p, path, File::FNM_PATHNAME) ||
144
+ File.fnmatch?(File.join(p, '**', '*'), path, File::FNM_PATHNAME)
145
+ end
146
+ end
147
+
148
+ is_exclude_path || !is_include_path
149
+ end
150
+
151
+ def check_path?(path, format)
152
+ path_parts = path.split('/')
153
+ checking_path = nil
154
+
155
+ until path_parts.empty?
156
+ checking_path = [checking_path, path_parts.shift].compact.join('/')
157
+ return true if File.fnmatch?(format, checking_path, File::FNM_PATHNAME)
158
+ end
159
+ false
160
+ end
137
161
  end
138
162
  end
139
163
  end
@@ -28,41 +28,6 @@ module Dapp
28
28
  Pathname.new(File.join(base.to_s, *path.compact.map(&:to_s)))
29
29
  end
30
30
 
31
- def ignore_path?(path, paths: [], exclude_paths: [])
32
- ignore_path_base(path, exclude_paths: exclude_paths) do
33
- paths.empty? ||
34
- paths.any? do |p|
35
- File.fnmatch?(p, path, File::FNM_PATHNAME|File::FNM_DOTMATCH) ||
36
- File.fnmatch?(File.join(p, '**', '*'), path, File::FNM_PATHNAME|File::FNM_DOTMATCH)
37
- end
38
- end
39
- end
40
-
41
- def ignore_path_base(path, exclude_paths: [])
42
- is_exclude_path = exclude_paths.any? { |p| check_path?(path, p) }
43
- is_include_path = yield
44
- is_exclude_path || !is_include_path
45
- end
46
-
47
- def check_path?(path, format)
48
- path_checker(path) { |checking_path| File.fnmatch(format, checking_path, File::FNM_PATHNAME|File::FNM_DOTMATCH) }
49
- end
50
-
51
- def check_subpath?(path, format)
52
- path_checker(format) { |checking_path| File.fnmatch(checking_path, path, File::FNM_PATHNAME|File::FNM_DOTMATCH) }
53
- end
54
-
55
- def path_checker(path)
56
- path_parts = path.split('/')
57
- checking_path = nil
58
-
59
- until path_parts.empty?
60
- checking_path = [checking_path, path_parts.shift].compact.join('/')
61
- return true if yield checking_path
62
- end
63
- false
64
- end
65
-
66
31
  def self.class_to_lowercase(class_name = self)
67
32
  class_name.to_s.split('::').last.split(/(?=[[:upper:]]|[0-9])/).join('_').downcase.to_s
68
33
  end
@@ -71,14 +71,7 @@ module Dapp
71
71
  watch_hooks_thr = nil
72
72
  unless dry_run?
73
73
  watch_hooks_thr = Thread.new do
74
- watch_hooks.each {|job|
75
- begin
76
- Kubernetes::Manager::Job.new(self, job.name).watch_till_done!
77
- rescue ::Exception => e
78
- sentry_exception(e, extra: {"job-spec" => job.spec})
79
- raise
80
- end
81
- }
74
+ watch_hooks.each {|job| Kubernetes::Manager::Job.new(self, job.name).watch_till_done!}
82
75
  end
83
76
  end
84
77
 
@@ -13,8 +13,8 @@ module Dapp
13
13
  template_relative_path_pattern = Pathname(File.expand_path(template_path_pattern)).subpath_of(path('.helm'))
14
14
  template_relative_path_pattern ||= template_path_pattern
15
15
 
16
- File.fnmatch?(template_relative_path_pattern, template_path_without_chart_name, File::FNM_PATHNAME|File::FNM_DOTMATCH) ||
17
- File.fnmatch?(template_relative_path_pattern, template_path, File::FNM_PATHNAME|File::FNM_DOTMATCH)
16
+ File.fnmatch?(template_relative_path_pattern, template_path_without_chart_name, File::FNM_PATHNAME) ||
17
+ File.fnmatch?(template_relative_path_pattern, template_path, File::FNM_PATHNAME)
18
18
  end
19
19
  end
20
20
  else
data/lib/dapp/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = '0.22.17'.freeze
3
- BUILD_CACHE_VERSION = 26.1
2
+ VERSION = '0.23.0'.freeze
3
+ BUILD_CACHE_VERSION = 26
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.22.17
4
+ version: 0.23.0
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-16 00:00:00.000000000 Z
11
+ date: 2017-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -186,34 +186,6 @@ 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
217
189
  - !ruby/object:Gem::Dependency
218
190
  name: bundler
219
191
  requirement: !ruby/object:Gem::Requirement
@@ -476,7 +448,6 @@ files:
476
448
  - lib/dapp/dapp/logging/paint.rb
477
449
  - lib/dapp/dapp/logging/process.rb
478
450
  - lib/dapp/dapp/option_tags.rb
479
- - lib/dapp/dapp/sentry.rb
480
451
  - lib/dapp/dapp/shellout/base.rb
481
452
  - lib/dapp/dapp/shellout/streaming.rb
482
453
  - lib/dapp/dapp/slug.rb
@@ -676,7 +647,6 @@ files:
676
647
  - lib/dapp/helper/sha256.rb
677
648
  - lib/dapp/helper/tar.rb
678
649
  - lib/dapp/helper/trivia.rb
679
- - lib/dapp/helper/url.rb
680
650
  - lib/dapp/helper/yaml.rb
681
651
  - lib/dapp/kube.rb
682
652
  - lib/dapp/kube/cli/cli.rb
@@ -1,112 +0,0 @@
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
@@ -1,23 +0,0 @@
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