Skip to content

Commit 53e40c0

Browse files
schoblaskaashleywillardperryqh
authored
add enforce_architecture flag wherever enforce_privacy is used (#138)
* add enforce_architecture flag wherever enforce_privacy is used Co-authored-by: Ashley Willard <ashley.willard@gusto.com> Co-authored-by: Perry Hertler <perry.hertler@gusto.com> * bump version (0.0.37 -> 0.0.38) --------- Co-authored-by: Ashley Willard <ashley.willard@gusto.com> Co-authored-by: Perry Hertler <perry.hertler@gusto.com>
1 parent 9c1a37a commit 53e40c0

File tree

11 files changed

+235
-104
lines changed

11 files changed

+235
-104
lines changed

Gemfile.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
GIT
22
remote: https://github.com/Shopify/packwerk.git
3-
revision: e850241a4572a984bc9def8307faef7271c6890b
3+
revision: c27be1b1bc917d088fa46484414f303d81217117
44
branch: main
55
specs:
66
packwerk (3.1.0)
@@ -17,11 +17,11 @@ GIT
1717
PATH
1818
remote: .
1919
specs:
20-
packs (0.0.37)
20+
packs (0.0.38)
2121
code_ownership (>= 1.33.0)
2222
packs-specification
2323
packwerk
24-
parse_packwerk
24+
parse_packwerk (>= 0.22.0)
2525
rainbow
2626
sorbet-runtime
2727
thor
@@ -81,7 +81,7 @@ GEM
8181
packs-specification (0.0.10)
8282
sorbet-runtime
8383
parallel (1.23.0)
84-
parse_packwerk (0.20.1)
84+
parse_packwerk (0.22.0)
8585
sorbet-runtime
8686
parser (3.2.2.3)
8787
ast (~> 2.4.1)

lib/packs.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,23 @@ def self.check(files)
4949
params(
5050
pack_name: String,
5151
enforce_privacy: T::Boolean,
52+
enforce_architecture: T::Boolean,
5253
enforce_dependencies: T.nilable(T::Boolean),
5354
team: T.nilable(CodeTeams::Team)
5455
).void
5556
end
5657
def self.create_pack!(
5758
pack_name:,
5859
enforce_privacy: true,
60+
enforce_architecture: true,
5961
enforce_dependencies: nil,
6062
team: nil
6163
)
6264
Private.create_pack!(
6365
pack_name: pack_name,
6466
enforce_privacy: enforce_privacy,
6567
enforce_dependencies: enforce_dependencies,
68+
enforce_architecture: enforce_architecture,
6669
team: team
6770
)
6871
end

lib/packs/cli.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ class CLI < Thor
77
extend T::Sig
88

99
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'
1011
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'
1113
sig { params(pack_name: String).void }
1214
def create(pack_name)
1315
Packs.create_pack!(
1416
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]
1620
)
1721
exit_successfully
1822
end

lib/packs/private.rb

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,27 @@ def self.replace_in_file(file:, find:, replace_with:)
4747
sig do
4848
params(
4949
pack_name: String,
50-
enforce_privacy: T::Boolean,
5150
enforce_dependencies: T.nilable(T::Boolean),
51+
enforce_privacy: T::Boolean,
52+
enforce_architecture: T::Boolean,
5253
team: T.nilable(CodeTeams::Team)
5354
).void
5455
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:)
5657
Logging.section('👋 Hi!') do
5758
intro = Packs.config.user_event_logger.before_create_pack(pack_name)
5859
Logging.print_bold_green(intro)
5960
end
6061

6162
pack_name = Private.clean_pack_name(pack_name)
6263

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+
)
6471
add_public_directory(package) if package.enforce_privacy
6572
add_readme_todo(package)
6673

