packs 0.0.36 → 0.0.38

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
  SHA256:
3
- metadata.gz: c0a49abad749c63c73c0bbb9cfa0ac4d75962af3c0f5b22cfb8173906f18310e
4
- data.tar.gz: e9757c94ee7866e9ee7daaeec189166aa7a07b47baa18f93eff239552a5e94ab
3
+ metadata.gz: 876b307fd78af1128f0404e37f792d5b249b77ccba825fcd8afc3729ac77c242
4
+ data.tar.gz: 39b947778eda7ce4aadd58830bb8abf320c3b1cf3f09327b503a24b93ea43add
5
5
  SHA512:
6
- metadata.gz: a74621a2a3346a352256086cb534c1ef6038beac481af3559409682ce2198c4d90e16b4d276ebe271fc93d6a9d7a2260642bf0aa2b76de22cd8bd4d9f11054a1
7
- data.tar.gz: 93dc9e6df47b7150fd1c2ef1ddd312931b154934d83ae8060307ef17a6a146858b98b33f6961863a3c23348b0aa398f0c188098e6bdf5dc5c6c70547b97fc843
6
+ metadata.gz: 7aecd7614772de0eb3166954887d9012161697f355cd852a12d652f745c5bd424ac52839204762067fbb27d48ea8ffd56551f1c4eb6597fa50099cfd43f22070
7
+ data.tar.gz: dbc2223fe7612e204f59548136bfc8b8f77355f321cfee17d25766a94ba7fb473be9fe47f2db9d95138a746dba1a7ce687c60befba05f481cfa4b2603f2bc547
data/README.md CHANGED
@@ -111,7 +111,10 @@ Make sure there are no spaces between the comma-separated list of paths of direc
111
111
  `bin/packs rename`
112
112
 
113
113
  ## Set packs/child_pack as a child of packs/parent_pack
114
- `bin/packs move_to_parent packs/child_pack packs/parent_pack `
114
+ `bin/packs move_to_parent packs/child_pack packs/parent_pack`
115
+
116
+ ## Move packs/foo to the some/directory folder, where some/directory does not contain a package.yml file
117
+ `bin/packs move_to_folder packs/foo some/directory`
115
118
 
116
119
 
117
120
  ## Releasing
data/lib/packs/cli.rb CHANGED
@@ -7,12 +7,16 @@ module Packs
7
7
  extend T::Sig
8
8
 
9
9
  desc 'create packs/your_pack', 'Create pack with name packs/your_pack'
10
+ option :enforce_dependencies, type: :boolean, default: nil, aliases: :d, banner: 'Enforce dependencies'
10
11
  option :enforce_privacy, type: :boolean, default: true, aliases: :p, banner: 'Enforce privacy'
12
+ option :enforce_architecture, type: :boolean, default: true, aliases: :a, banner: 'Enforce architecture'
11
13
  sig { params(pack_name: String).void }
12
14
  def create(pack_name)
13
15
  Packs.create_pack!(
14
16
  pack_name: pack_name,
15
- enforce_privacy: options[:enforce_privacy]
17
+ enforce_dependencies: options[:enforce_dependencies],
18
+ enforce_privacy: options[:enforce_privacy],
19
+ enforce_architecture: options[:enforce_architecture]
16
20
  )
17
21
  exit_successfully
18
22
  end
@@ -150,7 +154,7 @@ module Packs
150
154
  exit_successfully
151
155
  end
152
156
 
153
- desc 'move_to_parent packs/child_pack packs/parent_pack ', 'Set packs/child_pack as a child of packs/parent_pack'
157
+ desc 'move_to_parent packs/child_pack packs/parent_pack', 'Set packs/child_pack as a child of packs/parent_pack'
154
158
  sig { params(child_pack_name: String, parent_pack_name: String).void }
155
159
  def move_to_parent(child_pack_name, parent_pack_name)
