use_packwerk 0.52.0 → 0.53.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/use_packwerk/cli.rb +10 -0
- data/lib/use_packwerk/logging.rb +10 -5
- data/lib/use_packwerk/private.rb +57 -70
- data/lib/use_packwerk.rb +111 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e5318956ac8b8fef165830d798565e79f0ef230686671fd0f66b81074b3d369
|
4
|
+
data.tar.gz: 8902e5d32f23d10916829928a1eff0c4d6e2b48163bf55a06f52fb32bdcfb544
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 672a7e528294e21fe993ebeb2c9c22c048163374d15483a7cdc203a1c14f336a768538c68ab75febb77ee3eb1da0bd694aec1f32ea80ca621ddcade02798abb4
|
7
|
+
data.tar.gz: bcd5e51dfe5d3060babca2c650534ed1f8c55acb9e61f5e492c2adcd10a70998fbaa3b2cc014f3c5c9732159188b82b2e6bd6115d2b3cd155e15771ab5dee5f4
|
data/lib/use_packwerk/cli.rb
CHANGED
@@ -67,5 +67,15 @@ module UsePackwerk
|
|
67
67
|
per_file_processors: [UsePackwerk::RubocopPostProcessor.new, UsePackwerk::CodeOwnershipPostProcessor.new],
|
68
68
|
)
|
69
69
|
end
|
70
|
+
|
71
|
+
desc "move_to_parent packs/parent_pack packs/child_pack", "Pass in a parent pack and another pack to be made as a child to the parent pack!"
|
72
|
+
sig { params(parent_name: String, pack_name: String).void }
|
73
|
+
def move_to_parent(parent_name, pack_name)
|
74
|
+
UsePackwerk.move_to_parent!(
|
75
|
+
parent_name: parent_name,
|
76
|
+
pack_name: pack_name,
|
77
|
+
per_file_processors: [UsePackwerk::RubocopPostProcessor.new, UsePackwerk::CodeOwnershipPostProcessor.new],
|
78
|
+
)
|
79
|
+
end
|
70
80
|
end
|
71
81
|
end
|
data/lib/use_packwerk/logging.rb
CHANGED
@@ -9,24 +9,29 @@ module UsePackwerk
|
|
9
9
|
sig { params(title: String, block: T.proc.void).void }
|
10
10
|
def self.section(title, &block)
|
11
11
|
print_divider
|
12
|
-
|
13
|
-
|
12
|
+
out ColorizedString.new("#{title}").green.bold
|
13
|
+
out "\n"
|
14
14
|
yield
|
15
15
|
end
|
16
16
|
|
17
17
|
sig { params(text: String).void }
|
18
18
|
def self.print_bold_green(text)
|
19
|
-
|
19
|
+
out ColorizedString.new(text).green.bold
|
20
20
|
end
|
21
21
|
|
22
22
|
sig { params(text: String).void }
|
23
23
|
def self.print(text)
|
24
|
-
|
24
|
+
out text
|
25
25
|
end
|
26
26
|
|
27
27
|
sig { void }
|
28
28
|
def self.print_divider
|
29
|
-
|
29
|
+
out '=' * 100
|
30
|
+
end
|
31
|
+
|
32
|
+
sig { params(str: String).void }
|
33
|
+
def self.out(str)
|
34
|
+
puts str
|
30
35
|
end
|
31
36
|
end
|
32
37
|
end
|
data/lib/use_packwerk/private.rb
CHANGED
@@ -96,16 +96,6 @@ module UsePackwerk
|
|
96
96
|
raise StandardError.new("Can not find package with name #{pack_name}. Make sure the argument is of the form `packs/my_pack/`")
|
97
97
|
end
|
98
98
|
|
99
|
-
Logging.section('👋 Hi!') do
|
100
|
-
intro = <<~INTRO
|
101
|
-
You are moving a file to a pack, which is great. Check out #{UsePackwerk.config.documentation_link} for more info!
|
102
|
-
|
103
|
-
Please bring any questions or issues you have in your development process to #ruby-modularity or #product-infrastructure.
|
104
|
-
We'd be happy to try to help through pairing, accepting feedback, changing our process, changing our tools, and more.
|
105
|
-
INTRO
|
106
|
-
Logging.print_bold_green(intro)
|
107
|
-
end
|
108
|
-
|
109
99
|
add_public_directory(package)
|
110
100
|
add_readme_todo(package)
|
111
101
|
package_location = package.directory
|
@@ -128,7 +118,10 @@ module UsePackwerk
|
|
128
118
|
# Later, if we choose to go back to moving whole directories at a time, it should be a refactor and all tests should still pass
|
129
119
|
#
|
130
120
|
if origin_pathname.directory?
|
131
|
-
origin_pathname.glob('
|
121
|
+
origin_pathname.glob('**/*.*').reject do |path|
|
122
|
+
path.to_s.include?(ParsePackwerk::PACKAGE_YML_NAME) ||
|
123
|
+
path.to_s.include?(ParsePackwerk::DEPRECATED_REFERENCES_YML_NAME)
|
124
|
+
end
|
132
125
|
else
|
133
126
|
origin_pathname
|
134
127
|
end
|
@@ -150,26 +143,62 @@ module UsePackwerk
|
|
150
143
|
per_file_processors.each do |per_file_processor|
|
151
144
|
per_file_processor.print_final_message!
|
152
145
|
end
|
146
|
+
end
|
153
147
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
148
|
+
sig do
|
149
|
+
params(
|
150
|
+
pack_name: String,
|
151
|
+
parent_name: String,
|
152
|
+
per_file_processors: T::Array[PerFileProcessorInterface],
|
153
|
+
).void
|
154
|
+
end
|
155
|
+
def self.move_to_parent!(
|
156
|
+
pack_name:,
|
157
|
+
parent_name:,
|
158
|
+
per_file_processors: []
|
159
|
+
)
|
160
|
+
pack_name = Private.clean_pack_name(pack_name)
|
161
|
+
package = ParsePackwerk.all.find { |package| package.name == pack_name }
|
162
|
+
if package.nil?
|
163
|
+
raise StandardError.new("Can not find package with name #{pack_name}. Make sure the argument is of the form `packs/my_pack/`")
|
164
|
+
end
|
168
165
|
|
169
|
-
|
170
|
-
|
166
|
+
parent_name = Private.clean_pack_name(parent_name)
|
167
|
+
parent_package = ParsePackwerk.all.find { |package| package.name == parent_name }
|
168
|
+
if parent_package.nil?
|
169
|
+
parent_package = create_pack_if_not_exists!(pack_name: parent_name, enforce_privacy: true, enforce_dependencies: true)
|
171
170
|
end
|
172
171
|
|
172
|
+
# First we create a new pack that has the exact same properties of the old one!
|
173
|
+
package_last_name = package.directory.basename
|
174
|
+
new_package_name = parent_package.directory.join(package_last_name).to_s
|
175
|
+
|
176
|
+
new_package = ParsePackwerk::Package.new(
|
177
|
+
name: new_package_name,
|
178
|
+
enforce_privacy: package.enforce_dependencies,
|
179
|
+
enforce_dependencies: package.enforce_dependencies,
|
180
|
+
dependencies: package.dependencies,
|
181
|
+
metadata: package.metadata,
|
182
|
+
)
|
183
|
+
ParsePackwerk.write_package_yml!(new_package)
|
184
|
+
ParsePackwerk.bust_cache!
|
185
|
+
|
186
|
+
# Move everything from the old pack to the new one
|
187
|
+
self.move_to_pack!(
|
188
|
+
pack_name: new_package_name,
|
189
|
+
paths_relative_to_root: [package.directory.to_s],
|
190
|
+
per_file_processors: per_file_processors,
|
191
|
+
)
|
192
|
+
|
193
|
+
# Then delete the old package.yml and deprecated_references.yml files
|
194
|
+
package.yml.delete
|
195
|
+
deprecated_references_file = ParsePackwerk::DeprecatedReferences.for(package).pathname
|
196
|
+
deprecated_references_file.delete if deprecated_references_file.exist?
|
197
|
+
|
198
|
+
# Add a dependency from parent to child
|
199
|
+
self.add_dependency!(pack_name: parent_name, dependency_name: new_package_name)
|
200
|
+
end
|
201
|
+
|
173
202
|
sig do
|
174
203
|
params(
|
175
204
|
paths_relative_to_root: T::Array[String],
|
@@ -177,19 +206,12 @@ module UsePackwerk
|
|
177
206
|
).void
|
178
207
|
end
|
179
208
|
def self.make_public!(paths_relative_to_root:, per_file_processors:)
|
180
|
-
Logging.section('Making files public') do
|
181
|
-
intro = <<~INTRO
|
182
|
-
You are moving some files into public API. See #{UsePackwerk.config.documentation_link} for other utilities!
|
183
|
-
INTRO
|
184
|
-
Logging.print_bold_green(intro)
|
185
|
-
end
|
186
|
-
|
187
209
|
if paths_relative_to_root.any?
|
188
210
|
Logging.section('File Operations') do
|
189
211
|
file_paths = paths_relative_to_root.flat_map do |path|
|
190
212
|
origin_pathname = Pathname.new(path).cleanpath
|
191
213
|
if origin_pathname.directory?
|
192
|
-
origin_pathname.glob('
|
214
|
+
origin_pathname.glob('**/*.*').map(&:to_s)
|
193
215
|
else
|
194
216
|
path
|
195
217
|
end
|
@@ -213,22 +235,6 @@ module UsePackwerk
|
|
213
235
|
end
|
214
236
|
end
|
215
237
|
end
|
216
|
-
|
217
|
-
Logging.section('Next steps') do
|
218
|
-
next_steps = <<~NEXT_STEPS
|
219
|
-
Your next steps might be:
|
220
|
-
|
221
|
-
1) Run `bin/packwerk update-deprecations` to update the violations. Make sure to run `spring stop` if you've added new load paths (new top-level directories) in your pack.
|
222
|
-
|
223
|
-
2) Update TODO lists for rubocop implemented protections. See #{UsePackwerk.config.documentation_link} for more info
|
224
|
-
|
225
|
-
3) Work to migrate clients of private API to your new public API
|
226
|
-
|
227
|
-
4) Update your README at packs/your_package_name/README.md
|
228
|
-
NEXT_STEPS
|
229
|
-
|
230
|
-
Logging.print_bold_green(next_steps)
|
231
|
-
end
|
232
238
|
end
|
233
239
|
|
234
240
|
sig do
|
@@ -238,13 +244,6 @@ module UsePackwerk
|
|
238
244
|
).void
|
239
245
|
end
|
240
246
|
def self.add_dependency!(pack_name:, dependency_name:)
|
241
|
-
Logging.section('Adding a dependency') do
|
242
|
-
intro = <<~INTRO
|
243
|
-
You are adding a dependency. See #{UsePackwerk.config.documentation_link} for other utilities!
|
244
|
-
INTRO
|
245
|
-
Logging.print_bold_green(intro)
|
246
|
-
end
|
247
|
-
|
248
247
|
all_packages = ParsePackwerk.all
|
249
248
|
|
250
249
|
pack_name = Private.clean_pack_name(pack_name)
|
@@ -267,18 +266,6 @@ module UsePackwerk
|
|
267
266
|
metadata: package.metadata,
|
268
267
|
)
|
269
268
|
ParsePackwerk.write_package_yml!(new_package)
|
270
|
-
|
271
|
-
Logging.section('Next steps') do
|
272
|
-
next_steps = <<~NEXT_STEPS
|
273
|
-
Your next steps might be:
|
274
|
-
|
275
|
-
1) Run `bin/packwerk validate` to ensure you haven't introduced a cyclic dependency
|
276
|
-
|
277
|
-
2) Run `bin/packwerk update-deprecations` to update the violations.
|
278
|
-
NEXT_STEPS
|
279
|
-
|
280
|
-
Logging.print_bold_green(next_steps)
|
281
|
-
end
|
282
269
|
end
|
283
270
|
|
284
271
|
sig { params(file_move_operation: FileMoveOperation, per_file_processors: T::Array[UsePackwerk::PerFileProcessorInterface]).void }
|
data/lib/use_packwerk.rb
CHANGED
@@ -61,11 +61,39 @@ module UsePackwerk
|
|
61
61
|
paths_relative_to_root: [],
|
62
62
|
per_file_processors: []
|
63
63
|
)
|
64
|
+
Logging.section('👋 Hi!') do
|
65
|
+
intro = <<~INTRO
|
66
|
+
You are moving a file to a pack, which is great. Check out #{UsePackwerk.config.documentation_link} for more info!
|
67
|
+
|
68
|
+
Please bring any questions or issues you have in your development process to #ruby-modularity or #product-infrastructure.
|
69
|
+
We'd be happy to try to help through pairing, accepting feedback, changing our process, changing our tools, and more.
|
70
|
+
INTRO
|
71
|
+
Logging.print_bold_green(intro)
|
72
|
+
end
|
73
|
+
|
64
74
|
Private.move_to_pack!(
|
65
75
|
pack_name: pack_name,
|
66
76
|
paths_relative_to_root: paths_relative_to_root,
|
67
77
|
per_file_processors: per_file_processors,
|
68
78
|
)
|
79
|
+
|
80
|
+
Logging.section('Next steps') do
|
81
|
+
next_steps = <<~NEXT_STEPS
|
82
|
+
Your next steps might be:
|
83
|
+
|
84
|
+
1) Run `bin/packwerk update-deprecations` to update the violations. Make sure to run `spring stop` if you've added new load paths (new top-level directories) in your pack.
|
85
|
+
|
86
|
+
2) Update TODO lists for rubocop implemented protections. See #{UsePackwerk.config.documentation_link} for more info
|
87
|
+
|
88
|
+
3) Touch base with each team who owns files involved in this move
|
89
|
+
|
90
|
+
4) Expose public API in #{pack_name}/app/public. Try `bin/use_packwerk make_public #{pack_name}/path/to/file.rb`
|
91
|
+
|
92
|
+
5) Update your readme at #{pack_name}/README.md
|
93
|
+
NEXT_STEPS
|
94
|
+
|
95
|
+
Logging.print_bold_green(next_steps)
|
96
|
+
end
|
69
97
|
end
|
70
98
|
|
71
99
|
sig do
|
@@ -78,10 +106,33 @@ module UsePackwerk
|
|
78
106
|
paths_relative_to_root: [],
|
79
107
|
per_file_processors: []
|
80
108
|
)
|
109
|
+
Logging.section('Making files public') do
|
110
|
+
intro = <<~INTRO
|
111
|
+
You are moving some files into public API. See #{UsePackwerk.config.documentation_link} for other utilities!
|
112
|
+
INTRO
|
113
|
+
Logging.print_bold_green(intro)
|
114
|
+
end
|
115
|
+
|
81
116
|
Private.make_public!(
|
82
117
|
paths_relative_to_root: paths_relative_to_root,
|
83
118
|
per_file_processors: per_file_processors
|
84
119
|
)
|
120
|
+
|
121
|
+
Logging.section('Next steps') do
|
122
|
+
next_steps = <<~NEXT_STEPS
|
123
|
+
Your next steps might be:
|
124
|
+
|
125
|
+
1) Run `bin/packwerk update-deprecations` to update the violations. Make sure to run `spring stop` if you've added new load paths (new top-level directories) in your pack.
|
126
|
+
|
127
|
+
2) Update TODO lists for rubocop implemented protections. See #{UsePackwerk.config.documentation_link} for more info
|
128
|
+
|
129
|
+
3) Work to migrate clients of private API to your new public API
|
130
|
+
|
131
|
+
4) Update your README at packs/your_package_name/README.md
|
132
|
+
NEXT_STEPS
|
133
|
+
|
134
|
+
Logging.print_bold_green(next_steps)
|
135
|
+
end
|
85
136
|
end
|
86
137
|
|
87
138
|
sig do
|
@@ -94,10 +145,70 @@ module UsePackwerk
|
|
94
145
|
pack_name:,
|
95
146
|
dependency_name:
|
96
147
|
)
|
148
|
+
Logging.section('Adding a dependency') do
|
149
|
+
intro = <<~INTRO
|
150
|
+
You are adding a dependency. See #{UsePackwerk.config.documentation_link} for other utilities!
|
151
|
+
INTRO
|
152
|
+
Logging.print_bold_green(intro)
|
153
|
+
end
|
154
|
+
|
97
155
|
Private.add_dependency!(
|
98
156
|
pack_name: pack_name,
|
99
157
|
dependency_name: dependency_name
|
100
158
|
)
|
159
|
+
|
160
|
+
Logging.section('Next steps') do
|
161
|
+
next_steps = <<~NEXT_STEPS
|
162
|
+
Your next steps might be:
|
163
|
+
|
164
|
+
1) Run `bin/packwerk validate` to ensure you haven't introduced a cyclic dependency
|
165
|
+
|
166
|
+
2) Run `bin/packwerk update-deprecations` to update the violations.
|
167
|
+
NEXT_STEPS
|
168
|
+
|
169
|
+
Logging.print_bold_green(next_steps)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
sig do
|
174
|
+
params(
|
175
|
+
pack_name: String,
|
176
|
+
parent_name: String,
|
177
|
+
per_file_processors: T::Array[PerFileProcessorInterface],
|
178
|
+
).void
|
179
|
+
end
|
180
|
+
def self.move_to_parent!(
|
181
|
+
pack_name:,
|
182
|
+
parent_name:,
|
183
|
+
per_file_processors: []
|
184
|
+
)
|
185
|
+
Logging.section('👋 Hi!') do
|
186
|
+
intro = <<~INTRO
|
187
|
+
You are moving one pack to be a child of a different pack. Check out #{UsePackwerk.config.documentation_link} for more info!
|
188
|
+
|
189
|
+
Please bring any questions or issues you have in your development process to #ruby-modularity or #product-infrastructure.
|
190
|
+
We'd be happy to try to help through pairing, accepting feedback, changing our process, changing our tools, and more.
|
191
|
+
INTRO
|
192
|
+
Logging.print_bold_green(intro)
|
193
|
+
end
|
194
|
+
|
195
|
+
Private.move_to_parent!(
|
196
|
+
pack_name: pack_name,
|
197
|
+
parent_name: parent_name,
|
198
|
+
per_file_processors: per_file_processors,
|
199
|
+
)
|
200
|
+
|
201
|
+
Logging.section('Next steps') do
|
202
|
+
next_steps = <<~NEXT_STEPS
|
203
|
+
Your next steps might be:
|
204
|
+
|
205
|
+
1) Delete the old pack when things look good: `rm -rf #{pack_name}`
|
206
|
+
|
207
|
+
2) Run `bin/packwerk update-deprecations` to update the violations. Make sure to run `spring stop` first.
|
208
|
+
NEXT_STEPS
|
209
|
+
|
210
|
+
Logging.print_bold_green(next_steps)
|
211
|
+
end
|
101
212
|
end
|
102
213
|
|
103
214
|
sig do
|
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.53.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-08-
|
11
|
+
date: 2022-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|