Skip to content

Commit

Permalink
Resolve solc version from semver string (#202)
Browse files Browse the repository at this point in the history
* Simplify e2e compiler tests

* Resolve solc version from semver string
  • Loading branch information
sz-piotr authored Mar 13, 2020
1 parent eaa158a commit 01536e9
Show file tree
Hide file tree
Showing 44 changed files with 188 additions and 102 deletions.
2 changes: 2 additions & 0 deletions waffle-compiler/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@
"@resolver-engine/imports": "^0.3.3",
"@resolver-engine/imports-fs": "^0.3.3",
"@types/mkdirp": "^0.5.2",
"@types/node-fetch": "^2.5.5",
"mkdirp": "^0.5.1",
"node-fetch": "^2.6.0",
"solc": "^0.6.3"
},
"devDependencies": {
Expand Down
26 changes: 26 additions & 0 deletions waffle-compiler/src/compileSolcjs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,45 @@ import {readFileContent, isDirectory, relativePathToWorkingDir} from './utils';
import {Config} from './config';
import {buildInputObject} from './buildUitls';
import {ImportFile} from '@resolver-engine/imports';
import fetch from 'node-fetch';

const loadRemoteVersion = promisify(solc.loadRemoteVersion);
const semverRegex = /^\d+\.\d+\.\d+$/;

export async function loadCompiler(config: Config) {
if (config.compilerVersion !== 'default') {
if (isDirectory(config.compilerVersion)) {
return require(relativePathToWorkingDir(config.compilerVersion));
} else if (semverRegex.test(config.compilerVersion)) {
try {
const version = await resolveSemverVersion(config.compilerVersion);
return loadRemoteVersion(version);
} catch (e) {
throw new Error(`Error fetching version: ${config.compilerVersion}.`);
}
}
return loadRemoteVersion(config.compilerVersion);
}
return solc;
}

async function resolveSemverVersion(version: string) {
const releases = await fetchReleases();
const item: string = releases[version];
return item.substring('soljson-'.length, item.length - '.js'.length);
}

const VERSION_LIST_URL = 'https://ethereum.github.io/solc-bin/bin/list.json';
let cache: any = undefined;
async function fetchReleases() {
if (!cache) {
const res = await fetch(VERSION_LIST_URL);
const {releases} = await res.json();
cache = releases;
}
return cache;
}

export function compileSolcjs(config: Config) {
return async function compile(sources: ImportFile[], findImports: (file: string) => any) {
const solc = await loadCompiler(config);
Expand Down
36 changes: 25 additions & 11 deletions waffle-compiler/test/compiler/e2e.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import fs from 'fs';
import fsx from 'fs-extra';
import {join, resolve} from 'path';
import {join, resolve, dirname, basename} from 'path';
import {expect} from 'chai';
import {compileProject} from '../../src/compiler';
import {loadConfig} from '../../src/loadConfig';
Expand All @@ -10,15 +10,19 @@ import {MockProvider} from '@ethereum-waffle/provider';
import {ContractFactory} from 'ethers';

const configurations = [
'./test/projects/custom/config.js',
'./test/projects/custom/config_native.json',
'./test/projects/custom/config_docker.json',
'./test/projects/custom/config_promise.js',
'./test/projects/custom_solidity_4/config_solcjs.json',
'./test/projects/custom_solidity_4/config_docker.json',
'./test/projects/custom/config_combined.js',
'./test/projects/solidity4/config_docker.json',
'./test/projects/solidity4/config_solcjs.json',
'./test/projects/solidity4/config_solcjs_commit.json',
'./test/projects/solidity5/config_commonjs.js',
'./test/projects/solidity5/config_docker.json',
'./test/projects/solidity5/config_klab.json',
'./test/projects/solidity5/config_native.json',
'./test/projects/solidity5/config_promise.js',
'./test/projects/solidity5/config_solcjs.json',
'./test/projects/solidity5/config_solcjs_commit.json',
'./test/projects/solidity6/config_docker.json',
'./test/projects/solidity6/config_solcjs.json',
'./test/projects/solidity6/config_docker.json'
'./test/projects/solidity6/config_solcjs_commit.json'
];

const artifacts = [
Expand Down Expand Up @@ -55,10 +59,20 @@ describe('E2E: Compiler integration', async () => {
const configuration = await loadConfig(configurationPath) as any;
const {name, outputDirectory} = configuration;

describe(name, () => {
describe(`E2E: ${name}`, () => {
const dir = process.cwd();

before(async () => {
process.chdir(dirname(configurationPath));
fsx.removeSync(outputDirectory);
await compileProject(configurationPath);
});

it('compiles without errors', async () => {
await compileProject(basename(configurationPath));
});

after(() => {
process.chdir(dir);
});

it('produce output files', async () => {
Expand Down
2 changes: 1 addition & 1 deletion waffle-compiler/test/projects/compilerOptions/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"compilerOptions": {
"evmVersion": "constantinople"
},
"compilerVersion": "v0.5.9+commit.e560f70d"
"compilerVersion": "0.5.9"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"evmVersion": "constantinople"
},
"compilerType": "dockerized-solc",
"compilerVersion": "0.5.15"
"compilerVersion": "0.5.9"
}
7 changes: 0 additions & 7 deletions waffle-compiler/test/projects/custom/config.js

This file was deleted.

20 changes: 0 additions & 20 deletions waffle-compiler/test/projects/custom/config_combined.js

This file was deleted.

8 changes: 0 additions & 8 deletions waffle-compiler/test/projects/custom/config_docker.json

This file was deleted.

This file was deleted.

7 changes: 0 additions & 7 deletions waffle-compiler/test/projects/custom/config_native.json

This file was deleted.

9 changes: 0 additions & 9 deletions waffle-compiler/test/projects/custom/config_promise.js

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 1 addition & 1 deletion waffle-compiler/test/projects/humanReadableAbi/config.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"outputHumanReadableAbi": true,
"compilerVersion": "v0.5.9+commit.e560f70d"
"compilerVersion": "0.5.9"
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"compilerVersion": "v0.5.9+commit.e560f70d"
"compilerVersion": "0.5.9"
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
"outputDirectory": "../build/nested",
"nodeModulesDirectory": "../modules",
"compilerType": "dockerized-solc",
"compilerVersion": "0.5.15"
"compilerVersion": "0.5.9"
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
"outputDirectory": "./test/projects/invalidContracts/custom_build",
"nodeModulesDirectory": "./test/projects/invalidContracts/custom_node_modules",
"compilerType": "dockerized-solc",
"compilerVersion": "0.5.15"
"compilerVersion": "0.5.9"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"sourceDirectory": "./test/projects/invalidContracts",
"outputDirectory": "./test/projects/invalidContracts/custom_build",
"nodeModulesDirectory": "./test/projects/invalidContracts/custom_node_modules",
"compilerVersion": "v0.5.9+commit.e560f70d"
"compilerVersion": "0.5.9"
}
8 changes: 8 additions & 0 deletions waffle-compiler/test/projects/solidity4/config_docker.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "Solidity 4 - docker",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerType": "dockerized-solc",
"compilerVersion": "0.4.24"
}
7 changes: 7 additions & 0 deletions waffle-compiler/test/projects/solidity4/config_solcjs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Solidity 4 - solcjs",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerVersion": "0.4.24"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Solidity 4 - solcjs with commit version",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerVersion": "v0.4.24+commit.e67f0147"
}
7 changes: 7 additions & 0 deletions waffle-compiler/test/projects/solidity5/config_commonjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
name: 'Solidity 5 - commonjs',
sourceDirectory: './custom_contracts',
outputDirectory: './custom_build',
nodeModulesDirectory: './custom_node_modules',
compilerVersion: '0.5.9',
}
8 changes: 8 additions & 0 deletions waffle-compiler/test/projects/solidity5/config_docker.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "Solidity 5 - docker",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerType": "dockerized-solc",
"compilerVersion": "0.5.9"
}
24 changes: 24 additions & 0 deletions waffle-compiler/test/projects/solidity5/config_klab.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"name": "Solidity 5 - KLAB",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"outputType": "all",
"compilerOptions": {
"outputSelection": {
"*": {
"*": [
"evm.bytecode.object",
"evm.deployedBytecode.object",
"abi",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.sourceMap"
],
"": [
"ast"
]
}
}
},
"compilerVersion": "0.5.9"
}
7 changes: 7 additions & 0 deletions waffle-compiler/test/projects/solidity5/config_native.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Solidity 5 - native",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerType": "native"
}
7 changes: 7 additions & 0 deletions waffle-compiler/test/projects/solidity5/config_promise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = Promise.resolve({
name: 'Solidity 5 - promise',
sourceDirectory: './custom_contracts',
outputDirectory: './custom_build',
nodeModulesDirectory: './custom_node_modules',
compilerVersion: '0.5.9',
})
7 changes: 7 additions & 0 deletions waffle-compiler/test/projects/solidity5/config_solcjs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Solidity 5 - solcjs",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerVersion": "0.5.9"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Solidity 5 - solcjs with commit version",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerVersion": "v0.5.9+commit.e560f70d"
}
8 changes: 4 additions & 4 deletions waffle-compiler/test/projects/solidity6/config_docker.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "solidity 6, docker",
"sourceDirectory": "./test/projects/solidity6/custom_contracts",
"outputDirectory": "./test/projects/solidity6/custom_build",
"nodeModulesDirectory": "./test/projects/solidity6/custom_node_modules",
"name": "Solidity 6 - docker",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerType": "dockerized-solc",
"compilerVersion": "0.6.2"
}
10 changes: 5 additions & 5 deletions waffle-compiler/test/projects/solidity6/config_solcjs.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "solidity 6, solcjs",
"sourceDirectory": "./test/projects/solidity6/custom_contracts",
"outputDirectory": "./test/projects/solidity6/custom_build",
"nodeModulesDirectory": "./test/projects/solidity6/custom_node_modules",
"compilerVersion": "v0.6.2+commit.bacdbe57"
"name": "Solidity 6 - solcjs",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerVersion": "0.6.2"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Solidity 6 - solcjs with commit version",
"sourceDirectory": "./custom_contracts",
"outputDirectory": "./custom_build",
"nodeModulesDirectory": "./custom_node_modules",
"compilerVersion": "v0.6.2+commit.bacdbe57"
}
Loading

0 comments on commit 01536e9

Please sign in to comment.