use_packwerk 0.58.1 → 0.59.0

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
  SHA256:
3
- metadata.gz: 367547b5bc7ce62cd58c9ae022dd2c2825a211874867ae6e20679c5ef3f80b04
4
- data.tar.gz: 86b4314a72763e927ba55ac7e0a17556a43b6eea907efe14680a2bcd4ceb0118
3
+ metadata.gz: 5668eac8a84c8916b9e0febeccfce83f995738cd1189244a02b8228a3f79a90e
4
+ data.tar.gz: 4efad32163af39f18136b78d91aaa49973308ad72c1174fa3484aa0771afb625
5
5
  SHA512:
6
- metadata.gz: e60f9cac4fa044e7d8636ea6babcf5d88ac5873a2e64dabd4cd0f32ce10928ab84b77ec16d96d4eee04464b7e5b04948ae4bb09630110d4872b2e4e10dce98ee
7
- data.tar.gz: edc4cf6bc0d1eafb6f906941d183ba10746af8694994a4e84d027e0ecf1b2a8bdea505637fa6bec22b5d2223b33b8f12460be7ae26fa114c8ac79ed7c214e595
6
+ metadata.gz: 4f17271b52acaf492b3bd602e586f83d376500da576ecf3ab9ab0cf65c42e3bb392427ffde85a83009fbdaca8fccb2ea7f30d2e636c9d90ca7ee2b4dce2e882a
7
+ data.tar.gz: b8e08da292f989b198d3c1ec1e2bd5fb9e0be3fb86bc09fc3a376a390b4cde650ee4b1ec6c628f03e75e76cc1f18d280a7c27b8336bfc24b62403b0d0e184f70
@@ -0,0 +1,34 @@
1
+ # typed: strict
2
+
3
+ module UsePackwerk
4
+ module Private
5
+ module PackwerkWrapper
6
+ #
7
+ # This formatter simply collects offenses so we can feed them into PackageProtections
8
+ #
9
+ class OffensesAggregatorFormatter
10
+ extend T::Sig
11
+ include Packwerk::OffensesFormatter
12
+
13
+ sig { returns(T::Array[Packwerk::ReferenceOffense]) }
14
+ attr_reader :aggregated_offenses
15
+
16
+ sig { void }
17
+ def initialize
18
+ @aggregated_offenses = T.let([], T::Array[Packwerk::ReferenceOffense])
19
+ end
20
+
21
+ sig { override.params(offenses: T::Array[T.nilable(Packwerk::Offense)]).returns(String) }
22
+ def show_offenses(offenses)
23
+ @aggregated_offenses = T.unsafe(offenses)
24
+ ''
25
+ end
26
+
27
+ sig { override.params(offense_collection: Packwerk::OffenseCollection).returns(String) }
28
+ def show_stale_violations(offense_collection)
29
+ ''
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,71 @@
1
+ # typed: strict
2
+
3
+ require 'packwerk'
4
+ require 'use_packwerk/private/packwerk_wrapper/offenses_aggregator_formatter'
5
+
6
+ module UsePackwerk
7
+ module Private
8
+ module PackwerkWrapper
9
+ extend T::Sig
10
+
11
+ sig { params(argv: T.untyped, formatter: Packwerk::OffensesFormatter).void }
12
+ def self.packwerk_cli_run_safely(argv, formatter)
13
+ with_safe_exit_if_no_files_found do
14
+ packwerk_cli(formatter).run(argv)
15
+ end
16
+ end
17
+
18
+ #
19
+ # execute_command is like `run` except it does not `exit`
20
+ #
21
+ sig { params(argv: T.untyped, formatter: T.nilable(Packwerk::OffensesFormatter)).void }
22
+ def self.packwerk_cli_execute_safely(argv, formatter = nil)
23
+ with_safe_exit_if_no_files_found do
24
+ packwerk_cli(formatter).execute_command(argv)
25
+ end
26
+ end
27
+
28
+ sig { params(block: T.proc.returns(T.untyped)).void }
29
+ def self.with_safe_exit_if_no_files_found(&block)
30
+ block.call
31
+ rescue SystemExit => e
32
+ # Packwerk should probably exit positively here rather than raising an error -- there should be no
33
+ # errors if the user has excluded all files being checked.
34
+ unless e.message == 'No files found or given. Specify files or check the include and exclude glob in the config file.'
35
+ raise
36
+ end
37
+ end
38
+
39
+ sig { params(formatter: T.nilable(Packwerk::OffensesFormatter)).returns(Packwerk::Cli) }
40
+ def self.packwerk_cli(formatter)
41
+ # This is mostly copied from exe/packwerk within the packwerk gem, but we use our own formatters
42
+ # Note that packwerk does not allow you to pass in your own progress formatter currently
43
+ ENV['RAILS_ENV'] = 'test'
44
+
45
+ style = Packwerk::OutputStyles::Coloured.new
46
+ Packwerk::Cli.new(style: style, offenses_formatter: formatter)
47
+ end
48
+
49
+ sig { params(files: T::Array[String]).returns(T::Array[Packwerk::ReferenceOffense]) }
50
+ def self.get_offenses_for_files(files)
51
+ formatter = OffensesAggregatorFormatter.new
52
+ packwerk_cli_execute_safely(['check', *files], formatter)
53
+ formatter.aggregated_offenses.compact
54
+ end
55
+
56
+ sig { params(files: T::Array[String]).returns(T::Array[Packwerk::ReferenceOffense]) }
57
+ def self.get_offenses_for_files_by_package(files)
58
+ packages = package_names_for_files(files)
59
+ argv = ['check', '--packages', packages.join(',')]
60
+ formatter = OffensesAggregatorFormatter.new
61
+ packwerk_cli_execute_safely(argv, formatter)
62
+ formatter.aggregated_offenses.compact
63
+ end
64
+
65
+ sig { params(files: T::Array[String]).returns(T::Array[String]) }
66
+ def self.package_names_for_files(files)
67
+ files.map { |f| ParsePackwerk.package_from_path(f)&.name }.compact.uniq
68
+ end
69
+ end
70
+ end
71
+ end
@@ -8,6 +8,7 @@ require 'sorbet-runtime'
8
8
  require 'use_packwerk/private/file_move_operation'
