use_packwerk 0.58.0 → 0.59.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|