diff --git a/packages/aragon-cli/.gitignore b/packages/aragon-cli/.gitignore index 76add878f..b9cb8a760 100644 --- a/packages/aragon-cli/.gitignore +++ b/packages/aragon-cli/.gitignore @@ -1,2 +1,3 @@ node_modules -dist \ No newline at end of file +dist +src/knownRoles.json \ No newline at end of file diff --git a/packages/aragon-cli/package.json b/packages/aragon-cli/package.json index 177b94d06..977f737b9 100644 --- a/packages/aragon-cli/package.json +++ b/packages/aragon-cli/package.json @@ -8,10 +8,11 @@ "dao": "./aliases/dao" }, "scripts": { - "build": "babel -d dist src", + "build": "npm run extract-roles && babel -d dist src --copy-files", "prepare": "npm run build", "test": "ava", - "lint": "standard src" + "lint": "standard src", + "extract-roles": "scripts/extract-roles" }, "repository": { "type": "git", @@ -35,10 +36,6 @@ "homepage": "https://github.com/aragon/aragon-dev-cli#readme", "dependencies": { "@aragon/apm": "^2.0.2", - "@aragon/apps-finance": "^1.0.1", - "@aragon/apps-token-manager": "^1.0.0", - "@aragon/apps-vault": "^2.0.1", - "@aragon/apps-voting": "^1.0.0", "@aragon/aragen": "2.0.0-beta.1", "@aragon/os": "4.0.0-beta.1", "@aragon/templates-beta": "^1.1.3", @@ -75,6 +72,10 @@ "yargs": "^10.1.0" }, "devDependencies": { + "@aragon/apps-finance": "^1.0.1", + "@aragon/apps-token-manager": "^1.0.0", + "@aragon/apps-vault": "^2.0.1", + "@aragon/apps-voting": "^1.0.0", "@babel/cli": "^7.0.0-beta.46", "@babel/core": "^7.0.0-beta.46", "@babel/node": "^7.0.0-beta.46", diff --git a/packages/aragon-cli/scripts/extract-roles b/packages/aragon-cli/scripts/extract-roles new file mode 100755 index 000000000..316cfd9cd --- /dev/null +++ b/packages/aragon-cli/scripts/extract-roles @@ -0,0 +1,34 @@ +#!/usr/bin/env node +const { writeJson } = require('fs-extra') +const path = require('path') + +const getAppNPMPackage = appName => `@aragon/apps-${appName}` + +const knownApps = ['voting', 'token-manager', 'vault', 'finance'] + +const getAppRoles = app => { + const arapp = require(`${getAppNPMPackage(app)}/arapp`) + return arapp.roles.map(({ name, id }) => ({ name, id })) +} + +const flatten = list => list.reduce( + (a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), [] +) + +const aOSRoles = [ + { id: 'CREATE_PERMISSIONS_ROLE', name: 'Create new permissions'}, + { id: 'APP_MANAGER_ROLE', name: 'Manage DAO apps'} +] + +// TODO: Add support for user apps +const rolesForDefaultApps = () => { + const allRoles = flatten(knownApps.map(app => getAppRoles(app))).concat(aOSRoles) + + return allRoles +} + +writeJson( + path.resolve('.', 'src/knownRoles.json'), + rolesForDefaultApps(), + { spaces: '\t' } + ) \ No newline at end of file diff --git a/packages/aragon-cli/src/commands/dao_cmds/acl_cmds/utils/knownRoles.js b/packages/aragon-cli/src/commands/dao_cmds/acl_cmds/utils/knownRoles.js index f682410c5..871551be7 100644 --- a/packages/aragon-cli/src/commands/dao_cmds/acl_cmds/utils/knownRoles.js +++ b/packages/aragon-cli/src/commands/dao_cmds/acl_cmds/utils/knownRoles.js @@ -2,25 +2,7 @@ const sha3 = require('js-sha3') const keccak256 = x => '0x'+sha3.keccak_256(x) const path = require('path') const { findProjectRoot } = require('../../../../util') - - -const getAppNPMPackage = appName => `@aragon/apps-${appName}` - -const knownApps = ['voting', 'token-manager', 'vault', 'finance'] - -const getAppRoles = app => { - const arapp = require(`${getAppNPMPackage(app)}/arapp`) - return arapp.roles.map(({ name, id }) => ({ name, id })) -} - -const flatten = list => list.reduce( - (a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), [] -) - -const aOSRoles = [ - { id: 'CREATE_PERMISSIONS_ROLE', name: 'Create new permissions'}, - { id: 'APP_MANAGER_ROLE', name: 'Manage DAO apps'} -] +const defaultAppsRoles = require('../../../../knownRoles.json') const currentAppRoles = () => { const arappPath = path.resolve(findProjectRoot(), 'arapp.json') @@ -29,7 +11,7 @@ const currentAppRoles = () => { // TODO: add support for user apps const rolesForApps = () => { - const allRoles = flatten(knownApps.map(app => getAppRoles(app))).concat(aOSRoles).concat(currentAppRoles()) + const allRoles = defaultAppsRoles.concat(currentAppRoles()) const knownRoles = allRoles.reduce( (acc, role) => Object.assign(acc, { [keccak256(role.id)]: role }) , {})