156
160
  Packs.move_to_parent!(
@@ -160,6 +164,16 @@ module Packs
160
164
  exit_successfully
161
165
  end
162
166
 
167
+ desc 'move_to_folder packs/foo some/directory', 'Move packs/foo to the some/directory folder, where some/directory does not contain a package.yml file'
168
+ sig { params(pack_name: String, destination: String).void }
169
+ def move_to_folder(pack_name, destination)
170
+ Packs.move_to_folder!(
171
+ pack_name: pack_name,
172
+ destination: destination
173
+ )
174
+ exit_successfully
175
+ end
176
+
163
177
  private
164
178
 
165
179
  # This is used by thor to know that these private methods are not intended to be CLI commands
data/lib/packs/private.rb CHANGED
@@ -47,12 +47,13 @@ module Packs
47
47
  sig do
48
48
  params(
49
49
  pack_name: String,
50
- enforce_privacy: T::Boolean,
51
50
  enforce_dependencies: T.nilable(T::Boolean),
51
+ enforce_privacy: T::Boolean,
52
+ enforce_architecture: T::Boolean,
52
53
  team: T.nilable(CodeTeams::Team)
53
54
  ).void
54
55
  end
55
- def self.create_pack!(pack_name:, enforce_privacy:, enforce_dependencies:, team:)
56
+ def self.create_pack!(pack_name:, enforce_dependencies:, enforce_privacy:, enforce_architecture:, team:)
56
57
  Logging.section('👋 Hi!') do
57
58
  intro = Packs.config.user_event_logger.before_create_pack(pack_name)
58
59
  Logging.print_bold_green(intro)
@@ -60,7 +61,13 @@ module Packs
60
61
 
61
62
  pack_name = Private.clean_pack_name(pack_name)
62
63
 
63
- package = create_pack_if_not_exists!(pack_name: pack_name, enforce_privacy: enforce_privacy, enforce_dependencies: enforce_dependencies, team: team)
64
+ package = create_pack_if_not_exists!(
65
+ pack_name: pack_name,
66
+ enforce_dependencies: enforce_dependencies,
67
+ enforce_privacy: enforce_privacy,
68
+ enforce_architecture: enforce_architecture,
69
+ team: team
70
+ )
64
71
  add_public_directory(package) if package.enforce_privacy
65
72
  add_readme_todo(package)
66
73
 
@@ -140,6 +147,85 @@ module Packs
140
147
  end
141
148
  end
142
149
 
150
+ sig do
151
+ params(
152
+ pack_name: String,
153
+ destination: String,
154
+ per_file_processors: T::Array[PerFileProcessorInterface]
155
+ ).void
156
+ end
157
+ def self.move_to_folder!(pack_name:, destination:, per_file_processors: [Packs::RubocopPostProcessor.new, Packs::CodeOwnershipPostProcessor.new])
158
+ pack_name = Private.clean_pack_name(pack_name)
159
+ package = ParsePackwerk.all.find { |p| p.name == pack_name }
160
+ if package.nil?
161
+ raise StandardError, "Can not find package with name #{pack_name}. Make sure the argument is of the form `packs/my_pack/`"
162
+ end
163
+
164
+ # First we create a new pack that has the exact same properties of the old one!
165
+ package_last_name = package.directory.basename
166
+ new_package_name = File.join(destination, package_last_name)
167
+
168
+ new_package = ParsePackwerk::Package.new(
169
+ name: new_package_name,
170
+ enforce_dependencies: package.enforce_dependencies,
171
+ enforce_privacy: package.enforce_privacy,
172
+ enforce_architecture: package.enforce_architecture,
173
+ dependencies: package.dependencies,
174
+ violations: package.violations,
175
+ metadata: package.metadata,
176
+ config: package.config
177
+ )
178
+ ParsePackwerk.write_package_yml!(new_package)
179
+ ParsePackwerk.bust_cache!
180
+
181
+ # Move everything from the old pack to the new one
182
+ move_to_pack!(
183
+ pack_name: new_package_name,
184
+ paths_relative_to_root: [package.directory.to_s],
185
+ per_file_processors: per_file_processors
186
+ )
187
+
188
+ # Then delete the old package.yml and package_todo.yml files
189
+ package.yml.delete
190
+ package_todo_file = ParsePackwerk::PackageTodo.for(package).pathname
191
+ package_todo_file.delete if package_todo_file.exist?
192
+
193
+ ParsePackwerk.bust_cache!
194
+
195
+ ParsePackwerk.all.each do |other_package|
196
+ new_dependencies = other_package.dependencies.map { |d| d == pack_name ? new_package_name : d }
197
+
198
+ new_config = other_package.config.dup
199
+ if new_config['ignored_dependencies']
200
+ new_config['ignored_dependencies'] = new_config['ignored_dependencies'].map do |d|
201
+ d == pack_name ? new_package_name : d
202
+ end
203
+ end
204
+
205
+ new_other_package = ParsePackwerk::Package.new(
206
+ name: other_package.name,
207
+ enforce_dependencies: other_package.enforce_dependencies,
208
+ enforce_privacy: other_package.enforce_privacy,
209
+ enforce_architecture: other_package.enforce_architecture,
210
+ dependencies: new_dependencies.uniq.sort,
211
+ violations: other_package.violations,
212
+ metadata: other_package.metadata,
213
+ config: new_config
214
+ )
215
+
216
+ ParsePackwerk.write_package_yml!(new_other_package)
217
+ end
218
+
219
+ sorbet_config = Pathname.new('sorbet/config')
220
+ if sorbet_config.exist?
221
+ Packs.replace_in_file(
222
+ file: sorbet_config.to_s,
223
+ find: package.directory.join('spec'),
224
+ replace_with: new_package.directory.join('spec')
225
+ )
226
+ end
227
+ end
228
+
143
229
  sig do
144
230
  params(
145
231
  pack_name: String,
@@ -161,7 +247,12 @@ module Packs
161
247
  parent_name = Private.clean_pack_name(parent_name)
162
248
  parent_package = ParsePackwerk.all.find { |p| p.name == parent_name }
163
249
  if parent_package.nil?
164
- parent_package = create_pack_if_not_exists!(pack_name: parent_name, enforce_privacy: true, enforce_dependencies: true)
250
+ parent_package = create_pack_if_not_exists!(
251
+ pack_name: parent_name,
252
+ enforce_dependencies: true,
253
+ enforce_privacy: true,
254
+ enforce_architecture: true
255
+ )
165
256
  end
166
257
 
167
258
  # First we create a new pack that has the exact same properties of the old one!
@@ -172,6 +263,7 @@ module Packs
172
263
  name: new_package_name,
173
264
  enforce_privacy: package.enforce_privacy,
174
265
  enforce_dependencies: package.enforce_dependencies,
266
+ enforce_architecture: package.enforce_architecture,
175
267
  dependencies: package.dependencies,
176
268
  violations: package.violations,
177
269
  metadata: package.metadata,
@@ -212,8 +304,9 @@ module Packs
212
304
 
213
305
  new_other_package = ParsePackwerk::Package.new(
214
306
  name: other_package.name,
215
- enforce_privacy: other_package.enforce_privacy,
216
307
  enforce_dependencies: other_package.enforce_dependencies,
308
+ enforce_privacy: other_package.enforce_privacy,
309
+ enforce_architecture: other_package.enforce_architecture,
217
310
  dependencies: new_dependencies.uniq.sort,
218
311
  violations: other_package.violations,
219
312
  metadata: other_package.metadata,
@@ -305,6 +398,7 @@ module Packs
305
398
  name: pack_name,
306
399
  dependencies: (package.dependencies + [dependency_name]).uniq.sort,
307
400
  enforce_privacy: package.enforce_privacy,
401
+ enforce_architecture: package.enforce_architecture,
308
402
  enforce_dependencies: package.enforce_dependencies,
309
403
  violations: package.violations,
310
404
  metadata: package.metadata,
@@ -370,12 +464,13 @@ module Packs
370
464
  sig do
371
465
  params(
372
466
  pack_name: String,
373
- enforce_privacy: T::Boolean,
374
467
  enforce_dependencies: T.nilable(T::Boolean),
468
+ enforce_privacy: T::Boolean,
469
+ enforce_architecture: T::Boolean,
375
470
  team: T.nilable(CodeTeams::Team)
376
471
  ).returns(ParsePackwerk::Package)
377
472
  end
378
- def self.create_pack_if_not_exists!(pack_name:, enforce_privacy:, enforce_dependencies:, team: nil)
473
+ def self.create_pack_if_not_exists!(pack_name:, enforce_dependencies:, enforce_privacy:, enforce_architecture:, team: nil)
379
474
  allowed_locations = Packs::Specification.config.pack_paths
380
475
  if allowed_locations.none? { |location| File.fnmatch(location, pack_name) }
381
476
  raise StandardError, "Packs only supports packages in the the following directories: #{allowed_locations}. Please make sure to pass in the name of the pack including the full directory path, e.g. `packs/my_pack`."
@@ -398,6 +493,7 @@ module Packs
398
493
  package = ParsePackwerk::Package.new(
399
494
  enforce_dependencies: should_enforce_dependencies || false,
400
495
  enforce_privacy: enforce_privacy,
496
+ enforce_architecture: enforce_architecture,
401
497
  dependencies: [],
402
498
  violations: [],
403
499
  metadata: {},
@@ -105,6 +105,24 @@ module Packs
105
105
  MSG
106
106
  end
107
107
 
108
+ sig { params(pack_name: String).returns(String) }
109
+ def before_move_to_folder(pack_name)
110
+ <<~MSG
111
+ You are moving one pack to a new directory. Check out #{documentation_link} for more info!
112
+ MSG
113
+ end
114
+
115
+ sig { params(pack_name: String).returns(String) }
116
+ def after_move_to_folder(pack_name)
117
+ <<~MSG
118
+ Your next steps might be:
119
+
120
+ 1) Delete the old pack when things look good: `git rm -r #{pack_name}`
121
+
122
+ 2) Run `bin/packwerk update-todo` to update the violations. Make sure to run `spring stop` first.
123
+ MSG
124
+ end
125
+
108
126
  sig { params(pack_name: String).returns(String) }
109
127
  def on_create_public_directory_todo(pack_name)
110
128
  <<~MSG
data/lib/packs.rb CHANGED
@@ -49,6 +49,7 @@ module Packs
49
49
  params(
50
50
  pack_name: String,
51
51
  enforce_privacy: T::Boolean,
52
+ enforce_architecture: T::Boolean,
52
53
  enforce_dependencies: T.nilable(T::Boolean),
53
54
  team: T.nilable(CodeTeams::Team)
54
55
  ).void
@@ -56,6 +57,7 @@ module Packs
56
57
  def self.create_pack!(
57
58
  pack_name:,
58
59
  enforce_privacy: true,
60
+ enforce_architecture: true,
59
61
  enforce_dependencies: nil,
60
62
  team: nil
61
63
  )
@@ -63,6 +65,7 @@ module Packs
63
65
  pack_name: pack_name,
64
66
  enforce_privacy: enforce_privacy,
65
67
  enforce_dependencies: enforce_dependencies,
68
+ enforce_architecture: enforce_architecture,
66
69
  team: team
67
70
  )
68
71
  end
@@ -178,6 +181,36 @@ module Packs
178
181
  end
179
182
  end
180
183
 
184
+ sig do
185
+ params(
186
+ pack_name: String,
187
+ destination: String,
188
+ per_file_processors: T::Array[PerFileProcessorInterface]
189
+ ).void
190
+ end
191
+ def self.move_to_folder!(
192
+ pack_name:,
193
+ destination:,
194
+ per_file_processors: [Packs::RubocopPostProcessor.new, Packs::CodeOwnershipPostProcessor.new]
195
+ )
196
+ Logging.section('👋 Hi!') do
197
+ intro = Packs.config.user_event_logger.before_move_to_folder(pack_name)
198
+ Logging.print_bold_green(intro)
199
+ end
200
+
201
+ Private.move_to_folder!(
202
+ pack_name: pack_name,
203
+ destination: destination,
204
+ per_file_processors: per_file_processors
205
+ )
206
+
207
+ Logging.section('Next steps') do
208
+ next_steps = Packs.config.user_event_logger.after_move_to_folder(pack_name)
209
+
210
+ Logging.print_bold_green(next_steps)
211
+ end
212
+ end
213
+
181
214
  sig do
182
215
  params(
183
216
  type: String,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.36
4
+ version: 0.0.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-28 00:00:00.000000000 Z
11
+ date: 2023-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_ownership
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.22.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.22.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rainbow
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -314,7 +314,7 @@ metadata:
314
314
  source_code_uri: https://github.com/rubyatscale/packs
315
315
  changelog_uri: https://github.com/rubyatscale/packs/releases
316
316
  allowed_push_host: https://rubygems.org
317
- post_install_message:
317
+ post_install_message:
318
318
  rdoc_options: []
319
319
  require_paths:
320
320
  - lib
@@ -329,8 +329,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
329
  - !ruby/object:Gem::Version
330
330
  version: '0'
331
331
  requirements: []
332
- rubygems_version: 3.1.6
333
- signing_key:
332
+ rubygems_version: 3.4.10
333
+ signing_key:
334
334
  specification_version: 4
335
335
  summary: Provides CLI tools for working with ruby packs.
336
336
  test_files: []