9
9
  require 'use_packwerk/private/pack_relationship_analyzer'
10
10
  require 'use_packwerk/private/interactive_cli'
11
+ require 'use_packwerk/private/packwerk_wrapper'
11
12
 
12
13
  module UsePackwerk
13
14
  module Private
data/lib/use_packwerk.rb CHANGED
@@ -219,4 +219,30 @@ module UsePackwerk
219
219
  def self.bust_cache!
220
220
  Private.bust_cache!
221
221
  end
222
+
223
+ #
224
+ # execute_command is like `run` except it does not `exit`
225
+ #
226
+ sig { params(argv: T.untyped, formatter: T.nilable(Packwerk::OffensesFormatter)).void }
227
+ def self.execute(argv, formatter = nil)
228
+ Private::PackwerkWrapper.with_safe_exit_if_no_files_found do
229
+ Private::PackwerkWrapper.packwerk_cli(formatter).execute_command(argv)
230
+ end
231
+ end
232
+
233
+ sig { params(files: T::Array[String]).returns(T::Array[Packwerk::ReferenceOffense]) }
234
+ def self.get_offenses_for_files(files)
235
+ formatter = Private::PackwerkWrapper::OffensesAggregatorFormatter.new
236
+ Private::PackwerkWrapper.packwerk_cli_execute_safely(['check', *files], formatter)
237
+ formatter.aggregated_offenses.compact
238
+ end
239
+
240
+ sig { params(files: T::Array[String]).returns(T::Array[Packwerk::ReferenceOffense]) }
241
+ def self.get_offenses_for_files_by_package(files)
242
+ packages = Private::PackwerkWrapper.package_names_for_files(files)
243
+ argv = ['check', '--packages', packages.join(',')]
244
+ formatter = Private::PackwerkWrapper::OffensesAggregatorFormatter.new
245
+ Private::PackwerkWrapper.packwerk_cli_execute_safely(argv, formatter)
246
+ formatter.aggregated_offenses.compact
247
+ end
222
248
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: use_packwerk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.58.1
4
+ version: 0.59.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-19 00:00:00.000000000 Z
11
+ date: 2022-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_ownership
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: packwerk
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: parse_packwerk
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -301,6 +315,8 @@ files:
301
315
  - lib/use_packwerk/private/interactive_cli/use_cases/update_deprecations.rb
302
316
  - lib/use_packwerk/private/interactive_cli/use_cases/validate.rb
303
317
  - lib/use_packwerk/private/pack_relationship_analyzer.rb
318
+ - lib/use_packwerk/private/packwerk_wrapper.rb
319
+ - lib/use_packwerk/private/packwerk_wrapper/offenses_aggregator_formatter.rb
304
320
  - lib/use_packwerk/rubocop_post_processor.rb
305
321
  - lib/use_packwerk/spring_command.rb
306
322
  - lib/use_packwerk/user_event_logger.rb