@openzeppelin/upgrades-core 1.36.0 → 1.37.0

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.
Files changed (36) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/cli/cli.test.js +99 -1
  3. package/dist/cli/cli.test.js.map +1 -1
  4. package/dist/cli/validate/contract-report.d.ts +2 -1
  5. package/dist/cli/validate/contract-report.d.ts.map +1 -1
  6. package/dist/cli/validate/contract-report.js +43 -8
  7. package/dist/cli/validate/contract-report.js.map +1 -1
  8. package/dist/cli/validate/default-exclude.d.ts +2 -0
  9. package/dist/cli/validate/default-exclude.d.ts.map +1 -0
  10. package/dist/cli/validate/default-exclude.js +6 -0
  11. package/dist/cli/validate/default-exclude.js.map +1 -0
  12. package/dist/cli/validate/validate-upgrade-safety.d.ts +2 -1
  13. package/dist/cli/validate/validate-upgrade-safety.d.ts.map +1 -1
  14. package/dist/cli/validate/validate-upgrade-safety.js +3 -2
  15. package/dist/cli/validate/validate-upgrade-safety.js.map +1 -1
  16. package/dist/cli/validate.d.ts +1 -0
  17. package/dist/cli/validate.d.ts.map +1 -1
  18. package/dist/cli/validate.js +38 -16
  19. package/dist/cli/validate.js.map +1 -1
  20. package/dist/cli/validate.test.js +20 -0
  21. package/dist/cli/validate.test.js.map +1 -1
  22. package/dist/storage/extract.js +1 -1
  23. package/dist/storage/extract.js.map +1 -1
  24. package/dist/utils/annotations.js +1 -1
  25. package/dist/utils/annotations.js.map +1 -1
  26. package/package.json +4 -3
  27. package/src/cli/cli.test.ts +141 -1
  28. package/src/cli/cli.test.ts.md +136 -4
  29. package/src/cli/cli.test.ts.snap +0 -0
  30. package/src/cli/validate/contract-report.ts +59 -9
  31. package/src/cli/validate/default-exclude.ts +3 -0
  32. package/src/cli/validate/validate-upgrade-safety.ts +3 -1
  33. package/src/cli/validate.test.ts +22 -0
  34. package/src/cli/validate.ts +43 -16
  35. package/src/storage/extract.ts +2 -1
  36. package/src/utils/annotations.ts +1 -1
@@ -22,15 +22,16 @@ Options:
22
22
  --contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.
23
23
  --reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.
24
24
  --requireReference Can only be used when the --contract option is also provided. Not compatible with --unsafeSkipStorageCheck. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.
25
- --referenceBuildInfoDirs Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory.
26
- --unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: ${run_1.errorKinds.join(', ')}
25
+ --referenceBuildInfoDirs "<BUILD_INFO_DIR>[,<BUILD_INFO_DIR>...]" Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory. If passing in multiple directories, separate them with commas or call the option multiple times, once for each directory.
26
+ --exclude "<GLOB_PATTERN>" [--exclude "<GLOB_PATTERN>"...] Exclude validations for contracts in source file paths that match any of the given glob patterns. For example, --exclude "contracts/mocks/**/*.sol". Does not apply to reference contracts. If passing in multiple patterns, call the option multiple times, once for each pattern.
27
+ --unsafeAllow "<VALIDATION_ERROR>[,<VALIDATION_ERROR>...]" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: ${run_1.errorKinds.join(', ')}
27
28
  --unsafeAllowRenames Configure storage layout check to allow variable renaming.