@@ -160,8 +167,9 @@ def self.move_to_folder!(pack_name:, destination:, per_file_processors: [Packs::
160167

161168
new_package = ParsePackwerk::Package.new(
162169
name: new_package_name,
163-
enforce_privacy: package.enforce_privacy,
164170
enforce_dependencies: package.enforce_dependencies,
171+
enforce_privacy: package.enforce_privacy,
172+
enforce_architecture: package.enforce_architecture,
165173
dependencies: package.dependencies,
166174
violations: package.violations,
167175
metadata: package.metadata,
@@ -196,8 +204,9 @@ def self.move_to_folder!(pack_name:, destination:, per_file_processors: [Packs::
196204

197205
new_other_package = ParsePackwerk::Package.new(
198206
name: other_package.name,
199-
enforce_privacy: other_package.enforce_privacy,
200207
enforce_dependencies: other_package.enforce_dependencies,
208+
enforce_privacy: other_package.enforce_privacy,
209+
enforce_architecture: other_package.enforce_architecture,
201210
dependencies: new_dependencies.uniq.sort,
202211
violations: other_package.violations,
203212
metadata: other_package.metadata,
@@ -238,7 +247,12 @@ def self.move_to_parent!(
238247
parent_name = Private.clean_pack_name(parent_name)
239248
parent_package = ParsePackwerk.all.find { |p| p.name == parent_name }
240249
if parent_package.nil?
241-
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+
)
242256
end
243257

244258
# First we create a new pack that has the exact same properties of the old one!
@@ -249,6 +263,7 @@ def self.move_to_parent!(
249263
name: new_package_name,
250264
enforce_privacy: package.enforce_privacy,
251265
enforce_dependencies: package.enforce_dependencies,
266+
enforce_architecture: package.enforce_architecture,
252267
dependencies: package.dependencies,
253268
violations: package.violations,
254269
metadata: package.metadata,
@@ -289,8 +304,9 @@ def self.move_to_parent!(
289304

290305
new_other_package = ParsePackwerk::Package.new(
291306
name: other_package.name,
292-
enforce_privacy: other_package.enforce_privacy,
293307
enforce_dependencies: other_package.enforce_dependencies,
308+
enforce_privacy: other_package.enforce_privacy,
309+
enforce_architecture: other_package.enforce_architecture,
294310
dependencies: new_dependencies.uniq.sort,
295311
violations: other_package.violations,
296312
metadata: other_package.metadata,
@@ -382,6 +398,7 @@ def self.add_dependency!(pack_name:, dependency_name:)
382398
name: pack_name,
383399
dependencies: (package.dependencies + [dependency_name]).uniq.sort,
384400
enforce_privacy: package.enforce_privacy,
401+
enforce_architecture: package.enforce_architecture,
385402
enforce_dependencies: package.enforce_dependencies,
386403
violations: package.violations,
387404
metadata: package.metadata,
@@ -447,12 +464,13 @@ def self.add_readme_todo(package)
447464
sig do
448465
params(
449466
pack_name: String,
450-
enforce_privacy: T::Boolean,
451467
enforce_dependencies: T.nilable(T::Boolean),
468+
enforce_privacy: T::Boolean,
469+
enforce_architecture: T::Boolean,
452470
team: T.nilable(CodeTeams::Team)
453471
).returns(ParsePackwerk::Package)
454472
end
455-
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)
456474
allowed_locations = Packs::Specification.config.pack_paths
457475
if allowed_locations.none? { |location| File.fnmatch(location, pack_name) }
458476
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`."
@@ -475,6 +493,7 @@ def self.create_pack_if_not_exists!(pack_name:, enforce_privacy:, enforce_depend
475493
package = ParsePackwerk::Package.new(
476494
enforce_dependencies: should_enforce_dependencies || false,
477495
enforce_privacy: enforce_privacy,
496+
enforce_architecture: enforce_architecture,
478497
dependencies: [],
479498
violations: [],
480499
metadata: {},

packs.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |spec|
22
spec.name = 'packs'
3-
spec.version = '0.0.37'
3+
spec.version = '0.0.38'
44
spec.authors = ['Gusto Engineers']
55
spec.email = ['dev@gusto.com']
66

@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
3131
spec.add_dependency 'code_ownership', '>= 1.33.0'
3232
spec.add_dependency 'packs-specification'
3333
spec.add_dependency 'packwerk'
34-
spec.add_dependency 'parse_packwerk'
34+
spec.add_dependency 'parse_packwerk', '>= 0.22.0'
3535
spec.add_dependency 'rainbow'
3636
spec.add_dependency 'sorbet-runtime'
3737
spec.add_dependency 'thor'

sorbet/rbi/gems/.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**/*.rbi linguist-generated=true

sorbet/rbi/gems/packs-specification@0.0.9.rbi renamed to sorbet/rbi/gems/packs-specification@0.0.10.rbi

Lines changed: 41 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)