diff options
author | Amir Bandeali <abandeali1@gmail.com> | 2018-02-16 04:27:43 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-16 04:27:43 +0800 |
commit | b75fdd6b66a30196d53331827733b863bed770f0 (patch) | |
tree | 09c7e9fab9f1120e1aec28c2d0ad8d00a8aa9671 /packages/deployer | |
parent | 4b6735227876913aa70c22e1d57f547f97201a3a (diff) | |
parent | 060b02eaed2c7e2946286897b79ccfe828efc95d (diff) | |
download | dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.tar dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.tar.gz dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.tar.bz2 dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.tar.lz dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.tar.xz dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.tar.zst dexon-sol-tools-b75fdd6b66a30196d53331827733b863bed770f0.zip |
Merge pull request #400 from 0xProject/feature/deployer/selectContracts
Pass in contracts to compile in deployer
Diffstat (limited to 'packages/deployer')
-rw-r--r-- | packages/deployer/CHANGELOG.md | 4 | ||||
-rw-r--r-- | packages/deployer/src/cli.ts | 21 | ||||
-rw-r--r-- | packages/deployer/src/compiler.ts | 14 | ||||
-rw-r--r-- | packages/deployer/src/utils/types.ts | 1 | ||||
-rw-r--r-- | packages/deployer/test/deploy_test.ts | 1 | ||||
-rw-r--r-- | packages/deployer/test/util/constants.ts | 1 |
6 files changed, 38 insertions, 4 deletions
diff --git a/packages/deployer/CHANGELOG.md b/packages/deployer/CHANGELOG.md index ad8c64538..a33158ea0 100644 --- a/packages/deployer/CHANGELOG.md +++ b/packages/deployer/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v0.0.10 - _??_ + + * Add the ability to pass in specific contracts to compile in CLI (#400) + ## v0.0.8 - _February 9, 2018_ * Fix publishing issue where .npmignore was not properly excluding undesired content (#389) diff --git a/packages/deployer/src/cli.ts b/packages/deployer/src/cli.ts index 0fe412bdf..3c6d042c0 100644 --- a/packages/deployer/src/cli.ts +++ b/packages/deployer/src/cli.ts @@ -14,6 +14,7 @@ const DEFAULT_ARTIFACTS_DIR = path.resolve('artifacts'); const DEFAULT_NETWORK_ID = 50; const DEFAULT_JSONRPC_PORT = 8545; const DEFAULT_GAS_PRICE = (10 ** 9 * 2).toString(); +const DEFAULT_CONTRACTS_LIST = '*'; /** * Compiles all contracts with options passed in through CLI. @@ -25,6 +26,7 @@ async function onCompileCommand(argv: CliOptions): Promise<void> { networkId: argv.networkId, optimizerEnabled: argv.shouldOptimize ? 1 : 0, artifactsDir: argv.artifactsDir, + specifiedContracts: getContractsSetFromList(argv.contracts), }; await commands.compileAsync(opts); } @@ -43,6 +45,7 @@ async function onMigrateCommand(argv: CliOptions): Promise<void> { networkId, optimizerEnabled: argv.shouldOptimize ? 1 : 0, artifactsDir: argv.artifactsDir, + specifiedContracts: getContractsSetFromList(argv.contracts), }; await commands.compileAsync(compilerOpts); @@ -72,6 +75,7 @@ async function onDeployCommand(argv: CliOptions): Promise<void> { networkId, optimizerEnabled: argv.shouldOptimize ? 1 : 0, artifactsDir: argv.artifactsDir, + specifiedContracts: getContractsSetFromList(argv.contracts), }; await commands.compileAsync(compilerOpts); @@ -90,6 +94,18 @@ async function onDeployCommand(argv: CliOptions): Promise<void> { await commands.deployAsync(argv.contract, deployerArgs, deployerOpts); } /** + * Creates a set of contracts to compile. + * @param contracts Comma separated list of contracts to compile + */ +function getContractsSetFromList(contracts: string): Set<string> { + const specifiedContracts = new Set(); + const contractsArray = contracts.split(','); + _.forEach(contractsArray, contractName => { + specifiedContracts.add(contractName); + }); + return specifiedContracts; +} +/** * Provides extra required options for deploy command. * @param yargsInstance yargs instance provided in builder function callback. */ @@ -144,6 +160,11 @@ function deployCommandBuilder(yargsInstance: any) { type: 'string', description: 'account to use for deploying contracts', }) + .option('contracts', { + type: 'string', + default: DEFAULT_CONTRACTS_LIST, + description: 'comma separated list of contracts to compile', + }) .command('compile', 'compile contracts', identityCommandBuilder, onCompileCommand) .command( 'migrate', diff --git a/packages/deployer/src/compiler.ts b/packages/deployer/src/compiler.ts index 63db6c865..2b0b81c44 100644 --- a/packages/deployer/src/compiler.ts +++ b/packages/deployer/src/compiler.ts @@ -17,6 +17,7 @@ import { import { utils } from './utils/utils'; const SOLIDITY_FILE_EXTENSION = '.sol'; +const ALL_CONTRACTS_IDENTIFIER = '*'; export class Compiler { private _contractsDir: string; @@ -25,6 +26,7 @@ export class Compiler { private _artifactsDir: string; private _contractSourcesIfExists?: ContractSources; private _solcErrors: Set<string>; + private _specifiedContracts: Set<string>; /** * Recursively retrieves Solidity source code from directory. * @param dirPath Directory to search. @@ -106,6 +108,7 @@ export class Compiler { this._optimizerEnabled = opts.optimizerEnabled; this._artifactsDir = opts.artifactsDir; this._solcErrors = new Set(); + this._specifiedContracts = opts.specifiedContracts; } /** * Compiles all Solidity files found in contractsDir and writes JSON artifacts to artifactsDir. @@ -136,6 +139,8 @@ export class Compiler { const contractName = path.basename(contractBaseName, SOLIDITY_FILE_EXTENSION); const currentArtifactPath = `${this._artifactsDir}/${contractName}.json`; const sourceHash = `0x${ethUtil.sha3(source).toString('hex')}`; + const isContractSpecified = + this._specifiedContracts.has(ALL_CONTRACTS_IDENTIFIER) || this._specifiedContracts.has(contractName); let currentArtifactString: string; let currentArtifact: ContractArtifact; @@ -150,11 +155,12 @@ export class Compiler { oldNetworks = currentArtifact.networks; const oldNetwork: ContractData = oldNetworks[this._networkId]; shouldCompile = - _.isUndefined(oldNetwork) || - oldNetwork.keccak256 !== sourceHash || - oldNetwork.optimizer_enabled !== this._optimizerEnabled; + (_.isUndefined(oldNetwork) || + oldNetwork.keccak256 !== sourceHash || + oldNetwork.optimizer_enabled !== this._optimizerEnabled) && + isContractSpecified; } catch (err) { - shouldCompile = true; + shouldCompile = isContractSpecified; } if (!shouldCompile) { diff --git a/packages/deployer/src/utils/types.ts b/packages/deployer/src/utils/types.ts index e054b9cc2..46481828e 100644 --- a/packages/deployer/src/utils/types.ts +++ b/packages/deployer/src/utils/types.ts @@ -50,6 +50,7 @@ export interface CompilerOptions { networkId: number; optimizerEnabled: number; artifactsDir: string; + specifiedContracts: Set<string>; } export interface DeployerOptions { diff --git a/packages/deployer/test/deploy_test.ts b/packages/deployer/test/deploy_test.ts index 5fe2ffbd7..6a8397982 100644 --- a/packages/deployer/test/deploy_test.ts +++ b/packages/deployer/test/deploy_test.ts @@ -18,6 +18,7 @@ const compilerOpts: CompilerOptions = { contractsDir, networkId: constants.networkId, optimizerEnabled: constants.optimizerEnabled, + specifiedContracts: new Set(constants.specifiedContracts), }; const compiler = new Compiler(compilerOpts); const deployerOpts = { diff --git a/packages/deployer/test/util/constants.ts b/packages/deployer/test/util/constants.ts index d52076607..adb13f330 100644 --- a/packages/deployer/test/util/constants.ts +++ b/packages/deployer/test/util/constants.ts @@ -8,4 +8,5 @@ export const constants = { timeoutMs: 20000, zrxTokenAddress: '0xe41d2489571d322189246dafa5ebde1f4699f498', tokenTransferProxyAddress: '0x8da0d80f5007ef1e431dd2127178d224e32c2ef4', + specifiedContracts: '*', }; |