From ef6aa9f41b9f21d033034c51e8880ec9d70b6b40 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Mon, 12 Mar 2018 22:13:24 +0100 Subject: Convert 0x.js scripts to TS, move the prepublishUtils script to `dev-utils` and also convert it to TS. --- packages/dev-utils/CHANGELOG.md | 4 ++ packages/dev-utils/package.json | 2 + packages/dev-utils/src/globals.d.ts | 7 +++ packages/dev-utils/src/index.ts | 1 + packages/dev-utils/src/postpublish_utils.ts | 86 +++++++++++++++++++++++++++++ packages/dev-utils/src/utils.ts | 5 ++ 6 files changed, 105 insertions(+) create mode 100644 packages/dev-utils/src/postpublish_utils.ts create mode 100644 packages/dev-utils/src/utils.ts (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index ecc5546ae..6840a6a69 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v0.2.1 - _TBD_ + + * Add postpublish utils + ## v0.2.0 - _February 16, 2018_ * Remove subproviders (#392) diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index fbbcb182f..491ebd95f 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -43,7 +43,9 @@ "@0xproject/utils": "^0.4.1", "ethereumjs-util": "^5.1.2", "lodash": "^4.17.4", + "publish-release": "0xproject/publish-release", "request-promise-native": "^1.0.5", + "semver-sort": "^0.0.4", "web3": "^0.20.0", "web3-provider-engine": "^13.0.1" }, diff --git a/packages/dev-utils/src/globals.d.ts b/packages/dev-utils/src/globals.d.ts index 7b132ee28..9c8a1dc02 100644 --- a/packages/dev-utils/src/globals.d.ts +++ b/packages/dev-utils/src/globals.d.ts @@ -1,2 +1,9 @@ declare module 'web3-provider-engine'; declare module 'web3-provider-engine/subproviders/rpc'; +declare module 'async-child-process'; +declare module 'publish-release'; + +// semver-sort declarations +declare module 'semver-sort' { + const desc: (versions: string[]) => string[]; +} diff --git a/packages/dev-utils/src/index.ts b/packages/dev-utils/src/index.ts index e899ac206..cc3e668a1 100644 --- a/packages/dev-utils/src/index.ts +++ b/packages/dev-utils/src/index.ts @@ -2,3 +2,4 @@ export { RPC } from './rpc'; export { BlockchainLifecycle } from './blockchain_lifecycle'; export { web3Factory } from './web3_factory'; export { constants as devConstants } from './constants'; +export { postpublishUtils } from './postpublish_utils'; diff --git a/packages/dev-utils/src/postpublish_utils.ts b/packages/dev-utils/src/postpublish_utils.ts new file mode 100644 index 000000000..35d046e26 --- /dev/null +++ b/packages/dev-utils/src/postpublish_utils.ts @@ -0,0 +1,86 @@ +import { promisify } from '@0xproject/utils'; +import { execAsync } from 'async-child-process'; +import * as _ from 'lodash'; +import * as publishRelease from 'publish-release'; +import semverSort = require('semver-sort'); + +import { utils } from './utils'; + +const publishReleaseAsync = promisify(publishRelease); +const githubPersonalAccessToken = process.env.GITHUB_PERSONAL_ACCESS_TOKEN_0X_JS; +const generatedDocsDirectoryName = 'generated_docs'; + +export interface TagAndVersion { + tag: string; + version: string; +} + +export const postpublishUtils = { + getLatestTagAndVersionAsync(subPackageName: string): Promise { + const subPackagePrefix = `${subPackageName}@`; + const gitTagsCommand = `git tag -l "${subPackagePrefix}*"`; + return execAsync(gitTagsCommand).then((result: any) => { + if (!_.isEmpty(result.stderr)) { + throw new Error(result.stderr); + } + const tags = result.stdout.trim().split('\n'); + const versions = tags.map((tag: string) => { + return tag.slice(subPackagePrefix.length); + }); + const sortedVersions = semverSort.desc(versions); + const latestVersion = sortedVersions[0]; + const latestTag = subPackagePrefix + latestVersion; + return { + tag: latestTag, + version: latestVersion, + }; + }); + }, + publishReleaseNotesAsync(tag: string, releaseName: string, assets: string[]) { + utils.log('POSTPUBLISH: Releasing ', releaseName, '...'); + return publishReleaseAsync({ + token: githubPersonalAccessToken, + owner: '0xProject', + repo: '0x.js', + tag, + name: releaseName, + notes: 'N/A', + draft: false, + prerelease: false, + reuseRelease: true, + reuseDraftOnly: false, + assets, + }); + }, + getReleaseName(subPackageName: string, version: string): string { + const releaseName = `${subPackageName} v${version}`; + return releaseName; + }, + async standardPostPublishAsync(subPackageName: string): Promise { + const result: TagAndVersion = await this.getLatestTagAndVersionAsync(subPackageName); + const releaseName = this.getReleaseName(subPackageName, result.version); + const assets: string[] = []; + await this.publishReleaseNotesAsync(result.tag, releaseName, assets); + }, + adjustFileIncludePaths(fileIncludes: string[], cwd: string): string[] { + const fileIncludesAdjusted = _.map(fileIncludes, fileInclude => { + let path; + if (_.startsWith(fileInclude, '../')) { + path = `${cwd}/../${fileInclude}`; + } else if (_.startsWith(fileInclude, './')) { + path = `${cwd}/../${fileInclude.substr(2)}`; + } else { + path = `${cwd}/${fileInclude}`; + } + + // HACK: tsconfig.json needs wildcard directory endings as `/**/*` + // but TypeDoc needs it as `/**` in order to pick up files at the root + if (_.endsWith(path, '/**/*')) { + path = path.slice(0, -2); + } + return path; + }); + return fileIncludesAdjusted; + }, + generatedDocsDirectoryName, +}; diff --git a/packages/dev-utils/src/utils.ts b/packages/dev-utils/src/utils.ts new file mode 100644 index 000000000..5423cabd9 --- /dev/null +++ b/packages/dev-utils/src/utils.ts @@ -0,0 +1,5 @@ +export const utils = { + log(...args: any[]): void { + console.log(...args); // tslint:disable-line:no-console + }, +}; -- cgit v1.2.3 From ca25b816fabe15ce1ebc539c0316beba813683b8 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 13 Mar 2018 15:29:12 +0100 Subject: move scripts to monorepro-scripts --- packages/dev-utils/.npmignore | 5 -- packages/dev-utils/package.json | 8 +- packages/dev-utils/scripts/postpublish.js | 5 -- packages/dev-utils/src/globals.d.ts | 10 +-- .../dev-utils/src/monorepo_scripts/postpublish.ts | 6 ++ packages/dev-utils/src/postpublish_utils.ts | 86 ---------------------- packages/dev-utils/src/utils.ts | 5 -- packages/dev-utils/test/.npmignore | 5 ++ 8 files changed, 20 insertions(+), 110 deletions(-) delete mode 100644 packages/dev-utils/.npmignore delete mode 100644 packages/dev-utils/scripts/postpublish.js create mode 100644 packages/dev-utils/src/monorepo_scripts/postpublish.ts delete mode 100644 packages/dev-utils/src/postpublish_utils.ts delete mode 100644 packages/dev-utils/src/utils.ts create mode 100644 packages/dev-utils/test/.npmignore (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/.npmignore b/packages/dev-utils/.npmignore deleted file mode 100644 index 87bc30436..000000000 --- a/packages/dev-utils/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.* -yarn-error.log -/src/ -/scripts/ -tsconfig.json diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 491ebd95f..8912a7330 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -6,11 +6,11 @@ "types": "lib/src/index.d.ts", "scripts": { "build:watch": "tsc -w", - "build": "tsc", + "build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts", "test": "run-s clean build run_mocha", "test:circleci": "yarn test", "run_mocha": "mocha lib/test/**/*_test.js --bail --exit", - "clean": "shx rm -rf lib", + "clean": "shx rm -rf lib scripts", "lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'" }, "license": "Apache-2.0", @@ -23,12 +23,14 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/dev-utils/README.md", "devDependencies": { + "@0xproject/monorepo-scripts": "^0.1.12", "@0xproject/tslint-config": "^0.4.10", "@0xproject/web3-wrapper": "^0.2.1", "@types/lodash": "^4.14.86", "@types/mocha": "^2.2.42", "chai": "^4.0.1", "chai-typescript-typings": "^0.0.4", + "copyfiles": "^1.2.0", "mocha": "^4.0.1", "npm-run-all": "^4.1.2", "shx": "^0.2.2", @@ -43,9 +45,7 @@ "@0xproject/utils": "^0.4.1", "ethereumjs-util": "^5.1.2", "lodash": "^4.17.4", - "publish-release": "0xproject/publish-release", "request-promise-native": "^1.0.5", - "semver-sort": "^0.0.4", "web3": "^0.20.0", "web3-provider-engine": "^13.0.1" }, diff --git a/packages/dev-utils/scripts/postpublish.js b/packages/dev-utils/scripts/postpublish.js deleted file mode 100644 index b3e5407c8..000000000 --- a/packages/dev-utils/scripts/postpublish.js +++ /dev/null @@ -1,5 +0,0 @@ -const postpublish_utils = require('../../../scripts/postpublish_utils'); -const packageJSON = require('../package.json'); - -const subPackageName = packageJSON.name; -postpublish_utils.standardPostPublishAsync(subPackageName); \ No newline at end of file diff --git a/packages/dev-utils/src/globals.d.ts b/packages/dev-utils/src/globals.d.ts index 9c8a1dc02..894e56c58 100644 --- a/packages/dev-utils/src/globals.d.ts +++ b/packages/dev-utils/src/globals.d.ts @@ -1,9 +1,9 @@ declare module 'web3-provider-engine'; declare module 'web3-provider-engine/subproviders/rpc'; -declare module 'async-child-process'; -declare module 'publish-release'; -// semver-sort declarations -declare module 'semver-sort' { - const desc: (versions: string[]) => string[]; +declare module '*.json' { + const json: any; + /* tslint:disable */ + export default json; + /* tslint:enable */ } diff --git a/packages/dev-utils/src/monorepo_scripts/postpublish.ts b/packages/dev-utils/src/monorepo_scripts/postpublish.ts new file mode 100644 index 000000000..6bd94e71d --- /dev/null +++ b/packages/dev-utils/src/monorepo_scripts/postpublish.ts @@ -0,0 +1,6 @@ +import { postpublishUtils } from '../postpublish_utils'; + +import * as packageJSON from '../package.json'; + +const subPackageName = (packageJSON as any).name; +postpublishUtils.standardPostPublishAsync(subPackageName); diff --git a/packages/dev-utils/src/postpublish_utils.ts b/packages/dev-utils/src/postpublish_utils.ts deleted file mode 100644 index 35d046e26..000000000 --- a/packages/dev-utils/src/postpublish_utils.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { promisify } from '@0xproject/utils'; -import { execAsync } from 'async-child-process'; -import * as _ from 'lodash'; -import * as publishRelease from 'publish-release'; -import semverSort = require('semver-sort'); - -import { utils } from './utils'; - -const publishReleaseAsync = promisify(publishRelease); -const githubPersonalAccessToken = process.env.GITHUB_PERSONAL_ACCESS_TOKEN_0X_JS; -const generatedDocsDirectoryName = 'generated_docs'; - -export interface TagAndVersion { - tag: string; - version: string; -} - -export const postpublishUtils = { - getLatestTagAndVersionAsync(subPackageName: string): Promise { - const subPackagePrefix = `${subPackageName}@`; - const gitTagsCommand = `git tag -l "${subPackagePrefix}*"`; - return execAsync(gitTagsCommand).then((result: any) => { - if (!_.isEmpty(result.stderr)) { - throw new Error(result.stderr); - } - const tags = result.stdout.trim().split('\n'); - const versions = tags.map((tag: string) => { - return tag.slice(subPackagePrefix.length); - }); - const sortedVersions = semverSort.desc(versions); - const latestVersion = sortedVersions[0]; - const latestTag = subPackagePrefix + latestVersion; - return { - tag: latestTag, - version: latestVersion, - }; - }); - }, - publishReleaseNotesAsync(tag: string, releaseName: string, assets: string[]) { - utils.log('POSTPUBLISH: Releasing ', releaseName, '...'); - return publishReleaseAsync({ - token: githubPersonalAccessToken, - owner: '0xProject', - repo: '0x.js', - tag, - name: releaseName, - notes: 'N/A', - draft: false, - prerelease: false, - reuseRelease: true, - reuseDraftOnly: false, - assets, - }); - }, - getReleaseName(subPackageName: string, version: string): string { - const releaseName = `${subPackageName} v${version}`; - return releaseName; - }, - async standardPostPublishAsync(subPackageName: string): Promise { - const result: TagAndVersion = await this.getLatestTagAndVersionAsync(subPackageName); - const releaseName = this.getReleaseName(subPackageName, result.version); - const assets: string[] = []; - await this.publishReleaseNotesAsync(result.tag, releaseName, assets); - }, - adjustFileIncludePaths(fileIncludes: string[], cwd: string): string[] { - const fileIncludesAdjusted = _.map(fileIncludes, fileInclude => { - let path; - if (_.startsWith(fileInclude, '../')) { - path = `${cwd}/../${fileInclude}`; - } else if (_.startsWith(fileInclude, './')) { - path = `${cwd}/../${fileInclude.substr(2)}`; - } else { - path = `${cwd}/${fileInclude}`; - } - - // HACK: tsconfig.json needs wildcard directory endings as `/**/*` - // but TypeDoc needs it as `/**` in order to pick up files at the root - if (_.endsWith(path, '/**/*')) { - path = path.slice(0, -2); - } - return path; - }); - return fileIncludesAdjusted; - }, - generatedDocsDirectoryName, -}; diff --git a/packages/dev-utils/src/utils.ts b/packages/dev-utils/src/utils.ts deleted file mode 100644 index 5423cabd9..000000000 --- a/packages/dev-utils/src/utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const utils = { - log(...args: any[]): void { - console.log(...args); // tslint:disable-line:no-console - }, -}; diff --git a/packages/dev-utils/test/.npmignore b/packages/dev-utils/test/.npmignore new file mode 100644 index 000000000..87bc30436 --- /dev/null +++ b/packages/dev-utils/test/.npmignore @@ -0,0 +1,5 @@ +.* +yarn-error.log +/src/ +/scripts/ +tsconfig.json -- cgit v1.2.3 From c3b4359e8751a9c98a6081659a364fc29e69653d Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 13 Mar 2018 16:36:05 +0100 Subject: small fixes --- packages/dev-utils/src/index.ts | 1 - packages/dev-utils/src/monorepo_scripts/postpublish.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/src/index.ts b/packages/dev-utils/src/index.ts index cc3e668a1..e899ac206 100644 --- a/packages/dev-utils/src/index.ts +++ b/packages/dev-utils/src/index.ts @@ -2,4 +2,3 @@ export { RPC } from './rpc'; export { BlockchainLifecycle } from './blockchain_lifecycle'; export { web3Factory } from './web3_factory'; export { constants as devConstants } from './constants'; -export { postpublishUtils } from './postpublish_utils'; diff --git a/packages/dev-utils/src/monorepo_scripts/postpublish.ts b/packages/dev-utils/src/monorepo_scripts/postpublish.ts index 6bd94e71d..d5fcff9d0 100644 --- a/packages/dev-utils/src/monorepo_scripts/postpublish.ts +++ b/packages/dev-utils/src/monorepo_scripts/postpublish.ts @@ -1,4 +1,4 @@ -import { postpublishUtils } from '../postpublish_utils'; +import { postpublishUtils } from '@0xproject/monorepo-scripts'; import * as packageJSON from '../package.json'; -- cgit v1.2.3 From a2e848a7fafbae4df51de6f05fd53a6abf78a593 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 13 Mar 2018 16:55:50 +0100 Subject: Fix lint issues --- packages/dev-utils/src/monorepo_scripts/postpublish.ts | 1 + 1 file changed, 1 insertion(+) (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/src/monorepo_scripts/postpublish.ts b/packages/dev-utils/src/monorepo_scripts/postpublish.ts index d5fcff9d0..6e5aa050a 100644 --- a/packages/dev-utils/src/monorepo_scripts/postpublish.ts +++ b/packages/dev-utils/src/monorepo_scripts/postpublish.ts @@ -3,4 +3,5 @@ import { postpublishUtils } from '@0xproject/monorepo-scripts'; import * as packageJSON from '../package.json'; const subPackageName = (packageJSON as any).name; +// tslint:disable-next-line:no-floating-promises postpublishUtils.standardPostPublishAsync(subPackageName); -- cgit v1.2.3 From a08ae722c112e3bbd257bcf1606e3cf962266eae Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 13 Mar 2018 17:04:38 +0100 Subject: Move changelog entry --- packages/dev-utils/CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 6840a6a69..ecc5546ae 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,9 +1,5 @@ # CHANGELOG -## v0.2.1 - _TBD_ - - * Add postpublish utils - ## v0.2.0 - _February 16, 2018_ * Remove subproviders (#392) -- cgit v1.2.3 From f7c1e10b5ac112866ee55e7fededdb37c890d30f Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 14 Mar 2018 14:07:24 +0100 Subject: Move configuration into package.json configs section --- packages/dev-utils/src/monorepo_scripts/postpublish.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/src/monorepo_scripts/postpublish.ts b/packages/dev-utils/src/monorepo_scripts/postpublish.ts index 6e5aa050a..dcb99d0f7 100644 --- a/packages/dev-utils/src/monorepo_scripts/postpublish.ts +++ b/packages/dev-utils/src/monorepo_scripts/postpublish.ts @@ -1,7 +1,8 @@ import { postpublishUtils } from '@0xproject/monorepo-scripts'; import * as packageJSON from '../package.json'; +import * as tsConfigJSON from '../tsconfig.json'; -const subPackageName = (packageJSON as any).name; +const cwd = `${__dirname}/..`; // tslint:disable-next-line:no-floating-promises -postpublishUtils.standardPostPublishAsync(subPackageName); +postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd); -- cgit v1.2.3 From 40ebb533b324bf7dd454243fcb1ee092ab85f7eb Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 14 Mar 2018 12:27:09 +0100 Subject: Enable coverage for all other packages with tests --- packages/dev-utils/coverage/.gitkeep | 0 packages/dev-utils/package.json | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 packages/dev-utils/coverage/.gitkeep (limited to 'packages/dev-utils') diff --git a/packages/dev-utils/coverage/.gitkeep b/packages/dev-utils/coverage/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index f9fc4e619..bfe752982 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -8,8 +8,10 @@ "build:watch": "tsc -w", "build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts", "test": "run-s clean build run_mocha", - "test:circleci": "yarn test", + "test:circleci": "yarn test:coverage", "run_mocha": "mocha lib/test/**/*_test.js --bail --exit", + "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov", + "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info", "clean": "shx rm -rf lib scripts", "lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'" }, @@ -28,6 +30,7 @@ "@0xproject/web3-wrapper": "^0.2.1", "@types/lodash": "^4.14.86", "@types/mocha": "^2.2.42", + "nyc": "^11.0.1", "chai": "^4.0.1", "chai-typescript-typings": "^0.0.4", "copyfiles": "^1.2.0", -- cgit v1.2.3