aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2017-11-18 08:30:51 +0800
committerGitHub <noreply@github.com>2017-11-18 08:30:51 +0800
commit98394c6e37ee2538f18d7c427fd72cbf23f3207d (patch)
tree188aa6be60a37ad0d7e53edcfc7c9975f93fa845
parent5042b85d218bd17dcf0ebf9b3127dd30c5bb5962 (diff)
parent37a9b64503edc8fe750dad02a7a45d8303f9ba04 (diff)
downloaddexon-0x-contracts-98394c6e37ee2538f18d7c427fd72cbf23f3207d.tar.gz
dexon-0x-contracts-98394c6e37ee2538f18d7c427fd72cbf23f3207d.tar.zst
dexon-0x-contracts-98394c6e37ee2538f18d7c427fd72cbf23f3207d.zip
Merge pull request #228 from 0xProject/feature/publishLifecycleScripts
Add postpublish scripts for sub-packages
-rw-r--r--package.json9
-rw-r--r--packages/0x.js/package.json10
-rw-r--r--packages/0x.js/scripts/postpublish.js43
-rw-r--r--packages/assert/scripts/postpublish.js14
-rw-r--r--packages/connect/scripts/postpublish.js14
-rw-r--r--packages/json-schemas/scripts/postpublish.js14
-rw-r--r--packages/tslint-config/scripts/postpublish.js14
-rw-r--r--scripts/postpublish_utils.js51
-rw-r--r--yarn.lock35
9 files changed, 185 insertions, 19 deletions
diff --git a/package.json b/package.json
index 49c97eff6..265e0459e 100644
--- a/package.json
+++ b/package.json
@@ -6,12 +6,17 @@
],
"scripts": {
"testrpc": "testrpc -p 8545 --networkId 50 -m \"${npm_package_config_mnemonic}\"",
- "lerna:run": "lerna run"
+ "lerna:run": "lerna run",
+ "lerna:publish": "lerna run clean; lerna run build; lerna publish"
},
"config": {
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
},
"devDependencies": {
- "lerna": "^2.5.1"
+ "lerna": "^2.5.1",
+ "async-child-process": "^1.1.1",
+ "semver-sort": "^0.0.4",
+ "publish-release": "0xproject/publish-release",
+ "es6-promisify": "^5.0.0"
}
}
diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json
index 0204d723f..7aa360954 100644
--- a/packages/0x.js/package.json
+++ b/packages/0x.js/package.json
@@ -14,10 +14,8 @@
"scripts": {
"prebuild": "npm run clean",
"build": "run-p build:umd:prod build:commonjs; exit 0;",
- "prepublishOnly": "run-p build",
- "postpublish": "run-s release docs:json upload_docs_json",
- "release": "publish-release --assets _bundles/index.js,_bundles/index.min.js --tag $(git describe --tags) --owner 0xProject --repo 0x.js",
- "upload_docs_json": "aws s3 cp docs/index.json s3://0xjs-docs-jsons/$(git describe --tags).json --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type aplication/json",
+ "docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_DIR",
+ "upload_docs_json": "aws s3 cp docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type aplication/json",
"lint": "tslint src/**/*.ts test/**/*.ts",
"test:circleci": "run-s test:coverage report_test_coverage; if [ $CIRCLE_BRANCH = \"development\" ]; then yarn test:umd; fi",
"test": "run-s clean test:commonjs",
@@ -25,9 +23,6 @@
"test:coverage": "nyc npm run test --all",
"report_test_coverage": "nyc report --reporter=text-lcov | coveralls",
"update_contracts": "for i in ${npm_package_config_artifacts}; do copyfiles -u 4 ../contracts/build/contracts/$i.json ../0x.js/src/artifacts; done;",
- "docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json docs/index.json .",
- "docs:generate": "typedoc --out docs .",
- "docs:open": "opn docs/index.html",
"clean": "shx rm -rf _bundles lib test_temp",
"build:umd:dev": "webpack",
"build:umd:prod": "NODE_ENV=production webpack",
@@ -99,7 +94,6 @@
"find-versions": "^2.0.0",
"js-sha3": "^0.6.1",
"lodash": "^4.17.4",
- "publish-release": "^1.3.3",
"uuid": "^3.1.0",
"web3": "^0.20.0"
}
diff --git a/packages/0x.js/scripts/postpublish.js b/packages/0x.js/scripts/postpublish.js
new file mode 100644
index 000000000..ffc68afb4
--- /dev/null
+++ b/packages/0x.js/scripts/postpublish.js
@@ -0,0 +1,43 @@
+const execAsync = require('async-child-process').execAsync;
+const postpublish_utils = require('../../../scripts/postpublish_utils');
+const packageJSON = require('../package.json');
+
+const cwd = __dirname + '/..';
+const subPackageName = packageJSON.name;
+const S3BucketPath = 's3://0xjs-docs-jsons/';
+
+let tag;
+let version;
+postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
+ .then(function(result) {
+ tag = result.tag;
+ version = result.version;
+ const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
+ const assets = [
+ __dirname + '/../_bundles/index.js',
+ __dirname + '/../_bundles/index.min.js',
+ ];
+ return postpublish_utils.publishReleaseNotes(tag, releaseName, assets);
+ })
+ .then(function(release) {
+ console.log('POSTPUBLISH: Release successful, generating docs...');
+ return execAsync(
+ 'JSON_FILE_PATH=' + __dirname + '/../docs/index.json PROJECT_DIR=' + __dirname + '/.. yarn docs:json',
+ {
+ cwd,
+ }
+ );
+ })
+ .then(function(result) {
+ if (result.stderr !== '') {
+ throw new Error(result.stderr);
+ }
+ const fileName = 'v' + version + '.json';
+ console.log('POSTPUBLISH: Doc generation successful, uploading docs... as ', fileName);
+ const s3Url = S3BucketPath + fileName;
+ return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
+ cwd,
+ });
+ }).catch (function(err) {
+ throw err;
+ });
diff --git a/packages/assert/scripts/postpublish.js b/packages/assert/scripts/postpublish.js
new file mode 100644
index 000000000..7fa452b08
--- /dev/null
+++ b/packages/assert/scripts/postpublish.js
@@ -0,0 +1,14 @@
+const postpublish_utils = require('../../../scripts/postpublish_utils');
+const packageJSON = require('../package.json');
+
+const subPackageName = packageJSON.name;
+
+postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
+ .then(function(result) {
+ const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
+ const assets = [];
+ return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
+ })
+ .catch (function(err) {
+ throw err;
+ });
diff --git a/packages/connect/scripts/postpublish.js b/packages/connect/scripts/postpublish.js
new file mode 100644
index 000000000..7fa452b08
--- /dev/null
+++ b/packages/connect/scripts/postpublish.js
@@ -0,0 +1,14 @@
+const postpublish_utils = require('../../../scripts/postpublish_utils');
+const packageJSON = require('../package.json');
+
+const subPackageName = packageJSON.name;
+
+postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
+ .then(function(result) {
+ const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
+ const assets = [];
+ return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
+ })
+ .catch (function(err) {
+ throw err;
+ });
diff --git a/packages/json-schemas/scripts/postpublish.js b/packages/json-schemas/scripts/postpublish.js
new file mode 100644
index 000000000..7fa452b08
--- /dev/null
+++ b/packages/json-schemas/scripts/postpublish.js
@@ -0,0 +1,14 @@
+const postpublish_utils = require('../../../scripts/postpublish_utils');
+const packageJSON = require('../package.json');
+
+const subPackageName = packageJSON.name;
+
+postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
+ .then(function(result) {
+ const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
+ const assets = [];
+ return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
+ })
+ .catch (function(err) {
+ throw err;
+ });
diff --git a/packages/tslint-config/scripts/postpublish.js b/packages/tslint-config/scripts/postpublish.js
new file mode 100644
index 000000000..7fa452b08
--- /dev/null
+++ b/packages/tslint-config/scripts/postpublish.js
@@ -0,0 +1,14 @@
+const postpublish_utils = require('../../../scripts/postpublish_utils');
+const packageJSON = require('../package.json');
+
+const subPackageName = packageJSON.name;
+
+postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
+ .then(function(result) {
+ const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
+ const assets = [];
+ return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
+ })
+ .catch (function(err) {
+ throw err;
+ });
diff --git a/scripts/postpublish_utils.js b/scripts/postpublish_utils.js
new file mode 100644
index 000000000..3fb079bad
--- /dev/null
+++ b/scripts/postpublish_utils.js
@@ -0,0 +1,51 @@
+const execAsync = require('async-child-process').execAsync;
+const semverSort = require('semver-sort');
+const promisify = require('es6-promisify');
+const publishRelease = require('publish-release');
+
+const publishReleaseAsync = promisify(publishRelease);
+const githubPersonalAccessToken = process.env.GITHUB_PERSONAL_ACCESS_TOKEN_0X_JS;
+
+module.exports = {
+ getLatestTagAndVersionAsync: function(subPackageName) {
+ const subPackagePrefix = subPackageName + '@';
+ const gitTagsCommand = 'git tags -l "' + subPackagePrefix + '*"';
+ return execAsync(gitTagsCommand)
+ .then(function(result) {
+ if (result.stderr !== '') {
+ throw new Error(result.stderr);
+ }
+ const tags = result.stdout.trim().split('\n');
+ const versions = tags.map(function(tag) {
+ return tag.slice(subPackagePrefix.length);
+ });
+ const sortedVersions = semverSort.desc(versions);
+ const latestVersion = sortedVersions[0];
+ const latestTag = subPackagePrefix + latestVersion;
+ return {
+ tag: latestTag,
+ version: latestVersion
+ };
+ });
+ },
+ publishReleaseNotes: function(tag, releaseName, assets) {
+ console.log('POSTPUBLISH: Releasing ', releaseName, '...');
+ return publishReleaseAsync({
+ token: githubPersonalAccessToken,
+ owner: '0xProject',
+ repo: '0x.js',
+ tag: tag,
+ name: releaseName,
+ notes: 'TODO',
+ draft: false,
+ prerelease: false,
+ reuseRelease: true,
+ reuseDraftOnly: false,
+ assets: assets,
+ });
+ },
+ getReleaseName(subPackageName, version) {
+ const releaseName = subPackageName + ' v' + version;
+ return releaseName;
+ },
+};
diff --git a/yarn.lock b/yarn.lock
index d10468fed..6bc4ccf1b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,8 +7,8 @@
resolved "https://registry.yarnpkg.com/@types/fetch-mock/-/fetch-mock-5.12.2.tgz#8c96517ff74303031c65c5da2d99858e34c844d2"
"@types/fs-extra@^4.0.0":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.4.tgz#72947e108f2cbeda5ab288a927399fdf6d02bd42"
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.5.tgz#8aa6033c0e87c653b09a6711686916864b48ec9e"
dependencies:
"@types/node" "*"
@@ -53,7 +53,11 @@
version "0.0.28"
resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.0.28.tgz#44ba754e9fa51432583e8eb30a7c4dd249b52faa"
-"@types/minimatch@*", "@types/minimatch@^2.0.29":
+"@types/minimatch@*":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.1.tgz#b683eb60be358304ef146f5775db4c0e3696a550"
+
+"@types/minimatch@^2.0.29":
version "2.0.29"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
@@ -70,8 +74,8 @@
resolved "https://registry.yarnpkg.com/@types/query-string/-/query-string-5.0.1.tgz#6cb41c724cb1644d56c2d1dae7c7b204e706b39e"
"@types/shelljs@^0.7.0":
- version "0.7.5"
- resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.5.tgz#5834fb7385d1137bd2be5842f2c278ac36a117f4"
+ version "0.7.6"
+ resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.6.tgz#4ac7ca01c191ba65b8e2bf50543c5560084d8d27"
dependencies:
"@types/glob" "*"
"@types/node" "*"
@@ -323,6 +327,12 @@ assertion-error@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+async-child-process@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/async-child-process/-/async-child-process-1.1.1.tgz#27d0a598b5738707f9898c048bd231340583747b"
+ dependencies:
+ babel-runtime "^6.11.6"
+
async-each@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
@@ -740,7 +750,7 @@ babel-register@^6.26.0:
mkdirp "^0.5.1"
source-map-support "^0.4.15"
-babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
@@ -4500,9 +4510,9 @@ public-encrypt@^4.0.0:
parse-asn1 "^5.0.0"
randombytes "^2.0.1"
-publish-release@^1.3.3:
+publish-release@0xproject/publish-release:
version "1.3.3"
- resolved "https://registry.yarnpkg.com/publish-release/-/publish-release-1.3.3.tgz#6cd11df835e14c13b0e08a35d3fb992b918bec3c"
+ resolved "https://codeload.github.com/0xproject/publish-release/tar.gz/c67c546726deecabd0cb35f9873afc912f862bd3"
dependencies:
async "^0.9.0"
ghauth "^2.0.0"
@@ -4979,7 +4989,14 @@ semver-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9"
-"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@~5.4.1:
+semver-sort@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/semver-sort/-/semver-sort-0.0.4.tgz#34fdbddc6a6b2b4161398c3c4dba56243bfeaa8b"
+ dependencies:
+ semver "^5.0.3"
+ semver-regex "^1.0.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@~5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"