28
29
  --unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.`;
29
30
  async function main(args) {
30
31
  const { parsedArgs, extraArgs } = parseArgs(args);
31
32
  if (!help(parsedArgs, extraArgs)) {
32
33
  const functionArgs = getFunctionArgs(parsedArgs, extraArgs);
33
- const result = await (0, _1.validateUpgradeSafety)(functionArgs.buildInfoDir, functionArgs.contract, functionArgs.reference, functionArgs.opts, functionArgs.referenceBuildInfoDirs);
34
+ const result = await (0, _1.validateUpgradeSafety)(functionArgs.buildInfoDir, functionArgs.contract, functionArgs.reference, functionArgs.opts, functionArgs.referenceBuildInfoDirs, functionArgs.exclude);
34
35
  console.log(result.explain());
35
36
  process.exitCode = result.ok ? 0 : 1;
36
37
  }
@@ -45,7 +46,7 @@ function parseArgs(args) {
45
46
  'unsafeAllowLinkedLibraries',
46
47
  'requireReference',
47
48
  ],
48
- string: ['unsafeAllow', 'contract', 'reference', 'referenceBuildInfoDirs'],
49
+ string: ['unsafeAllow', 'contract', 'reference', 'referenceBuildInfoDirs', 'exclude'],
49
50
  alias: { h: 'help' },
50
51
  });
51
52
  const extraArgs = parsedArgs._;
@@ -82,7 +83,8 @@ function getFunctionArgs(parsedArgs, extraArgs) {
82
83
  const contract = getAndValidateString(parsedArgs, 'contract');
83
84
  const reference = getAndValidateString(parsedArgs, 'reference');
84
85
  const opts = withDefaults(parsedArgs);
85
- const referenceBuildInfoDirs = getAndValidateString(parsedArgs, 'referenceBuildInfoDirs')?.split(/,+/);
86
+ const referenceBuildInfoDirs = getAndValidateStringArray(parsedArgs, 'referenceBuildInfoDirs', true);
87
+ const exclude = getAndValidateStringArray(parsedArgs, 'exclude', false);
86
88
  if (contract === undefined) {
87
89
  if (reference !== undefined) {
88
90
  throw new Error('The --reference option can only be used along with the --contract option.');
@@ -91,16 +93,39 @@ function getFunctionArgs(parsedArgs, extraArgs) {
91
93
  throw new Error('The --requireReference option can only be used along with the --contract option.');
92
94
  }
93
95
  }
94
- return { buildInfoDir, contract, reference, opts, referenceBuildInfoDirs };
96
+ return { buildInfoDir, contract, reference, opts, referenceBuildInfoDirs, exclude };
95
97
  }
96
98
  }
97
99
  function getAndValidateString(parsedArgs, option) {
98
100
  const value = parsedArgs[option];
99
- if (value !== undefined && value.trim().length === 0) {
100
- throw new Error(`Invalid option: --${option} cannot be empty`);
101
+ if (value !== undefined) {
102
+ assertNonEmptyString(value, option);
101
103
  }
102
104
  return value;
103
105
  }
106
+ function getAndValidateStringArray(parsedArgs, option, useCommaDelimiter) {
107
+ const value = parsedArgs[option];
108
+ if (value !== undefined) {
109
+ if (Array.isArray(value)) {
110
+ return value;
111
+ }
112
+ else {
113
+ assertNonEmptyString(value, option);
114
+ if (useCommaDelimiter) {
115
+ return value.split(/[\s,]+/);
116
+ }
117
+ else {
118
+ return [value];
119
+ }
120
+ }
121
+ }
122
+ return value;
123
+ }
124
+ function assertNonEmptyString(value, option) {
125
+ if (typeof value !== 'string' || value.trim().length === 0) {
126
+ throw new Error(`Invalid option: --${option} cannot be empty`);
127
+ }
128
+ }
104
129
  function validateOptions(parsedArgs) {
105
130
  const invalidArgs = Object.keys(parsedArgs).filter(key => ![
106
131
  'help',
@@ -115,19 +140,16 @@ function validateOptions(parsedArgs) {
115
140
  'reference',
116
141
  'requireReference',
117
142
  'referenceBuildInfoDirs',
143
+ 'exclude',
118
144
  ].includes(key));
119
145
  if (invalidArgs.length > 0) {
120
146
  throw new Error(`Invalid options: ${invalidArgs.join(', ')}`);
121
147
  }
122
148
  }
123
- function getUnsafeAllowKinds(unsafeAllow) {
124
- if (unsafeAllow === undefined) {
125
- return [];
126
- }
127
- const unsafeAllowTokens = unsafeAllow.split(/[\s,]+/);
149
+ function getUnsafeAllowKinds(parseArgs) {
150
+ const unsafeAllowTokens = getAndValidateStringArray(parseArgs, 'unsafeAllow', true) ?? [];
128
151
  if (unsafeAllowTokens.some(token => !run_1.errorKinds.includes(token))) {
129
- // This includes empty strings
130
- throw new Error(`Invalid option: --unsafeAllow "${unsafeAllow}". Supported values for the --unsafeAllow option are: ${run_1.errorKinds.join(', ')}`);
152
+ throw new Error(`Invalid option: --unsafeAllow "${parseArgs['unsafeAllow']}". Supported values for the --unsafeAllow option are: ${run_1.errorKinds.join(', ')}`);
131
153
  }
132
154
  return unsafeAllowTokens;
133
155
  }
@@ -138,7 +160,7 @@ function withDefaults(parsedArgs) {
138
160
  unsafeSkipStorageCheck: parsedArgs['unsafeSkipStorageCheck'],
139
161
  unsafeAllowCustomTypes: parsedArgs['unsafeAllowCustomTypes'],
140
162
  unsafeAllowLinkedLibraries: parsedArgs['unsafeAllowLinkedLibraries'],
141
- unsafeAllow: getUnsafeAllowKinds(parsedArgs['unsafeAllow']),
163
+ unsafeAllow: getUnsafeAllowKinds(parsedArgs),
142
164
  requireReference: parsedArgs['requireReference'],
143
165
  };
144
166
  return (0, validate_upgrade_safety_1.withCliDefaults)(allOpts);
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
@@ -105,4 +105,24 @@ ava_1.default.afterEach.always(() => {
105
105
  message: `Invalid option: --unsafeAllow "foo". Supported values for the --unsafeAllow option are: ${run_1.errorKinds.join(', ')}`,
106
106
  });
107
107
  });
108
+ (0, ava_1.default)('withDefaults - empty unsafeAllow', t => {
109
+ const parsedArgs = (0, minimist_1.default)(['validate', 'build-info.json', '--unsafeAllow']);
110
+ t.throws(() => (0, validate_1.withDefaults)(parsedArgs), {
111
+ message: `Invalid option: --unsafeAllow cannot be empty`,
112
+ });
113
+ });
114
+ (0, ava_1.default)('withDefaults - unsafeAllow multiple times', t => {
115
+ const parsedArgs = (0, minimist_1.default)([
116
+ 'validate',
117
+ 'build-info.json',
118
+ '--unsafeAllow',
119
+ 'selfdestruct',
120
+ '--unsafeAllow',
121
+ 'delegatecall',
122
+ '--unsafeAllow',
123
+ 'constructor',
124
+ ]);
125
+ const opts = (0, validate_1.withDefaults)(parsedArgs);
126
+ t.deepEqual(opts.unsafeAllow, ['selfdestruct', 'delegatecall', 'constructor']);
127
+ });
108
128
  //# sourceMappingURL=validate.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/cli/validate.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAuB;AAEvB,wDAAgC;AAChC,yCAA2D;AAC3D,kDAA0B;AAC1B,yCAA6C;AAE7C,aAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE;IACzB,eAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,mCAAmC,EAAE,CAAC,CAAC,EAAE;IAC5C,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,UAAU,EAAE,SAAS,CAAC,EAAE;QACrD,OAAO,EAAE,4DAA4D;KACtE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,mCAAmC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClD,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,UAAU,EAAE,SAAS,CAAC,EAAE;QACrD,OAAO,EAAE,2BAA2B;KACrC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,gCAAgC,EAAE,CAAC,CAAC,EAAE;IACzC,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAA,0BAAe,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,oCAAoC,EAAE,CAAC,CAAC,EAAE;IAC7C,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAA,0BAAe,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QACnD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE;IAC/B,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE;IAC9B,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC;QAC1B,UAAU;QACV,iBAAiB;QACjB,sBAAsB;QACtB,eAAe;QACf,wCAAwC;KACzC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE;IAC7B,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC;QAC1B,UAAU;QACV,iBAAiB;QACjB,sBAAsB;QACtB,0BAA0B;QAC1B,0BAA0B;QAC1B,8BAA8B;QAC9B,eAAe;QACf,GAAG,gBAAU;KACd,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,gBAAU,CAAC,QAAQ,CAAC,IAAmC,CAAC,CAAC,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,oCAAoC,EAAE,CAAC,CAAC,EAAE;IAC7C,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,UAAU,CAAC,EAAE;QACvC,OAAO,EAAE,2FAA2F,gBAAU,CAAC,IAAI,CACjH,IAAI,CACL,EAAE;KACJ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/cli/validate.test.ts"],"names":[],"mappings":"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"}
@@ -155,7 +155,7 @@ function loadLayoutType(typeName, layout, deref) {
155
155
  function getRetypedRenamed(varDecl) {
156
156
  let retypedFrom, renamedFrom;
157
157
  if ('documentation' in varDecl) {
158
- const docs = typeof varDecl.documentation === 'string' ? varDecl.documentation : varDecl.documentation?.text ?? '';
158
+ const docs = typeof varDecl.documentation === 'string' ? varDecl.documentation : (varDecl.documentation?.text ?? '');
159
159
  for (const { groups } of (0, execall_1.execall)(/^\s*(?:@(?<title>\w+)(?::(?<tag>[a-z][a-z-]*))? )?(?<args>(?:(?!^\s@\w+)[^])*)/m, docs)) {
160
160
  if (groups?.title === 'custom') {
161
161
  if (groups.tag === 'oz-retyped-from') {
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/storage/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/storage/extract.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,7 @@ function getAnnotationArgs(doc, tag, supportedArgs) {
44
44
  */
45
45
  function getDocumentation(node) {
46
46
  if ('documentation' in node) {
47
- return typeof node.documentation === 'string' ? node.documentation : node.documentation?.text ?? '';
47
+ return typeof node.documentation === 'string' ? node.documentation : (node.documentation?.text ?? '');
48
48
  }
49
49
  else {
50
50
  return '';
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":";;AAMA,4CAGC;AASD,8CAuBC;AAOD,4CAMC;AAtDD,uCAAoC;AAGpC;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAW,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iBAAiB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,GAAW,EAAE,aAAiC;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAA,iBAAO,EAC9B,kFAAkF,EAClF,GAAG,CACJ,EAAE,CAAC;QACF,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,6BAA6B,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU;IACzC,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC;IACtG,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":";;AAMA,4CAGC;AASD,8CAuBC;AAOD,4CAMC;AAtDD,uCAAoC;AAGpC;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAW,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iBAAiB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,GAAW,EAAE,aAAiC;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAA,iBAAO,EAC9B,kFAAkF,EAClF,GAAG,CACJ,EAAE,CAAC;QACF,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,6BAA6B,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU;IACzC,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openzeppelin/upgrades-core",
3
- "version": "1.36.0",
3
+ "version": "1.37.0",
4
4
  "description": "",
5
5
  "repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
6
6
  "license": "MIT",
@@ -61,7 +61,7 @@
61
61
  "typescript": "^5.0.0"
62
62
  },
63
63
  "dependencies": {
64
- "@nomicfoundation/slang": "^0.16.0",
64
+ "@nomicfoundation/slang": "^0.17.0",
65
65
  "cbor": "^9.0.0",
66
66
  "chalk": "^4.1.0",
67
67
  "compare-versions": "^6.0.0",
@@ -69,6 +69,7 @@
69
69
  "ethereumjs-util": "^7.0.3",
70
70
  "minimist": "^1.2.7",
71
71
  "proper-lockfile": "^4.1.1",
72
- "solidity-ast": "^0.4.51"
72
+ "solidity-ast": "^0.4.51",
73
+ "minimatch": "^9.0.5"
73
74
  }
74
75
  }
@@ -444,7 +444,7 @@ test('validate - references other build info dir by command with fully qualified
444
444
  t.snapshot(expectation.join('\n'));
445
445
  });
446
446
 
447
- test('validate - references multiple build info dirs by annotation', async t => {
447
+ async function setupMultipleBuildInfoDirsTest(t: ExecutionContext<unknown>) {
448
448
  const temp = await getTempDir(t);
449
449
 
450
450
  const v1Dir = path.join(temp, 'build-info-v1');
@@ -467,6 +467,11 @@ test('validate - references multiple build info dirs by annotation', async t =>
467
467
  );
468
468
  await fs.writeFile(path.join(v2BranchDir, 'ok.json'), JSON.stringify(v2BranchBuildInfoOk));
469
469
  await fs.writeFile(path.join(v2BranchDir, 'bad.json'), JSON.stringify(v2BranchBuildInfoBad));
470
+ return { v2BranchDir, v1Dir, v2Dir };
471
+ }
472
+
473
+ test('validate - references multiple build info dirs by annotation', async t => {
474
+ const { v2BranchDir, v1Dir, v2Dir } = await setupMultipleBuildInfoDirsTest(t);
470
475
 
471
476
  const error = await t.throwsAsync(
472
477
  execAsync(`${CLI} validate ${v2BranchDir} --referenceBuildInfoDirs ${v1Dir},${v2Dir}`),
@@ -475,6 +480,16 @@ test('validate - references multiple build info dirs by annotation', async t =>
475
480
  t.snapshot(expectation.join('\n'));
476
481
  });
477
482
 
483
+ test('validate - references multiple build info dirs by annotation - same arg multiple times', async t => {
484
+ const { v2BranchDir, v1Dir, v2Dir } = await setupMultipleBuildInfoDirsTest(t);
485
+
486
+ const error = await t.throwsAsync(
487
+ execAsync(`${CLI} validate ${v2BranchDir} --referenceBuildInfoDirs ${v1Dir} --referenceBuildInfoDirs ${v2Dir}`),
488
+ );
489
+ const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
490
+ t.snapshot(expectation.join('\n'));
491
+ });
492
+
478
493
  test('validate - references other build info dir by annotation - ok', async t => {
479
494
  const temp = await getTempDir(t);
480
495
  const referenceDir = path.join(temp, 'build-info-v1');
@@ -572,3 +587,128 @@ test('validate - contract must not have build info dir name - fully qualified',
572
587
  error?.message,
573
588
  );
574
589
  });
590
+
591
+ test('validate - excludes by pattern - no match', async t => {
592
+ const temp = await getTempDir(t);
593
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS`);
594
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
595
+
596
+ const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --exclude "**/NoMatch.sol"`));
597
+ const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
598
+ t.snapshot(expectation.join('\n'));
599
+ });
600
+
601
+ test('validate - excludes by pattern - some match', async t => {
602
+ const temp = await getTempDir(t);
603
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS`);
604
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
605
+
606
+ const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --exclude "**/Abstract*.sol"`));
607
+ const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
608
+ t.snapshot(expectation.join('\n'));
609
+ });
610
+
611
+ test('validate - excludes by pattern - all match', async t => {
612
+ const temp = await getTempDir(t);
613
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS`);
614
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
615
+
616
+ const output = await execAsync(`${CLI} validate ${temp} --exclude "**/excludes/*.sol"`);
617
+ t.snapshot(output);
618
+ });
619
+
620
+ test('validate - excludes by pattern - all match using commas within glob', async t => {
621
+ const temp = await getTempDir(t);
622
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS`);
623
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
624
+
625
+ const output = await execAsync(`${CLI} validate ${temp} --exclude "**/excludes/{Abstract*,UsesAbstractUUPS}.sol"`);
626
+ t.snapshot(output);
627
+ });
628
+
629
+ test('validate - exclude passed multiple times', async t => {
630
+ const temp = await getTempDir(t);
631
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS`);
632
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
633
+
634
+ const output = await execAsync(
635
+ `${CLI} validate ${temp} --exclude "**/excludes/Abstract*.sol" --exclude "**/UsesAbstractUUPS.sol"`,
636
+ );
637
+ t.snapshot(output);
638
+ });
639
+
640
+ test('validate - excludes specified contract', async t => {
641
+ const temp = await getTempDir(t);
642
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:BecomesBadLayout`);
643
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
644
+
645
+ const error = await t.throwsAsync(
646
+ execAsync(`${CLI} validate ${temp} --contract BecomesBadLayout --reference StorageV1 --exclude "**/Validate.sol"`),
647
+ );
648
+ t.true(
649
+ error?.message.includes('No validation report found for contract contracts/test/cli/Validate.sol:BecomesBadLayout'),
650
+ error?.message,
651
+ );
652
+ });
653
+
654
+ test('validate - excludes UpgradeableBeacon and its parents by default', async t => {
655
+ const temp = await getTempDir(t);
656
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/ImportVersionsAndBeacon.sol:Dummy`);
657
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
658
+
659
+ const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp}`));
660
+ const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
661
+ t.snapshot(expectation.join('\n'));
662
+ });
663
+
664
+ test('validate - excludes UpgradeableBeacon and its parents by default, and excludes one contract from layout comparisions', async t => {
665
+ const temp = await getTempDir(t);
666
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/excludes/ImportVersionsAndBeacon.sol:Dummy`);
667
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
668
+
669
+ const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --exclude "**/V2Bad1.sol"`));
670
+ const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
671
+ t.snapshot(expectation.join('\n'));
672
+ });
673
+
674
+ test('validate - self reference by annotation', async t => {
675
+ const temp = await getTempDir(t);
676
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/SelfReferences.sol:SelfReference`);
677
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
678
+
679
+ const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract SelfReference`));
680
+ t.assert(error?.message.includes('must not use itself as a reference'), error?.message);
681
+ });
682
+
683
+ test('validate - self reference by fully qualified annotation', async t => {
684
+ const temp = await getTempDir(t);
685
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/SelfReferences.sol:SelfReference`);
686
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
687
+
688
+ const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract SelfReferenceFullyQualified`));
689
+ t.assert(error?.message.includes('must not use itself as a reference'), error?.message);
690
+ });
691
+
692
+ test('validate - self reference by option', async t => {
693
+ const temp = await getTempDir(t);
694
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/SelfReferences.sol:SelfReference`);
695
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
696
+
697
+ const error = await t.throwsAsync(
698
+ execAsync(`${CLI} validate ${temp} --contract NoAnnotation --reference NoAnnotation`),
699
+ );
700
+ t.assert(error?.message.includes('must not use itself as a reference'), error?.message);
701
+ });
702
+
703
+ test('validate - self reference by fully qualified option', async t => {
704
+ const temp = await getTempDir(t);
705
+ const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/SelfReferences.sol:SelfReference`);
706
+ await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
707
+
708
+ const error = await t.throwsAsync(
709
+ execAsync(
710
+ `${CLI} validate ${temp} --contract NoAnnotation --reference contracts/test/cli/SelfReferences.sol:NoAnnotation`,
711
+ ),
712
+ );
713
+ t.assert(error?.message.includes('must not use itself as a reference'), error?.message);
714
+ });
@@ -19,8 +19,9 @@ Generated by [AVA](https://avajs.dev).
19
19
  --contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.␊
20
20
  --reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.␊
21
21
  --requireReference Can only be used when the --contract option is also provided. Not compatible with --unsafeSkipStorageCheck. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.␊
22
- --referenceBuildInfoDirs Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory.␊
23
- --unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: state-variable-assignment, state-variable-immutable, external-library-linking, struct-definition, enum-definition, constructor, delegatecall, selfdestruct, missing-public-upgradeto, internal-function-storage␊
22
+ --referenceBuildInfoDirs "<BUILD_INFO_DIR>[,<BUILD_INFO_DIR>...]" Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory. If passing in multiple directories, separate them with commas or call the option multiple times, once for each directory.␊
23
+ --exclude "<GLOB_PATTERN>" [--exclude "<GLOB_PATTERN>"...] Exclude validations for contracts in source file paths that match any of the given glob patterns. For example, --exclude "contracts/mocks/**/*.sol". Does not apply to reference contracts. If passing in multiple patterns, call the option multiple times, once for each pattern.␊
24
+ --unsafeAllow "<VALIDATION_ERROR>[,<VALIDATION_ERROR>...]" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: state-variable-assignment, state-variable-immutable, external-library-linking, struct-definition, enum-definition, constructor, delegatecall, selfdestruct, missing-public-upgradeto, internal-function-storage␊
24
25
  --unsafeAllowRenames Configure storage layout check to allow variable renaming.␊
25
26
  --unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.␊
26
27
  `
@@ -40,8 +41,9 @@ Generated by [AVA](https://avajs.dev).
40
41
  --contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.␊
41
42
  --reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.␊
42
43
  --requireReference Can only be used when the --contract option is also provided. Not compatible with --unsafeSkipStorageCheck. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.␊
43
- --referenceBuildInfoDirs Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory.␊
44
- --unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: state-variable-assignment, state-variable-immutable, external-library-linking, struct-definition, enum-definition, constructor, delegatecall, selfdestruct, missing-public-upgradeto, internal-function-storage␊
44
+ --referenceBuildInfoDirs "<BUILD_INFO_DIR>[,<BUILD_INFO_DIR>...]" Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory. If passing in multiple directories, separate them with commas or call the option multiple times, once for each directory.␊
45
+ --exclude "<GLOB_PATTERN>" [--exclude "<GLOB_PATTERN>"...] Exclude validations for contracts in source file paths that match any of the given glob patterns. For example, --exclude "contracts/mocks/**/*.sol". Does not apply to reference contracts. If passing in multiple patterns, call the option multiple times, once for each pattern.␊
46
+ --unsafeAllow "<VALIDATION_ERROR>[,<VALIDATION_ERROR>...]" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: state-variable-assignment, state-variable-immutable, external-library-linking, struct-definition, enum-definition, constructor, delegatecall, selfdestruct, missing-public-upgradeto, internal-function-storage␊
45
47
  --unsafeAllowRenames Configure storage layout check to allow variable renaming.␊
46
48
  --unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.␊
47
49
  `
@@ -383,6 +385,20 @@ Generated by [AVA](https://avajs.dev).
383
385
 
384
386
  ## validate - references multiple build info dirs by annotation
385
387
 
388
+ > Snapshot 1
389
+
390
+ `Stdout: ✘ contracts/test/cli/ValidateBuildInfoV2_Branch_Bad.sol:MyContract (upgrades from build-info-v2:contracts/test/cli/ValidateBuildInfoV2_Ok.sol:MyContract)␊
391
+ ␊
392
+ contracts/test/cli/ValidateBuildInfoV2_Branch_Bad.sol:8: Renamed \`z\` to \`zBranch\`␊
393
+ ␊
394
+ ✔ contracts/test/cli/ValidateBuildInfoV2_Branch_Ok.sol:MyContract (upgrades from build-info-v1:contracts/test/cli/ValidateBuildInfoV1.sol:MyContract)␊
395
+ ␊
396
+ FAILED (2 upgradeable contracts detected, 1 passed, 1 failed)␊
397
+ ␊
398
+ Stderr: `
399
+
400
+ ## validate - references multiple build info dirs by annotation - same arg multiple times
401
+
386
402
  > Snapshot 1
387
403
 
388
404
  `Stdout: ✘ contracts/test/cli/ValidateBuildInfoV2_Branch_Bad.sol:MyContract (upgrades from build-info-v2:contracts/test/cli/ValidateBuildInfoV2_Ok.sol:MyContract)␊
@@ -423,3 +439,119 @@ Generated by [AVA](https://avajs.dev).
423
439
  FAILED␊
424
440
  ␊
425
441
  Stderr: `
442
+
443
+ ## validate - excludes by pattern - no match
444
+
445
+ > Snapshot 1
446
+
447
+ `Stdout: ✘ contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS␊
448
+ ␊
449
+ contracts/test/cli/excludes/UsesAbstractUUPS.sol:9: Contract \`UsesAbstractUUPS\` has a constructor␊
450
+ Define an initializer instead␊
451
+ https://zpl.in/upgrades/error-001␊
452
+ ␊
453
+ contracts/test/cli/excludes/AbstractUUPS.sol:11: Contract \`AbstractUUPS\` has a constructor␊
454
+ Define an initializer instead␊
455
+ https://zpl.in/upgrades/error-001␊
456
+ ␊
457
+ contracts/test/cli/excludes/AbstractUUPS.sol:9: Variable \`z\` is immutable and will be initialized on the implementation␊
458
+ If by design, annotate with '@custom:oz-upgrades-unsafe-allow state-variable-immutable'␊
459
+ Otherwise, consider a constant variable or use a mutable variable instead␊
460
+ https://zpl.in/upgrades/error-005␊
461
+ ␊
462
+ contracts/test/cli/excludes/Abstract2.sol:7: Contract \`Abstract2\` has a constructor␊
463
+ Define an initializer instead␊
464
+ https://zpl.in/upgrades/error-001␊
465
+ ␊
466
+ contracts/test/cli/excludes/Abstract2.sol:5: Variable \`y\` is immutable and will be initialized on the implementation␊
467
+ If by design, annotate with '@custom:oz-upgrades-unsafe-allow state-variable-immutable'␊
468
+ Otherwise, consider a constant variable or use a mutable variable instead␊
469
+ https://zpl.in/upgrades/error-005␊
470
+ ␊
471
+ contracts/test/cli/excludes/Abstract1.sol:7: Contract \`Abstract1\` has a constructor␊
472
+ Define an initializer instead␊
473
+ https://zpl.in/upgrades/error-001␊
474
+ ␊
475
+ contracts/test/cli/excludes/Abstract1.sol:5: Variable \`x\` is immutable and will be initialized on the implementation␊
476
+ If by design, annotate with '@custom:oz-upgrades-unsafe-allow state-variable-immutable'␊
477
+ Otherwise, consider a constant variable or use a mutable variable instead␊
478
+ https://zpl.in/upgrades/error-005␊
479
+ ␊
480
+ FAILED (1 upgradeable contract detected, 0 passed, 1 failed)␊
481
+ ␊
482
+ Stderr: `
483
+
484
+ ## validate - excludes by pattern - some match
485
+
486
+ > Snapshot 1
487
+
488
+ `Stdout: ✘ contracts/test/cli/excludes/UsesAbstractUUPS.sol:UsesAbstractUUPS␊
489
+ ␊
490
+ contracts/test/cli/excludes/UsesAbstractUUPS.sol:9: Contract \`UsesAbstractUUPS\` has a constructor␊
491
+ Define an initializer instead␊
492
+ https://zpl.in/upgrades/error-001␊
493
+ ␊
494
+ FAILED (1 upgradeable contract detected, 0 passed, 1 failed)␊
495
+ ␊
496
+ Stderr: `
497
+
498
+ ## validate - excludes by pattern - all match
499
+
500
+ > Snapshot 1
501
+
502
+ {
503
+ stderr: '',
504
+ stdout: `No upgradeable contracts detected.␊
505
+ `,
506
+ }
507
+
508
+ ## validate - excludes by pattern - all match using commas within glob
509
+
510
+ > Snapshot 1
511
+
512
+ {
513
+ stderr: '',
514
+ stdout: `No upgradeable contracts detected.␊
515
+ `,
516
+ }
517
+
518
+ ## validate - exclude passed multiple times
519
+
520
+ > Snapshot 1
521
+
522
+ {
523
+ stderr: '',
524
+ stdout: `No upgradeable contracts detected.␊
525
+ `,
526
+ }
527
+
528
+ ## validate - excludes UpgradeableBeacon and its parents by default
529
+
530
+ > Snapshot 1
531
+
532
+ `Stdout: ✘ contracts/test/cli/excludes/V2Bad1.sol:V2Bad1 (upgrades from contracts/test/cli/excludes/V1.sol:V1)␊
533
+ ␊
534
+ V1: Deleted \`x\`␊
535
+ > Keep the variable even if unused␊
536
+ ␊
537
+ ✘ contracts/test/cli/excludes/V2Bad2.sol:V2Bad2 (upgrades from contracts/test/cli/excludes/V1.sol:V1)␊
538
+ ␊
539
+ V1: Deleted \`x\`␊
540
+ > Keep the variable even if unused␊
541
+ ␊
542
+ FAILED (2 upgradeable contracts detected, 0 passed, 2 failed)␊
543
+ ␊
544
+ Stderr: `
545
+
546
+ ## validate - excludes UpgradeableBeacon and its parents by default, and excludes one contract from layout comparisions
547
+
548
+ > Snapshot 1
549
+
550
+ `Stdout: ✘ contracts/test/cli/excludes/V2Bad2.sol:V2Bad2 (upgrades from contracts/test/cli/excludes/V1.sol:V1)␊
551
+ ␊
552
+ V1: Deleted \`x\`␊
553
+ > Keep the variable even if unused␊
554
+ ␊
555
+ FAILED (1 upgradeable contract detected, 0 passed, 1 failed)␊
556
+ ␊
557
+ Stderr: `
Binary file