Skip to content

Commit 0e14058

Browse files
authored
Merge pull request #717 from ethereum/building-release-package-in-ci
Building release package in CI
2 parents feeb5d6 + 5d7f0bd commit 0e14058

File tree

1 file changed

+86
-43
lines changed

1 file changed

+86
-43
lines changed

.circleci/config.yml

Lines changed: 86 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
defaults:
2+
- requires_package: &requires_package
3+
requires:
4+
- build-package
5+
16
workflows:
27
version: 2.1
38
node-multi-build:
@@ -11,11 +16,12 @@ workflows:
1116
- node-v20
1217
- node-current:
1318
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
1925
- solidity-solcjs-ext-test
2026

2127
version: 2.1
@@ -104,7 +110,7 @@ commands:
104110
default: .
105111
tarball-path:
106112
type: string
107-
default: solc-js.tgz
113+
default: workspace/solc-js.tgz
108114
package-manager:
109115
type: enum
110116
enum: ["npm", "yarn", "pnpm"]
@@ -131,7 +137,10 @@ commands:
131137
- run:
132138
name: "Sanity check: all transitive dependencies successfully replaced with the tarball"
133139
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+
)
135144
cd "<<parameters.path>>"
136145
if [[ "<<parameters.package-manager>>" == "pnpm" ]]; then
137146
dependency_version=$(pnpm list --depth Infinity solc | grep "solc" | grep -v "solc ${solc_version}" || true)
@@ -143,21 +152,6 @@ commands:
143152
exit 1
144153
fi
145154
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-
161155
provision-hardhat-with-packaged-solcjs:
162156
description: "Clones Hardhat repository and configures it to use a local clone of solc-js."
163157
steps:
@@ -226,14 +220,47 @@ jobs:
226220
./node_modules
227221
./dist
228222
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+
229255
hardhat-core-default-solc:
230256
# Runs out of memory on 'medium'.
231257
resource_class: medium+
232258
docker:
233259
- image: cimg/node:current
234260
steps:
235261
- show-npm-version
236-
- provision-and-package-solcjs
262+
- attach_workspace:
263+
at: workspace
237264
- provision-hardhat-with-packaged-solcjs
238265
- run:
239266
name: Restore the default solc binary expected by Hardhat
@@ -261,16 +288,18 @@ jobs:
261288
- image: cimg/node:current
262289
steps:
263290
- show-npm-version
264-
- provision-and-package-solcjs
291+
- attach_workspace:
292+
at: workspace
265293
- provision-hardhat-with-packaged-solcjs
266294
- run:
267295
name: Run hardhat-core test suite with latest solc
268296
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)
271300
export HARDHAT_TESTS_SOLC_PATH HARDHAT_TESTS_SOLC_VERSION
272301
273-
cd hardhat/packages/hardhat-core
302+
cd packages/hardhat-core/
274303
pnpm install
275304
pnpm test
276305
@@ -279,7 +308,8 @@ jobs:
279308
- image: cimg/node:current
280309
steps:
281310
- show-npm-version
282-
- provision-and-package-solcjs
311+
- attach_workspace:
312+
at: workspace
283313
- run: git clone --depth 1 "https://github.com/nomiclabs/hardhat-hackathon-boilerplate" boilerplate/
284314
- run:
285315
# Leaving package-lock.json causes a weird error in arborist when npm is used again after
@@ -300,10 +330,10 @@ jobs:
300330
- run:
301331
name: Configure the boilerplate project to force Hardhat not to use a native binary
302332
command: |
303-
solc_version=$(jq --raw-output .version solc-js/package.json)
304-
305333
cd boilerplate/
306334
335+
solc_version=$(jq --raw-output .version node_modules/solc/package.json)
336+
307337
sed -i 's|pragma solidity [^;]\+;|pragma solidity *;|g' contracts/Token.sol
308338
309339
{
@@ -313,7 +343,7 @@ jobs:
313343
echo "subtask(TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, async (args, hre, runSuper) => {"
314344
echo " assert(args.solcVersion == '${solc_version}', 'Unexpected solc version: ' + args.solcVersion);"
315345
echo " return {"
316-
echo " compilerPath: '$(realpath "../solc-js/soljson.js")',"
346+
echo " compilerPath: '$(realpath "node_modules/solc/soljson.js")',"
317347
echo " isSolcJs: true,"
318348
echo " version: args.solcVersion,"
319349
echo " longVersion: args.solcVersion"
@@ -333,7 +363,8 @@ jobs:
333363
steps:
334364
- update-npm
335365
- show-npm-version
336-
- provision-and-package-solcjs
366+
- attach_workspace:
367+
at: workspace
337368
- run: sudo apt update
338369
- run: sudo apt install python3 python-is-python3 --assume-yes --no-install-recommends
339370
- provision-truffle-with-packaged-solcjs
@@ -365,28 +396,40 @@ jobs:
365396
- image: cimg/node:current
366397
steps:
367398
- 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
378401
- run:
379402
name: "CLI smoke test (package)"
380403
command: |
381404
mkdir package/
382405
cd package/
383-
npm install ../solc-js.tgz
406+
npm install ../workspace/solc-js.tgz
384407
385408
npx solcjs --version
386409
387410
echo "contract C {}" > C.sol
388411
npx solcjs C.sol --bin
389412
[[ -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 ]]
390433
391434
solidity-solcjs-ext-test:
392435
docker:

0 commit comments

Comments
 (0)