Skip to content

Commit 3e81ed8

Browse files
schoblaskaperryqhashleywillard
authored
add enforce_architecture to pack configs if extension is enabled (#39)
* add enforce_architecture to pack configs if extension is enabled * bump version (0.21.0 -> 0.22.0) Co-authored-by: Perry Hertler <perry.hertler@gusto.com> Co-authored-by: Ashley Willard <ashley.willard@gusto.com> --------- Co-authored-by: Perry Hertler <perry.hertler@gusto.com> Co-authored-by: Ashley Willard <ashley.willard@gusto.com>
1 parent 0a3cdad commit 3e81ed8

7 files changed

Lines changed: 32 additions & 5 deletions

File tree

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
parse_packwerk (0.21.0)
4+
parse_packwerk (0.22.0)
55
sorbet-runtime
66

77
GEM

lib/parse_packwerk.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ def self.write_package_yml!(package)
7272
merged_config.merge!('enforce_privacy' => package.enforce_privacy)
7373
end
7474

75+
if Extensions.architecture_extension_installed?
76+
merged_config.merge!('enforce_architecture' => package.enforce_architecture)
77+
end
78+
7579
unless package.public_path == DEFAULT_PUBLIC_PATH
7680
merged_config.merge!('public_path' => package.public_path)
7781
end

lib/parse_packwerk/constants.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module ParsePackwerk
77
PACKAGE_TODO_YML_NAME = T.let('package_todo.yml'.freeze, String)
88
ENFORCE_DEPENDENCIES = T.let('enforce_dependencies'.freeze, String)
99
ENFORCE_PRIVACY = T.let('enforce_privacy'.freeze, String)
10+
ENFORCE_ARCHITECTURE = T.let('enforce_architecture'.freeze, String)
1011
DEPENDENCY_VIOLATION_TYPE = T.let('dependency'.freeze, String)
1112
PRIVACY_VIOLATION_TYPE = T.let('privacy'.freeze, String)
1213
PUBLIC_PATH = T.let('public_path'.freeze, String)

lib/parse_packwerk/extensions.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ def self.all_extensions_installed?
1313
def self.privacy_extension_installed?
1414
all_extensions_installed? || ParsePackwerk.yml.requires.include?('packwerk/privacy/checker')
1515
end
16+
17+
sig { returns(T::Boolean) }
18+
def self.architecture_extension_installed?
19+
all_extensions_installed? || ParsePackwerk.yml.requires.include?('packwerk/architecture/checker')
20+
end
1621
end
1722

1823
private_constant :Extensions

lib/parse_packwerk/package.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class Package < T::Struct
77
const :name, String
88
const :enforce_dependencies, T.nilable(T.any(T::Boolean, String))
99
const :enforce_privacy, T.any(T::Boolean, String), default: false
10+
const :enforce_architecture, T.any(T::Boolean, String), default: false
1011
const :public_path, String, default: DEFAULT_PUBLIC_PATH
1112
const :metadata, MetadataYmlType
1213
const :dependencies, T::Array[String]
@@ -26,6 +27,7 @@ def self.from(pathname)
2627
name: package_name,
2728
enforce_dependencies: package_loaded_yml[ENFORCE_DEPENDENCIES],
2829
enforce_privacy: package_loaded_yml[ENFORCE_PRIVACY] || false,
30+
enforce_architecture: package_loaded_yml[ENFORCE_ARCHITECTURE] || false,
2931
public_path: package_loaded_yml[PUBLIC_PATH] || DEFAULT_PUBLIC_PATH,
3032
metadata: package_loaded_yml[METADATA] || {},
3133
dependencies: package_loaded_yml[DEPENDENCIES] || [],
@@ -63,5 +65,10 @@ def enforces_dependencies?
6365
def enforces_privacy?
6466
enforce_privacy
6567
end
68+
69+
sig { returns(T.any(T::Boolean, String)) }
70+
def enforces_architecture?
71+
enforce_architecture
72+
end
6673
end
6774
end

parse_packwerk.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |spec|
22
spec.name = 'parse_packwerk'
3-
spec.version = '0.21.0'
3+
spec.version = '0.22.0'
44
spec.authors = ['Gusto Engineers']
55
spec.email = ['dev@gusto.com']
66
spec.summary = 'A low-dependency gem for parsing and writing packwerk YML files'

spec/parse_packwerk_spec.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -967,11 +967,12 @@
967967
let(:package_yml) { package_dir.join('package.yml') }
968968
let(:package_todo_yml) { package_dir.join('package_todo.yml') }
969969

970-
def build_pack(public_path: 'app/public', enforce_privacy: true, dependencies: [], metadata: {}, config: {})
970+
def build_pack(public_path: 'app/public', enforce_privacy: true, enforce_architecture: true, dependencies: [], metadata: {}, config: {})
971971
ParsePackwerk::Package.new(
972972
name: package_dir.to_s,
973973
enforce_dependencies: true,
974974
enforce_privacy: enforce_privacy,
975+
enforce_architecture: enforce_architecture,
975976
public_path: public_path,
976977
dependencies: dependencies,
977978
metadata: metadata,
@@ -985,6 +986,7 @@ def pack_as_hash(package)
985986
name: package.name,
986987
enforce_dependencies: package.enforce_dependencies,
987988
enforce_privacy: package.enforce_privacy,
989+
enforce_architecture: package.enforce_architecture,
988990
dependencies: package.dependencies,
989991
metadata: package.metadata
990992
}
@@ -998,6 +1000,7 @@ def pack_as_hash(package)
9981000
expect(package_yml.read).to eq <<~PACKAGEYML
9991001
enforce_dependencies: true
10001002
enforce_privacy: true
1003+
enforce_architecture: true
10011004
PACKAGEYML
10021005

10031006
expect(all_packages.count).to eq 1
@@ -1015,6 +1018,7 @@ def pack_as_hash(package)
10151018
expect(package_yml.read).to eq <<~PACKAGEYML
10161019
enforce_dependencies: true
10171020
enforce_privacy: true
1021+
enforce_architecture: true
10181022
public_path: other/path
10191023
PACKAGEYML
10201024

@@ -1033,6 +1037,7 @@ def pack_as_hash(package)
10331037
expect(package_yml.read).to eq <<~PACKAGEYML
10341038
enforce_dependencies: true
10351039
enforce_privacy: strict
1040+
enforce_architecture: true
10361041
PACKAGEYML
10371042

10381043
expect(all_packages.count).to eq 1
@@ -1050,6 +1055,7 @@ def pack_as_hash(package)
10501055
expect(package_yml.read).to eq <<~PACKAGEYML
10511056
enforce_dependencies: true
10521057
enforce_privacy: true
1058+
enforce_architecture: true
10531059
dependencies:
10541060
- my_other_pack1
10551061
- my_other_pack2
@@ -1074,6 +1080,7 @@ def pack_as_hash(package)
10741080
expect(package_yml.read).to eq <<~PACKAGEYML
10751081
enforce_dependencies: true
10761082
enforce_privacy: true
1083+
enforce_architecture: true
10771084
metadata:
10781085
owner: Mission > Team
10791086
protections:
@@ -1090,6 +1097,7 @@ def pack_as_hash(package)
10901097
write_file(package_yml, <<~CONTENTS)
10911098
enforce_dependencies: true
10921099
enforce_privacy: true
1100+
enforce_architecture: true
10931101
public_path: other/path
10941102
dependencies:
10951103
- packs/package2
@@ -1108,6 +1116,7 @@ def pack_as_hash(package)
11081116
expect(package_yml.read).to eq <<~PACKAGEYML
11091117
enforce_dependencies: true
11101118
enforce_privacy: true
1119+
enforce_architecture: true
11111120
public_path: other/path
11121121
PACKAGEYML
11131122
end
@@ -1128,6 +1137,7 @@ def pack_as_hash(package)
11281137
expect(package_yml.read).to eq <<~PACKAGEYML
11291138
enforce_dependencies: true
11301139
enforce_privacy: true
1140+
enforce_architecture: true
11311141
my_special_key:
11321142
blah: 1
11331143
my_other_special_key: true
@@ -1138,12 +1148,12 @@ def pack_as_hash(package)
11381148
end
11391149
end
11401150

1141-
context 'app does not use privacy checker' do
1151+
context 'app does not use extensions' do
11421152
let(:write_packwerk_yml) do
11431153
write_file('packwerk.yml', '{}')
11441154
end
11451155

1146-
let(:package) { build_pack(enforce_privacy: false) }
1156+
let(:package) { build_pack(enforce_privacy: false, enforce_architecture: false) }
11471157

11481158
it 'writes the right package' do
11491159
ParsePackwerk.write_package_yml!(package)

0 commit comments

Comments
 (0)