1
+ defaults :
2
+ - requires_package : &requires_package
3
+ requires :
4
+ - build-package
5
+
1
6
workflows :
2
7
version : 2.1
3
8
node-multi-build :
@@ -11,11 +16,12 @@ workflows:
11
16
- node-v20
12
17
- node-current :
13
18
run_coveralls : true
14
- - hardhat-core-default-solc
15
- - hardhat-core-latest-solc
16
- - hardhat-sample-project
17
- - truffle-sample-project
18
- - cli-smoke-test
19
+ - build-package
20
+ - hardhat-core-default-solc : *requires_package
21
+ - hardhat-core-latest-solc : *requires_package
22
+ - hardhat-sample-project : *requires_package
23
+ - truffle-sample-project : *requires_package
24
+ - cli-smoke-test : *requires_package
19
25
- solidity-solcjs-ext-test
20
26
21
27
version : 2.1
@@ -104,7 +110,7 @@ commands:
104
110
default : .
105
111
tarball-path :
106
112
type : string
107
- default : solc-js.tgz
113
+ default : workspace/ solc-js.tgz
108
114
package-manager :
109
115
type : enum
110
116
enum : ["npm", "yarn", "pnpm"]
@@ -131,7 +137,10 @@ commands:
131
137
- run :
132
138
name : " Sanity check: all transitive dependencies successfully replaced with the tarball"
133
139
command : |
134
- solc_version=$(jq --raw-output .version solc-js/package.json)
140
+ solc_version=$(
141
+ tar --extract --to-stdout --file "<<parameters.tarball-path>>" package/package.json |
142
+ jq --raw-output .version
143
+ )
135
144
cd "<<parameters.path>>"
136
145
if [[ "<<parameters.package-manager>>" == "pnpm" ]]; then
137
146
dependency_version=$(pnpm list --depth Infinity solc | grep "solc" | grep -v "solc ${solc_version}" || true)
@@ -143,21 +152,6 @@ commands:
143
152
exit 1
144
153
fi
145
154
146
- provision-and-package-solcjs :
147
- description : " Creates a package out of latest solc-js to test its installation as a dependency."
148
- steps :
149
- - checkout :
150
- path : solc-js/
151
- - install-dependencies :
152
- cache-id : solc-js
153
- path : solc-js
154
- - run :
155
- name : Package solc-js
156
- command : |
157
- cd solc-js/
158
- npm run build:tarball
159
- mv "$(npm run --silent tarballName)" ../solc-js.tgz
160
-
161
155
provision-hardhat-with-packaged-solcjs :
162
156
description : " Clones Hardhat repository and configures it to use a local clone of solc-js."
163
157
steps :
@@ -226,14 +220,47 @@ jobs:
226
220
./node_modules
227
221
./dist
228
222
223
+ build-package :
224
+ docker :
225
+ - image : cimg/node:current
226
+ steps :
227
+ - show-npm-version
228
+ - checkout :
229
+ path : solc-js/
230
+ - install-dependencies :
231
+ cache-id : solc-js
232
+ path : solc-js
233
+ - attach_workspace :
234
+ at : workspace
235
+ - run :
236
+ name : Package solc-js
237
+ command : |
238
+ cd solc-js/
239
+ npm run build:tarball
240
+
241
+ cp "$(npm run --silent tarballName)" ../workspace/solc-js.tgz
242
+
243
+ # The artifact is meant to be used with `npm publish` and that fails unless the file name includes a version number.
244
+ # Oddly, the name and version from the file name do not even need to be correct - after npm accepts the file,
245
+ # it will use the ones from package.json anyway.
246
+ mkdir ../artifacts
247
+ mv "$(npm run --silent tarballName)" ../artifacts/
248
+ - persist_to_workspace :
249
+ root : workspace
250
+ paths :
251
+ - solc-js.tgz
252
+ - store_artifacts :
253
+ path : artifacts/
254
+
229
255
hardhat-core-default-solc :
230
256
# Runs out of memory on 'medium'.
231
257
resource_class : medium+
232
258
docker :
233
259
- image : cimg/node:current
234
260
steps :
235
261
- show-npm-version
236
- - provision-and-package-solcjs
262
+ - attach_workspace :
263
+ at : workspace
237
264
- provision-hardhat-with-packaged-solcjs
238
265
- run :
239
266
name : Restore the default solc binary expected by Hardhat
@@ -261,16 +288,18 @@ jobs:
261
288
- image : cimg/node:current
262
289
steps :
263
290
- show-npm-version
264
- - provision-and-package-solcjs
291
+ - attach_workspace :
292
+ at : workspace
265
293
- provision-hardhat-with-packaged-solcjs
266
294
- run :
267
295
name : Run hardhat-core test suite with latest solc
268
296
command : |
269
- HARDHAT_TESTS_SOLC_PATH="${PWD}/solc-js/soljson.js"
270
- HARDHAT_TESTS_SOLC_VERSION=$(jq --raw-output .version solc-js/package.json)
297
+ cd hardhat/
298
+ HARDHAT_TESTS_SOLC_PATH="${PWD}/node_modules/solc/soljson.js"
299
+ HARDHAT_TESTS_SOLC_VERSION=$(jq --raw-output .version node_modules/solc/package.json)
271
300
export HARDHAT_TESTS_SOLC_PATH HARDHAT_TESTS_SOLC_VERSION
272
301
273
- cd hardhat/ packages/hardhat-core
302
+ cd packages/hardhat-core/
274
303
pnpm install
275
304
pnpm test
276
305
@@ -279,7 +308,8 @@ jobs:
279
308
- image : cimg/node:current
280
309
steps :
281
310
- show-npm-version
282
- - provision-and-package-solcjs
311
+ - attach_workspace :
312
+ at : workspace
283
313
- run : git clone --depth 1 "https://github.com/nomiclabs/hardhat-hackathon-boilerplate" boilerplate/
284
314
- run :
285
315
# Leaving package-lock.json causes a weird error in arborist when npm is used again after
@@ -300,10 +330,10 @@ jobs:
300
330
- run :
301
331
name : Configure the boilerplate project to force Hardhat not to use a native binary
302
332
command : |
303
- solc_version=$(jq --raw-output .version solc-js/package.json)
304
-
305
333
cd boilerplate/
306
334
335
+ solc_version=$(jq --raw-output .version node_modules/solc/package.json)
336
+
307
337
sed -i 's|pragma solidity [^;]\+;|pragma solidity *;|g' contracts/Token.sol
308
338
309
339
{
@@ -313,7 +343,7 @@ jobs:
313
343
echo "subtask(TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, async (args, hre, runSuper) => {"
314
344
echo " assert(args.solcVersion == '${solc_version}', 'Unexpected solc version: ' + args.solcVersion);"
315
345
echo " return {"
316
- echo " compilerPath: '$(realpath ".. /solc-js /soljson.js")',"
346
+ echo " compilerPath: '$(realpath "node_modules /solc/soljson.js")',"
317
347
echo " isSolcJs: true,"
318
348
echo " version: args.solcVersion,"
319
349
echo " longVersion: args.solcVersion"
@@ -333,7 +363,8 @@ jobs:
333
363
steps :
334
364
- update-npm
335
365
- show-npm-version
336
- - provision-and-package-solcjs
366
+ - attach_workspace :
367
+ at : workspace
337
368
- run : sudo apt update
338
369
- run : sudo apt install python3 python-is-python3 --assume-yes --no-install-recommends
339
370
- provision-truffle-with-packaged-solcjs
@@ -365,28 +396,40 @@ jobs:
365
396
- image : cimg/node:current
366
397
steps :
367
398
- show-npm-version
368
- - provision-and-package-solcjs
369
- - run :
370
- name : " CLI smoke test (repository)"
371
- command : |
372
- cd solc-js
373
- dist/solc.js --version
374
-
375
- echo "contract C {}" > C.sol
376
- dist/solc.js C.sol --bin
377
- [[ -f C_sol_C.bin ]]
399
+ - attach_workspace :
400
+ at : workspace
378
401
- run :
379
402
name : " CLI smoke test (package)"
380
403
command : |
381
404
mkdir package/
382
405
cd package/
383
- npm install ../solc-js.tgz
406
+ npm install ../workspace/ solc-js.tgz
384
407
385
408
npx solcjs --version
386
409
387
410
echo "contract C {}" > C.sol
388
411
npx solcjs C.sol --bin
389
412
[[ -f C_sol_C.bin ]]
413
+ - checkout :
414
+ path : solc-js/
415
+ - install-dependencies :
416
+ cache-id : solc-js
417
+ path : solc-js
418
+ - run :
419
+ name : Build solc-js
420
+ command : |
421
+ cd solc-js/
422
+ npm run updateBinary
423
+ npm run build
424
+ - run :
425
+ name : " CLI smoke test (repository)"
426
+ command : |
427
+ cd solc-js
428
+ dist/solc.js --version
429
+
430
+ echo "contract C {}" > C.sol
431
+ dist/solc.js C.sol --bin
432
+ [[ -f C_sol_C.bin ]]
390
433
391
434
solidity-solcjs-ext-test :
392
435
docker :
0 commit comments