From 70f87ea00295424281f1a60bd757ef89d4f931d9 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 30 Oct 2016 09:55:46 +0100 Subject: [PATCH] Publish parity.js to npmjs registry (#2978) * Skeleton packages * Publish parity.js package to npm * [ci skip] js-precompiled 20161029-190427 * Extra step information * [ci skip] js-precompiled 20161029-192209 * Use autToken for npmjs (cannot run headless in docker) * [ci skip] js-precompiled 20161029-193414 * Correct package.json structure * [ci skip] js-precompiled 20161029-194003 * Scope package to public * [ci skip] js-precompiled 20161029-194529 * Start package version at 0.1.0 * Build proper umd library * [ci skip] js-precompiled 20161029-231233 * Update build/release stage * [ci skip] js-precompiled 20161030-071454 * Basic README.md to satisfy npmjs * [ci skip] js-precompiled 20161030-073150 * CommonJs format * [ci skip] js-precompiled 20161030-075034 * Update README.md * update dependencies * [ci skip] js-precompiled 20161030-075727 * Starting package version * Build only on master --- .gitlab-ci.yml | 23 ++++++------ js/.gitignore | 1 + js/package.json | 13 ++++--- js/parity.md | 81 +++++++++++++++++++++++++++++++++++++++++ js/parity.package.json | 32 +++++++++++++++++ js/scripts/release.sh | 71 +++++++++++++++++++++++------------- js/src/library.js | 23 ++++++++++++ js/webpack.npm.js | 82 ++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 282 insertions(+), 44 deletions(-) create mode 100644 js/parity.md create mode 100644 js/parity.package.json create mode 100644 js/src/library.js create mode 100644 js/webpack.npm.js diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 424f933fe..1d69dbce0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,7 @@ stages: - test variables: GIT_DEPTH: "3" - SIMPLECOV: "true" + SIMPLECOV: "true" RUST_BACKTRACE: "1" RUSTFLAGS: "-D warnings" cache: @@ -26,7 +26,7 @@ linux-stable: - export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n") - dpkg-deb -b deb "parity_"$VER"_amd64.deb" - md5sum "parity_"$VER"_amd64.deb" >> "parity_"$VER"_amd64.deb.md5" - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity.md5 --body parity.md5 @@ -56,7 +56,7 @@ linux-stable-14.04: - export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n") - dpkg-deb -b deb "parity_"$VER"_amd64.deb" - md5sum "parity_"$VER"_amd64.deb" >> "parity_"$VER"_amd64.deb.md5" - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity.md5 --body parity.md5 @@ -121,7 +121,7 @@ linux-centos: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity.md5 --body parity.md5 @@ -158,7 +158,7 @@ linux-armv7: - export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n") - dpkg-deb -b deb "parity_"$VER"_armhf.deb" - md5sum "parity_"$VER"_armhf.deb" >> "parity_"$VER"_armhf.deb.md5" - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity --body target/armv7-unknown-linux-gnueabihf/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity.md5 --body parity.md5 @@ -198,7 +198,7 @@ linux-arm: - export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n") - dpkg-deb -b deb "parity_"$VER"_armhf.deb" - md5sum "parity_"$VER"_armhf.deb" >> "parity_"$VER"_armhf.deb.md5" - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity --body target/arm-unknown-linux-gnueabihf/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity.md5 --body parity.md5 @@ -231,8 +231,8 @@ linux-armv6: - cat .cargo/config - cargo build --target arm-unknown-linux-gnueabi --release --verbose - arm-linux-gnueabi-strip target/arm-unknown-linux-gnueabi/release/parity - - md5sum target/arm-unknown-linux-gnueabi/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - md5sum target/arm-unknown-linux-gnueabi/release/parity >> parity.md5 + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity --body target/arm-unknown-linux-gnueabi/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity.md5 --body parity.md5 @@ -270,7 +270,7 @@ linux-aarch64: - export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n") - dpkg-deb -b deb "parity_"$VER"_arm64.deb" - md5sum "parity_"$VER"_arm64.deb" >> "parity_"$VER"_arm64.deb.md5" - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity --body target/aarch64-unknown-linux-gnu/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity.md5 --body parity.md5 @@ -295,7 +295,7 @@ darwin: - cargo build --release --verbose - rm -rf parity.md5 - md5sum target/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity.md5 --body parity.md5 @@ -391,9 +391,6 @@ js-release: image: ethcore/javascript:latest only: - master - - beta - - tags - - stable before_script: - ./js/scripts/install-deps.sh script: diff --git a/js/.gitignore b/js/.gitignore index b3ece001c..acb73a82a 100644 --- a/js/.gitignore +++ b/js/.gitignore @@ -5,3 +5,4 @@ build .coverage .dist .happypack +.npmjs diff --git a/js/package.json b/js/package.json index 12244daa5..7896f5c05 100644 --- a/js/package.json +++ b/js/package.json @@ -1,9 +1,9 @@ { "name": "parity.js", - "version": "0.0.1", + "version": "0.1.0", "main": "release/index.js", "jsnext:main": "src/index.js", - "author": "Ethcore Team ", + "author": "Parity Team ", "maintainers": [ "Jaco Greeff" ], @@ -11,7 +11,7 @@ "license": "GPL-3.0", "repository": { "type": "git", - "url": "git+https://github.com/ethcore/parity.js.git" + "url": "git+https://github.com/ethcore/parity.git" }, "keywords": [ "Ethereum", @@ -27,15 +27,13 @@ "build:app": "webpack --progress", "build:lib": "webpack --config webpack.libraries --progress", "build:dll": "webpack --config webpack.vendor --progress", - "ci:build": "npm run ci:build:dll && npm run ci:build:app && npm run ci:build:lib", "ci:build:app": "NODE_ENV=production webpack", "ci:build:lib": "NODE_ENV=production webpack --config webpack.libraries", "ci:build:dll": "NODE_ENV=production webpack --config webpack.vendor", - + "ci:build:npm": "NODE_ENV=production webpack --config webpack.npm", "start": "npm install && npm run build:dll && npm run start:app", "start:app": "webpack-dev-server -d --history-api-fallback --open --hot --inline --progress --colors --port 3000", - "clean": "rm -rf ./build ./coverage", "coveralls": "npm run testCoverage && coveralls < coverage/lcov.info", "lint": "eslint --ignore-path .gitignore ./src/", @@ -65,7 +63,7 @@ "chai": "^3.5.0", "chai-enzyme": "0.4.2", "cheerio": "0.20.0", - "copy-webpack-plugin": "^3.0.1", + "copy-webpack-plugin": "^4.0.0", "core-js": "^2.4.1", "coveralls": "^2.11.11", "css-loader": "^0.23.1", @@ -79,6 +77,7 @@ "eslint-plugin-standard": "^2.0.0", "extract-text-webpack-plugin": "^1.0.1", "file-loader": "^0.8.5", + "fs-extra": "^0.30.0", "happypack": "^2.2.1", "history": "^2.0.0", "html-loader": "^0.4.3", diff --git a/js/parity.md b/js/parity.md new file mode 100644 index 000000000..3e42f5c8d --- /dev/null +++ b/js/parity.md @@ -0,0 +1,81 @@ +# parity.js + +Parity.js is a thin, fast, Promise-based wrapper around the Ethereum APIs. + +## installation + +Install the package with `npm install --save @parity/parity.js` + +## usage + +### initialisation + +```javascript +// import the actual Api class +import { Api } from '@parity/parity.js'; + +// do the setup +const transport = new Api.Transport.Http('http://localhost:8545'); +const api = new Api(transport); +``` + +### making calls + +perform a call + +```javascript +api.eth + .coinbase() + .then((coinbase) => { + console.log(`The coinbase is ${coinbase}`); + }); +``` + +multiple promises + +```javascript +Promise + .all([ + api.eth.coinbase(), + api.net.listening() + ]) + .then(([coinbase, listening]) => { + // do stuff here + }); +``` + +chaining promises + +```javascript +api.eth + .newFilter({...}) + .then((filterId) => api.eth.getFilterChanges(filterId)) + .then((changes) => { + console.log(changes); + }); +``` + +### contracts + +attach contract + +```javascript +const abi = [{ name: 'callMe', inputs: [{ type: 'bool', ...}, { type: 'string', ...}]}, ...abi...]; +const address = '0x123456...9abc'; +const contract = new api.newContract(abi, address); +``` + +find & call a function + +```javascript +contract.instance + .callMe + .call({ gas: 21000 }, [true, 'someString']) // or estimateGas or postTransaction + .then((result) => { + console.log(`the result was ${result}`); + }); +``` + +## apis + +APIs implement the calls as exposed in the [Ethcore JSON Ethereum RPC](https://github.com/ethcore/ethereum-rpc-json/) definitions. Mapping follows the naming conventions of the originals, i.e. `eth_call` becomes `eth.call`, `personal_accounts` becomes `personal.accounts`, etc. diff --git a/js/parity.package.json b/js/parity.package.json new file mode 100644 index 000000000..7d18cc5ed --- /dev/null +++ b/js/parity.package.json @@ -0,0 +1,32 @@ +{ + "name": "@parity/parity.js", + "description": "The Parity Promise-base API & ABI library for interfacing with Ethereum over RPC", + "version": "0.0.0", + "main": "library.js", + "author": "Parity Team ", + "maintainers": [ + "Jaco Greeff" + ], + "contributors": [], + "license": "GPL-3.0", + "repository": { + "type": "git", + "url": "git+https://github.com/ethcore/parity.git" + }, + "keywords": [ + "Ethereum", + "ABI", + "API", + "RPC", + "Parity", + "Promise" + ], + "scripts": { + }, + "devDependencies": { + }, + "dependencies": { + "bignumber.js": "^2.3.0", + "js-sha3": "^0.5.2" + } +} diff --git a/js/scripts/release.sh b/js/scripts/release.sh index 95e561b77..22fd91ab6 100755 --- a/js/scripts/release.sh +++ b/js/scripts/release.sh @@ -1,11 +1,18 @@ #!/bin/bash set -e +# variables +UTCDATE=`date -u "+%Y%m%d-%H%M%S"` +PACKAGES=( "parity.js" ) +BRANCH=$CI_BUILD_REF_NAME +GIT_JS_PRECOMPILED="https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/js-precompiled.git" +GIT_PARITY="https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/parity.git" + # setup the git user defaults for the current repo function setup_git_user { git config push.default simple git config merge.ours.driver true - git config user.email "jaco+gitlab@ethcore.io" + git config user.email "$GITHUB_EMAIL" git config user.name "GitLab Build Bot" } @@ -15,47 +22,63 @@ GITLOG=./.git/gitcommand.log pushd $BASEDIR cd ../.dist -# variables -UTCDATE=`date -u "+%Y%m%d-%H%M%S"` - -# init git +# add local files and send it up +echo "*** Setting up GitHub config for js-precompiled" rm -rf ./.git git init - -# add local files and send it up -echo "Setting up GitHub config for js-precompiled" setup_git_user -echo "Checking out $CI_BUILD_REF_NAME branch" -git remote add origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/js-precompiled.git +echo "*** Checking out $BRANCH branch" +git remote add origin $GIT_JS_PRECOMPILED git fetch origin 2>$GITLOG -git checkout -b $CI_BUILD_REF_NAME +git checkout -b $BRANCH -echo "Committing compiled files for $UTCDATE" +echo "*** Committing compiled files for $UTCDATE" git add . git commit -m "$UTCDATE" -echo "Merging remote" -git merge origin/$CI_BUILD_REF_NAME -X ours --commit -m "$UTCDATE [release]" -git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG +echo "*** Merging remote" +git merge origin/$BRANCH -X ours --commit -m "$UTCDATE [release]" +git push origin HEAD:refs/heads/$BRANCH 2>$GITLOG PRECOMPILED_HASH=`git rev-parse HEAD` -# back to root -popd +# move to root +cd ../.. -echo "Setting up GitHub config for parity" +echo "*** Setting up GitHub config for parity" setup_git_user -git remote set-url origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/parity.git -git reset --hard origin/$CI_BUILD_REF_NAME 2>$GITLOG +git remote set-url origin $GIT_PARITY +git reset --hard origin/$BRANCH 2>$GITLOG -echo "Updating cargo package parity-ui-precompiled#$PRECOMPILED_HASH" +echo "*** Bumping package.json patch version" +cd js +npm --no-git-tag-version version +npm version patch +cd .. + +echo "*** Updating cargo parity-ui-precompiled#$PRECOMPILED_HASH" cargo update -p parity-ui-precompiled # --precise "$PRECOMPILED_HASH" -echo "Committing updated files" -git add . +echo "*** Committing updated files" +git add Cargo.lock js/package.json git commit -m "[ci skip] js-precompiled $UTCDATE" -git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG +git push origin HEAD:refs/heads/$BRANCH 2>$GITLOG + +echo "*** Building packages for npmjs" +cd js +# echo -e "$NPM_USERNAME\n$NPM_PASSWORD\n$NPM_EMAIL" | npm login +echo "$NPM_TOKEN" >> ~/.npmrc +npm run ci:build:npm + +echo "*** Publishing $PACKAGE to npmjs" +cd .npmjs +npm publish --access public +cd .. + +# back to root +echo "*** Release completed" +popd # exit with exit code exit 0 diff --git a/js/src/library.js b/js/src/library.js new file mode 100644 index 000000000..fbbab2286 --- /dev/null +++ b/js/src/library.js @@ -0,0 +1,23 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Abi from './abi'; +import Api from './api'; + +export { + Abi, + Api +}; diff --git a/js/webpack.npm.js b/js/webpack.npm.js new file mode 100644 index 000000000..23e2b7939 --- /dev/null +++ b/js/webpack.npm.js @@ -0,0 +1,82 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const path = require('path'); +const webpack = require('webpack'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const packageJson = require('./package.json'); + +const ENV = process.env.NODE_ENV || 'development'; +const isProd = ENV === 'production'; + +module.exports = { + context: path.join(__dirname, './src'), + entry: 'library.js', + output: { + path: path.join(__dirname, '.npmjs'), + filename: 'library.js', + libraryTarget: 'commonjs' + }, + module: { + loaders: [ + { + test: /(\.jsx|\.js)$/, + loader: 'babel', + exclude: /node_modules/ + } + ] + }, + resolve: { + root: path.resolve('./src'), + extensions: ['', '.js'] + }, + plugins: (function () { + const plugins = [ + new CopyWebpackPlugin([ + { + from: '../parity.package.json', + to: 'package.json', + transform: function (content, path) { + const json = JSON.parse(content.toString()); + json.version = packageJson.version; + return new Buffer(JSON.stringify(json, null, ' '), 'utf-8'); + } + }, + { + from: '../LICENSE' + }, + { + from: '../parity.md', + to: 'README.md' + } + ], { copyUnmodified: true }) + ]; + + if (isProd) { + plugins.push(new webpack.optimize.UglifyJsPlugin({ + screwIe8: true, + compress: { + warnings: false + }, + output: { + comments: false + } + })); + } + + return plugins; + }()) +};