@@ -28,7 +28,10 @@ commands:
28
28
steps :
29
29
- run :
30
30
name : Versions
31
- command : npm version
31
+ command : |
32
+ npm version
33
+ yarn --version
34
+ pnpm version || >&2 echo "pnpm not installed"
32
35
33
36
update-npm :
34
37
steps :
@@ -52,14 +55,23 @@ commands:
52
55
default : package.json
53
56
steps :
54
57
- restore_cache :
55
- key : <<parameters.cache-id>>-dependency-cache-v2-{{ .Environment.CIRCLE_JOB }}-{{ checksum "<<parameters.path>>/<<parameters.dependency-file>>" }}
58
+ name : " Restoring <<parameters.cache-id>> cache"
59
+ key : <<parameters.cache-id>>-dependency-cache-v4-{{ .Environment.CIRCLE_JOB }}-{{ checksum "<<parameters.path>>/<<parameters.dependency-file>>" }}
56
60
- run :
57
61
name : " <<parameters.package-manager>> install in <<parameters.path>>"
58
62
command : |
59
63
cd "<<parameters.path>>"
60
- [[ -e node_modules/ ]] || <<parameters.package-manager>> install
64
+ if [[ ! -e node_modules/ ]]; then
65
+ if [[ "<<parameters.package-manager>>" == "pnpm" ]]; then
66
+ # Create a flat node_modules without symlinks. Same as the node_modules created by npm or Yarn.
67
+ <<parameters.package-manager>> install --node-linker=hoisted
68
+ else
69
+ <<parameters.package-manager>> install
70
+ fi
71
+ fi
61
72
- save_cache :
62
- key : <<parameters.cache-id>>-dependency-cache-v2-{{ .Environment.CIRCLE_JOB }}-{{ checksum "<<parameters.path>>/<<parameters.dependency-file>>" }}
73
+ name : " Saving <<parameters.cache-id>> cache"
74
+ key : <<parameters.cache-id>>-dependency-cache-v4-{{ .Environment.CIRCLE_JOB }}-{{ checksum "<<parameters.path>>/<<parameters.dependency-file>>" }}
63
75
paths :
64
76
- " <<parameters.path>>/node_modules/"
65
77
@@ -71,13 +83,15 @@ commands:
71
83
cd truffle/
72
84
echo "export _TRUFFLE_COMMIT_ID=$(git rev-parse --verify HEAD)" >> $BASH_ENV
73
85
- restore_cache :
86
+ name : " Restoring truffle cache"
74
87
key : truffle-dependency-cache-{{ checksum "truffle/yarn.lock" }}-{{ .Environment._TRUFFLE_COMMIT_ID }}
75
88
- run :
76
89
name : yarn install in truffle
77
90
command : |
78
91
cd truffle/
79
92
[[ -e node_modules/ ]] || yarn install
80
93
- save_cache :
94
+ name : " Saving truffle cache"
81
95
key : truffle-dependency-cache-{{ checksum "truffle/yarn.lock" }}-{{ .Environment._TRUFFLE_COMMIT_ID }}
82
96
paths :
83
97
- truffle/
@@ -93,7 +107,7 @@ commands:
93
107
default : solc-js.tgz
94
108
package-manager :
95
109
type : enum
96
- enum : ["npm", "yarn"]
110
+ enum : ["npm", "yarn", "pnpm" ]
97
111
default : npm
98
112
steps :
99
113
- run :
@@ -109,13 +123,22 @@ commands:
109
123
mv package.json original-package.json
110
124
# NOTE: The 'overrides' feature requires npm >= 8.3. Yarn requires `resolutions` instead.
111
125
jq ". + {overrides: {solc: \"${absolute_tarball_path}\"}} + {resolutions: {solc: \"${absolute_tarball_path}\"}}" original-package.json > package.json
112
- "<<parameters.package-manager>>" install
126
+ if [[ "<<parameters.package-manager>>" == "pnpm" ]]; then
127
+ <<parameters.package-manager>> install --no-frozen-lockfile --node-linker=hoisted
128
+ else
129
+ <<parameters.package-manager>> install --no-frozen-lockfile
130
+ fi
113
131
- run :
114
132
name : " Sanity check: all transitive dependencies successfully replaced with the tarball"
115
133
command : |
116
134
solc_version=$(jq --raw-output .version solc-js/package.json)
117
135
cd "<<parameters.path>>"
118
- if "<<parameters.package-manager>>" list --pattern solc | grep 'solc@' | grep -v "solc@${solc_version}"; then
136
+ if [[ "<<parameters.package-manager>>" == "pnpm" ]]; then
137
+ dependency_version=$(pnpm list --depth Infinity solc | grep "solc" | grep -v "solc ${solc_version}" || true)
138
+ else
139
+ dependency_version=$(<<parameters.package-manager>> list solc | grep "solc@" | grep -v "solc@${solc_version}" || true)
140
+ fi
141
+ if [[ -n "${dependency_version}" ]]; then
119
142
echo "Another version of solc-js is still present in the dependency tree."
120
143
exit 1
121
144
fi
@@ -142,11 +165,11 @@ commands:
142
165
- install-dependencies :
143
166
cache-id : hardhat
144
167
path : hardhat
145
- package-manager : yarn
146
- dependency-file : yarn. lock
168
+ package-manager : pnpm
169
+ dependency-file : pnpm- lock.yaml
147
170
- inject-solc-js-tarball :
148
171
path : hardhat/
149
- package-manager : yarn
172
+ package-manager : pnpm
150
173
151
174
provision-truffle-with-packaged-solcjs :
152
175
description : " Clones Truffle repository and configures it to use a local clone of solc-js."
@@ -220,17 +243,18 @@ jobs:
220
243
hardhat_default_solc_version=$(jq --raw-output '.dependencies.solc' hardhat/packages/hardhat-core/package.json)
221
244
mkdir hardhat-default-solc/
222
245
pushd hardhat-default-solc/
223
- npm install "solc@${hardhat_default_solc_version}"
246
+ pnpm install --node-linker=hoisted "solc@${hardhat_default_solc_version}"
224
247
popd
225
248
ln -sf ../../../hardhat-default-solc/node_modules/solc/soljson.js hardhat/node_modules/solc/soljson.js
226
249
- run :
227
250
name : Run hardhat-core test suite with its default solc binary
228
251
command : |
229
252
cd hardhat/packages/hardhat-core
230
- # TODO: yarn build should not be needed to run these tests. Remove it.
231
- # See https://github.com/NomicFoundation/hardhat/issues/2486 for details.
232
- yarn build
233
- yarn test
253
+ # The install command is required again here to create the correct symlinks under the hardhat-core/node_modules
254
+ # In our case that is something like: solc -> ../../../node_modules/.pnpm/file+..+solc-js.tgz/node_modules/solc
255
+ # See: https://pnpm.io/symlinked-node-modules-structure
256
+ pnpm install
257
+ pnpm test
234
258
235
259
hardhat-core-latest-solc :
236
260
docker :
@@ -247,7 +271,8 @@ jobs:
247
271
export HARDHAT_TESTS_SOLC_PATH HARDHAT_TESTS_SOLC_VERSION
248
272
249
273
cd hardhat/packages/hardhat-core
250
- yarn test
274
+ pnpm install
275
+ pnpm test
251
276
252
277
hardhat-sample-project :
253
278
docker :
0 commit comments