packwerk 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/RESOLVING_VIOLATIONS.md +3 -8
- data/TROUBLESHOOT.md +2 -3
- data/UPGRADING.md +12 -0
- data/USAGE.md +5 -13
- data/exe/packwerk +4 -1
- data/lib/packwerk/package_todo.rb +4 -11
- data/lib/packwerk/spring_command.rb +0 -2
- data/lib/packwerk/version.rb +1 -1
- 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: 9af43a5e2d624ca5d6b38bfa3c9e65d1d12b1b9cc148a153563ebd55d3b6c82a
|
4
|
+
data.tar.gz: 6dee0dac16640632fb272c72ebe024a36c6a85ba23748b2ab5886279cccd863c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 197f933a60a46aba470ee66a2c04bbabcf1ff3c3386665551dbb7b8241b9357d73e7576de7edd7c322249b8d45cfc0b282616e0f9a5a665d4560964632a66806
|
7
|
+
data.tar.gz: ec903a206f47df277d6187afc5c17a9cfa1591446afb249f2ba62171f7c56ba8687ce403041db451eb8ea0dba842feb26cc7c32e9ff600b93e60e49eafb4584f
|
data/Gemfile.lock
CHANGED
data/RESOLVING_VIOLATIONS.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
Violations can be [recorded as a deprecation](#recording-violations) or (better!) [eliminated](#eliminating-violations).
|
4
4
|
|
5
5
|
## Recording Violations
|
6
|
-
💡 New
|
6
|
+
💡 New dependency violations are never hard-blocked. There are many very valid reasons to run `bin/packwerk update-todo`, adding new violations to `package_todo.yml` files. Even if you feel your reason might not be "valid," if your judgement says adding the violation and shipping your change will produce positive impact, trust your gut.
|
7
7
|
|
8
8
|
### Emergency Fixes
|
9
9
|
❔ Is it a revert or is there a lot of urgency because you are fixing a production bug impacting customers?
|
@@ -31,7 +31,7 @@ Violations can be [recorded as a deprecation](#recording-violations) or (better!
|
|
31
31
|
➡️ Stay strong. Eliminate the violation. It is important to build a sustainable business that optimizes for the long-term. Look for advocates such as from mentors or within your team who can help you justify improving system design.
|
32
32
|
|
33
33
|
## Eliminating Violations
|
34
|
-
💡 Dependency
|
34
|
+
💡 Dependency violations are Packwerk's signal that what we've stated about the desired system design (what
|
35
35
|
packages exist and what lives in them, the dependencies in a package.yml, and the public interface in the package's public folder) doesn't match the reality of our system.
|
36
36
|
If what we've stated about our system design doesn't feel right, then the violations won't make sense either! Make sure to think through system design before addressing a violation.
|
37
37
|
|
@@ -40,12 +40,7 @@ If what we've stated about our system design doesn't feel right, then the violat
|
|
40
40
|
|
41
41
|
If not, find a better place for it to live.
|
42
42
|
|
43
|
-
Otherwise, follow the guide for eliminating [
|
44
|
-
|
45
|
-
### Privacy Violations
|
46
|
-
💡 Packwerk thinks something is a privacy violation if you're referencing a constant, class, or module defined in the private implementation (i.e. not the public folder) of another package. We care about these because we want to make sure we only use parts of a package that have been exposed as public API.
|
47
|
-
|
48
|
-
An explicit and implementation-hiding public API is a cornerstone of well-modularized code.
|
43
|
+
Otherwise, follow the guide for eliminating [Dependency Violations](#dependency-violations).
|
49
44
|
|
50
45
|
#### Use Existing Public Interface
|
51
46
|
❔ Does the package you're using expose public API in its public folder that supports your use case?
|
data/TROUBLESHOOT.md
CHANGED
@@ -14,9 +14,8 @@ You can specify folders or packages in Packwerk commands for a shorter run time:
|
|
14
14
|
|
15
15
|
bin/packwerk check components/your_package
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
_Note: You cannot specify folders or packages for `bin/packwerk validate` because the command runs for the entire application._
|
17
|
+
_Note: You cannot specify folders or packages for `bin/packwerk validate` and `bin/packwerk update-todo` because the
|
18
|
+
command runs for the entire application._
|
20
19
|
|
21
20
|

|
22
21
|
|
data/UPGRADING.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
# Upgrading from 2.x to 3.0
|
2
|
+
|
3
|
+
In Packwerk 3.0, we've made two notable changes:
|
4
|
+
|
5
|
+
## Renaming deprecated_references to package_todo
|
6
|
+
|
7
|
+
The `update-deprecations` subcommand has been renamed to `update-todo`. Old `deprecated_references.yml` files will be automatically deleted and replaced with `package_todo.yml` files when you run `update-todo`. This behaviour has been in Packwerk [since 2.3.0](https://github.com/Shopify/packwerk/releases/tag/v2.3.0), and automatic deletion will be removed in the next release.
|
8
|
+
|
9
|
+
### Removal of privacy checking
|
10
|
+
|
11
|
+
Privacy checking via `enforce_privacy` has been removed. Developers are encouraged to focus on leveraging Packwerk for dependency checking. For those who still need privacy checks, please use [Gusto's extension gem](https://github.com/rubyatscale/packwerk-extensions).
|
12
|
+
|
1
13
|
# Upgrading from 1.x to 2.0
|
2
14
|
|
3
15
|
With Packwerk 2.0, we made a few changes to simplify the setup. Updating will require removing some previously necessary files and configuration.
|
data/USAGE.md
CHANGED
@@ -144,7 +144,7 @@ Example:
|
|
144
144
|
|
145
145
|
## Types of boundary checks
|
146
146
|
|
147
|
-
Packwerk ships with dependency boundary checking only.
|
147
|
+
Packwerk ships with dependency boundary checking only. Other checking support may be added by extension gems.
|
148
148
|
|
149
149
|
#### Enforcing dependency boundary
|
150
150
|
|
@@ -198,7 +198,7 @@ See: [TROUBLESHOOT.md - Sample violations](TROUBLESHOOT.md#Sample-violations)
|
|
198
198
|
|
199
199
|
### Understanding how to respond to new violations
|
200
200
|
|
201
|
-
When you have a new dependency
|
201
|
+
When you have a new dependency violation, what do you do?
|
202
202
|
|
203
203
|
See: [RESOLVING_VIOLATIONS.md](RESOLVING_VIOLATIONS.md)
|
204
204
|
|
@@ -235,10 +235,10 @@ Above is an example of a constant violation entry in `package_todo.yml`.
|
|
235
235
|
|
236
236
|
* `components/merchant` - package where the constant violation is found
|
237
237
|
* `::Checkouts::Core::CheckoutId` - violated constant in question
|
238
|
-
* `dependency` - type of violation,
|
238
|
+
* `dependency` - type of violation, typically dependency
|
239
239
|
* `components/merchant/app/public/merchant/generate_order.rb` - path to the file containing the violated constant
|
240
240
|
|
241
|
-
Violations exist within the package that makes a violating reference.
|
241
|
+
Violations exist within the package that makes a violating reference.
|
242
242
|
|
243
243
|
# Loading Extensions
|
244
244
|
|
@@ -284,7 +284,7 @@ bin/packwerk check --offenses-formatter=my_offenses_formatter
|
|
284
284
|
|
285
285
|
### Custom Checkers
|
286
286
|
|
287
|
-
Packwerk ships with a way to analyze dependencies and also supports custom checkers
|
287
|
+
Packwerk ships with a way to analyze dependencies and also supports custom checkers from extension gems.
|
288
288
|
|
289
289
|
Custom checkers will allow references to constants to be analyzed in new ways, and for those invalid references to show up as violations in `package_todo.yml`.
|
290
290
|
|
@@ -327,14 +327,6 @@ require:
|
|
327
327
|
- ./path/to/file.rb
|
328
328
|
```
|
329
329
|
|
330
|
-
#### Privacy Checker
|
331
|
-
|
332
|
-
[`packwerk-extensions`](https://github.com/rubyatscale/packwerk-extensions) (originally extracted from `packwerk`) can be used to help define and enforce public API boundaries of a package. See the README.md for more details. To use this, add it to your `Gemfile` and then require it via `packwerk.yml`:
|
333
|
-
```yml
|
334
|
-
require:
|
335
|
-
- packwerk-extensions
|
336
|
-
```
|
337
|
-
|
338
330
|
### Custom Validators
|
339
331
|
|
340
332
|
Similar to checkers, you can define your own validator to be executed when `bin/packwerk validate` is invoked. This can be used to support your custom checker (by specifying permitted keys) or to provide any other validations you want to impose on packages.
|
data/exe/packwerk
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
unless defined?(Spring)
|
5
|
+
require "packwerk/disable_sorbet"
|
6
|
+
end
|
7
|
+
|
5
8
|
require "packwerk"
|
6
9
|
|
7
10
|
# Needs to be run in test environment in order to have test helper paths available in the autoload paths
|
@@ -91,19 +91,18 @@ module Packwerk
|
|
91
91
|
|
92
92
|
sig { void }
|
93
93
|
def dump
|
94
|
-
delete_old_deprecated_references
|
95
|
-
|
96
94
|
if @new_entries.empty?
|
97
95
|
delete_if_exists
|
98
96
|
else
|
99
97
|
prepare_entries_for_dump
|
100
98
|
message = <<~MESSAGE
|
101
|
-
# This file contains a list of dependencies that are not part of the long term plan for
|
102
|
-
#
|
99
|
+
# This file contains a list of dependencies that are not part of the long term plan for the
|
100
|
+
# '#{@package.name}' package.
|
101
|
+
# We should generally work to reduce this list over time.
|
103
102
|
#
|
104
103
|
# You can regenerate this file using the following command:
|
105
104
|
#
|
106
|
-
# bin/packwerk update-todo
|
105
|
+
# bin/packwerk update-todo
|
107
106
|
MESSAGE
|
108
107
|
File.open(@filepath, "w") do |f|
|
109
108
|
f.write(message)
|
@@ -119,12 +118,6 @@ module Packwerk
|
|
119
118
|
|
120
119
|
private
|
121
120
|
|
122
|
-
sig { void }
|
123
|
-
def delete_old_deprecated_references
|
124
|
-
deprecated_references_filepath = File.join(File.dirname(@filepath), "deprecated_references.yml")
|
125
|
-
File.delete(deprecated_references_filepath) if File.exist?(deprecated_references_filepath)
|
126
|
-
end
|
127
|
-
|
128
121
|
sig { returns(EntriesType) }
|
129
122
|
def prepare_entries_for_dump
|
130
123
|
@new_entries.each do |package_name, package_violations|
|
data/lib/packwerk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packwerk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|