use_packwerk 0.58.0 → 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 +4 -4
- data/README.md +6 -0
- data/lib/use_packwerk/private/packwerk_wrapper/offenses_aggregator_formatter.rb +34 -0
- data/lib/use_packwerk/private/packwerk_wrapper.rb +71 -0
- data/lib/use_packwerk/private.rb +1 -0
- data/lib/use_packwerk/spring_command.rb +28 -0
- data/lib/use_packwerk.rb +26 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5668eac8a84c8916b9e0febeccfce83f995738cd1189244a02b8228a3f79a90e
|
4
|
+
data.tar.gz: 4efad32163af39f18136b78d91aaa49973308ad72c1174fa3484aa0771afb625
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f17271b52acaf492b3bd602e586f83d376500da576ecf3ab9ab0cf65c42e3bb392427ffde85a83009fbdaca8fccb2ea7f30d2e636c9d90ca7ee2b4dce2e882a
|
7
|
+
data.tar.gz: b8e08da292f989b198d3c1ec1e2bd5fb9e0be3fb86bc09fc3a376a390b4cde650ee4b1ec6c628f03e75e76cc1f18d280a7c27b8336bfc24b62403b0d0e184f70
|
data/README.md
CHANGED
@@ -43,6 +43,12 @@ If no pack name is passed in, this will list out violations across all packs.
|
|
43
43
|
|
44
44
|
This can be used to quickly modify a `package.yml` file and add a dependency. It also cleans up the list of dependencies to sort the list and remove redundant entries.
|
45
45
|
|
46
|
+
### Setting up Spring
|
47
|
+
|
48
|
+
[Spring](https://github.com/rails/spring) is a preloader for Rails. Although `use_packwerk` itself does not use `Rails`, this can help speed up running commands like `bin/packs` by caching the bundle.
|
49
|
+
Firstly, spring needs to know about the `bin/packs` command when spring is loading. To do that, add `require 'use_packwerk/spring_command'` to `config/spring.rb` in your application.
|
50
|
+
Secondly, to enable Spring, first run `bin/spring binstub packs` which will "springify" the generated binstub.
|
51
|
+
|
46
52
|
### Releasing
|
47
53
|
Releases happen automatically through github actions once a version update is committed to `main`.
|
48
54
|
|
@@ -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
|
data/lib/use_packwerk/private.rb
CHANGED
@@ -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
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'spring/commands'
|
5
|
+
|
6
|
+
module UsePackwerk
|
7
|
+
class SpringCommand
|
8
|
+
def env(*)
|
9
|
+
# Packwerk needs to run in a test environment, which has a set of autoload paths that are
|
10
|
+
# often a superset of the dev/prod paths (for example, test/support/helpers)
|
11
|
+
'test'
|
12
|
+
end
|
13
|
+
|
14
|
+
def exec_name
|
15
|
+
'packs'
|
16
|
+
end
|
17
|
+
|
18
|
+
def gem_name
|
19
|
+
'use_packwerk'
|
20
|
+
end
|
21
|
+
|
22
|
+
def call
|
23
|
+
load(Gem.bin_path(gem_name, exec_name))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Spring.register_command('packs', SpringCommand.new)
|
28
|
+
end
|
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.
|
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-
|
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,7 +315,10 @@ 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
|
321
|
+
- lib/use_packwerk/spring_command.rb
|
305
322
|
- lib/use_packwerk/user_event_logger.rb
|
306
323
|
homepage: https://github.com/rubyatscale/use_packwerk
|
307
324
|
licenses:
|