aboutsummaryrefslogtreecommitdiffstats
path: root/packages/monorepo-scripts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/monorepo-scripts')
-rw-r--r--packages/monorepo-scripts/package.json3
-rw-r--r--packages/monorepo-scripts/src/constants.ts1
-rw-r--r--packages/monorepo-scripts/src/globals.d.ts6
-rw-r--r--packages/monorepo-scripts/src/publish.ts58
4 files changed, 68 insertions, 0 deletions
diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json
index b113b4b39..5c0e5a411 100644
--- a/packages/monorepo-scripts/package.json
+++ b/packages/monorepo-scripts/package.json
@@ -29,6 +29,7 @@
"@0xproject/tslint-config": "0.4.13",
"@types/glob": "^5.0.33",
"@types/node": "^8.0.53",
+ "@types/opn": "^5.1.0",
"@types/rimraf": "^2.0.2",
"depcheck": "^0.6.9",
"lerna-get-packages": "^1.0.0",
@@ -45,7 +46,9 @@
"glob": "^7.1.2",
"lodash": "^4.17.4",
"moment": "2.21.0",
+ "opn": "^5.3.0",
"promisify-child-process": "^1.0.5",
+ "prompt": "^1.0.0",
"publish-release": "0xproject/publish-release",
"rimraf": "^2.6.2",
"semver-diff": "^2.1.0",
diff --git a/packages/monorepo-scripts/src/constants.ts b/packages/monorepo-scripts/src/constants.ts
index 74387a159..081a49332 100644
--- a/packages/monorepo-scripts/src/constants.ts
+++ b/packages/monorepo-scripts/src/constants.ts
@@ -2,4 +2,5 @@ import * as path from 'path';
export const constants = {
monorepoRootPath: path.join(__dirname, '../../..'),
+ stagingWebsite: 'http://staging-0xproject.s3-website-us-east-1.amazonaws.com',
};
diff --git a/packages/monorepo-scripts/src/globals.d.ts b/packages/monorepo-scripts/src/globals.d.ts
index c5898d0f5..1693a6dbb 100644
--- a/packages/monorepo-scripts/src/globals.d.ts
+++ b/packages/monorepo-scripts/src/globals.d.ts
@@ -3,6 +3,11 @@ declare module 'publish-release';
declare module 'es6-promisify';
declare module 'semver-diff';
+declare module 'prompt' {
+ const start: () => void;
+ const get: (promptMessages: string[], callback: (err: Error, result: string) => void) => void;
+}
+
// semver-sort declarations
declare module 'semver-sort' {
const desc: (versions: string[]) => string[];
@@ -15,6 +20,7 @@ declare interface LernaPackage {
version: string;
name: string;
main?: string;
+ scripts?: { [command: string]: string };
config?: {
additionalTsTypings?: string[];
};
diff --git a/packages/monorepo-scripts/src/publish.ts b/packages/monorepo-scripts/src/publish.ts
index f0fb00acd..ebc30def4 100644
--- a/packages/monorepo-scripts/src/publish.ts
+++ b/packages/monorepo-scripts/src/publish.ts
@@ -1,11 +1,14 @@
#!/usr/bin/env node
+import * as promisify from 'es6-promisify';
import * as fs from 'fs';
import lernaGetPackages = require('lerna-get-packages');
import * as _ from 'lodash';
import * as moment from 'moment';
+import opn = require('opn');
import * as path from 'path';
import { exec as execAsync, spawn } from 'promisify-child-process';
+import * as prompt from 'prompt';
import semverDiff = require('semver-diff');
import semverSort = require('semver-sort');
@@ -13,6 +16,8 @@ import { constants } from './constants';
import { Changelog, Changes, PackageToVersionChange, SemVerIndex, UpdatedPackage } from './types';
import { utils } from './utils';
+const DOC_GEN_COMMAND = 'docs:json';
+const NPM_NAMESPACE = '@0xproject/';
const IS_DRY_RUN = process.env.IS_DRY_RUN === 'true';
const TODAYS_TIMESTAMP = moment().unix();
const LERNA_EXECUTABLE = './node_modules/lerna/bin/lerna.js';
@@ -21,11 +26,23 @@ const semverNameToIndex: { [semver: string]: number } = {
minor: SemVerIndex.Minor,
major: SemVerIndex.Major,
};
+const packageNameToWebsitePath: { [name: string]: string } = {
+ '0x.js': '0xjs',
+ 'web3-wrapper': 'web3_wrapper',
+ contracts: 'contracts',
+ connect: 'connect',
+ 'json-schemas': 'json-schemas',
+ deployer: 'deployer',
+ 'sol-cov': 'sol-cov',
+ subproviders: 'subproviders',
+};
(async () => {
// Fetch public, updated Lerna packages
const updatedPublicLernaPackages = await getUpdatedPublicLernaPackagesAsync();
+ await confirmDocPagesRenderAsync(updatedPublicLernaPackages);
+
// Update CHANGELOGs
const updatedPublicLernaPackageNames = _.map(updatedPublicLernaPackages, pkg => pkg.package.name);
utils.log(`Will update CHANGELOGs and publish: \n${updatedPublicLernaPackageNames.join('\n')}\n`);
@@ -48,6 +65,47 @@ const semverNameToIndex: { [semver: string]: number } = {
process.exit(1);
});
+async function confirmDocPagesRenderAsync(packages: LernaPackage[]) {
+ // push docs to staging
+ utils.log("Upload all docJson's to S3 staging...");
+ await execAsync(`yarn lerna:stage_docs`, { cwd: constants.monorepoRootPath });
+
+ // deploy website to staging
+ utils.log('Deploy website to staging...');
+ const pathToWebsite = `${constants.monorepoRootPath}/packages/website`;
+ await execAsync(`yarn deploy_staging`, { cwd: pathToWebsite });
+
+ const packagesWithDocs = _.filter(packages, pkg => {
+ const scriptsIfExists = pkg.package.scripts;
+ if (_.isUndefined(scriptsIfExists)) {
+ throw new Error('Found a public package without any scripts in package.json');
+ }
+ return !_.isUndefined(scriptsIfExists[DOC_GEN_COMMAND]);
+ });
+ _.each(packagesWithDocs, pkg => {
+ const name = pkg.package.name;
+ const nameWithoutPrefix = _.startsWith(name, NPM_NAMESPACE) ? name.split('@0xproject/')[1] : name;
+ const docSegmentIfExists = packageNameToWebsitePath[nameWithoutPrefix];
+ if (_.isUndefined(docSegmentIfExists)) {
+ throw new Error(
+ `Found package '${name}' with doc commands but no corresponding docSegment in monorepo_scripts
+package.ts. Please add an entry for it and try again.`,
+ );
+ }
+ const link = `${constants.stagingWebsite}/docs/${docSegmentIfExists}`;
+ opn(link);
+ });
+
+ prompt.start();
+ const message = 'Do all the doc pages render properly? (yn)';
+ const result = await promisify(prompt.get)([message]);
+ const didConfirm = result[message] === 'y';
+ if (!didConfirm) {
+ utils.log('Publish process aborted.');
+ process.exit(0);
+ }
+}
+
async function pushChangelogsToGithubAsync() {
await execAsync(`git add . --all`, { cwd: constants.monorepoRootPath });
await execAsync(`git commit -m "Updated CHANGELOGS"`, { cwd: constants.monorepoRootPath });