From 7942c8a0085908102ba2dfa81b97f4720ab01649 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Fri, 13 Oct 2017 11:52:21 -0700 Subject: [PATCH 01/18] Refactoring reward contributor for passing in reward and reserved values to rewardContributor contract method --- src/contract/rewardContributor.js | 8 ++++++-- src/utils/calculateTokenValues.js | 13 +++++++++++++ src/utils/index.js | 4 ++-- src/utils/rewardValues.js | 23 +++++++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 src/utils/calculateTokenValues.js create mode 100644 src/utils/rewardValues.js diff --git a/src/contract/rewardContributor.js b/src/contract/rewardContributor.js index 822ac1c..fa46517 100644 --- a/src/contract/rewardContributor.js +++ b/src/contract/rewardContributor.js @@ -10,12 +10,16 @@ export default function rewardContributor ({ eventDetails }) { return new Promise((resolve, reject) => { const msgID = `reward_contributor_${new Date().getTime()}` - this.calculateRewardBonus({ eventDetails }).then((rewardBonus) => { + this.calculateTokenValues({ eventDetails }).then(({ + rewardValue, + reservedValue + }) => { const params = [ eventDetails['contributor'], eventDetails['event'], eventDetails['action'], - rewardBonus, + rewardValue, + reservedValue, eventDetails['delivery_id'] ] diff --git a/src/utils/calculateTokenValues.js b/src/utils/calculateTokenValues.js new file mode 100644 index 0000000..20c4324 --- /dev/null +++ b/src/utils/calculateTokenValues.js @@ -0,0 +1,13 @@ +import Promise from 'bluebird' + +export default function calculateTokenValues({ eventDetails }) { + return new Promise ((resolve, reject) => { + + + + resolve({ + rewardValue: 0, + reservedValue: 0 + }) + }) +} diff --git a/src/utils/index.js b/src/utils/index.js index c9dccef..8e14a0e 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,11 +1,11 @@ import processEvent from './processEvent' -import calculateRewardBonus from './calculateRewardBonus' +import calculateTokenValues from './calculateTokenValues' import signLog from './signLog' import verifyLog from './verifyLog' export { processEvent, - calculateRewardBonus, + calculateTokenValues, signLog, verifyLog, } diff --git a/src/utils/rewardValues.js b/src/utils/rewardValues.js new file mode 100644 index 0000000..bc13ee2 --- /dev/null +++ b/src/utils/rewardValues.js @@ -0,0 +1,23 @@ +module.exports = { + "commit_comment": { + // Reward commit comment based on length up to 100 characters; + // Each character would be worth ≈ 1 token + // payload::comment::body.length + }, + "create": { + // payload::ref_type + "repository": 1000, + "branch": 500, // e.g. creation of a feature branch + "tag": 1000 // creation of a release tag + }, + "delete": { + // payload::ref_type + "branch": 0, + "tag": 0 + }, + "fork": 5000, + "gollum": 50, + "installation": { + "created": + } +} From babafbe617c836e9d7d7e47af7246bee9f137649 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Fri, 13 Oct 2017 11:56:19 -0700 Subject: [PATCH 02/18] Removing rewardValues.js file from utils and importing reward values lib --- package.json | 3 ++- src/utils/calculateTokenValues.js | 4 ++++ src/utils/rewardValues.js | 23 ----------------------- 3 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 src/utils/rewardValues.js diff --git a/package.json b/package.json index a2bea25..4dbfd8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gittoken-webhook-manager", - "version": "0.0.39", + "version": "0.0.40", "description": "GitToken Manager for GitHub Web Hook Events", "main": "./dist/index", "scripts": { @@ -28,6 +28,7 @@ "express": "^4.15.4", "gittoken-event-listener": "0.0.12", "gittoken-registry": "0.0.1", + "gittoken-reward-values": "0.0.1", "gittoken-signer": "0.0.37", "hyperlog": "^4.12.1", "level": "^1.7.0", diff --git a/src/utils/calculateTokenValues.js b/src/utils/calculateTokenValues.js index 20c4324..779beb5 100644 --- a/src/utils/calculateTokenValues.js +++ b/src/utils/calculateTokenValues.js @@ -1,8 +1,12 @@ import Promise from 'bluebird' +import { rewardValues, reservedValues } from 'gittoken-reward-values' export default function calculateTokenValues({ eventDetails }) { return new Promise ((resolve, reject) => { + /** + * TODO: Parse event details and payload body for reward values + */ resolve({ diff --git a/src/utils/rewardValues.js b/src/utils/rewardValues.js deleted file mode 100644 index bc13ee2..0000000 --- a/src/utils/rewardValues.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - "commit_comment": { - // Reward commit comment based on length up to 100 characters; - // Each character would be worth ≈ 1 token - // payload::comment::body.length - }, - "create": { - // payload::ref_type - "repository": 1000, - "branch": 500, // e.g. creation of a feature branch - "tag": 1000 // creation of a release tag - }, - "delete": { - // payload::ref_type - "branch": 0, - "tag": 0 - }, - "fork": 5000, - "gollum": 50, - "installation": { - "created": - } -} From 6b93584ef1c8a5793e03bb7f253f2b49add7c3b3 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 12:07:50 -0700 Subject: [PATCH 03/18] Refactoring middleware for using reward / reserved values object and passing in token vlaues --- dist/contract/deploy.js | 2 +- dist/contract/rewardContributor.js | 28 ++++-- dist/events/gollumEvent.js | 48 ++++++++++ dist/events/index.js | 9 +- dist/events/pingEvent.js | 33 ++++--- dist/index.js | 2 +- dist/middleware/processRequest.js | 143 +++++++++++++++++++++++------ dist/utils/calculateTokenValues.js | 30 ++++++ dist/utils/index.js | 8 +- dist/utils/processEvent.js | 8 +- src/contract/deploy.js | 2 +- src/contract/rewardContributor.js | 40 ++++---- src/events/gollumEvent.js | 30 ++++++ src/events/index.js | 4 +- src/events/pingEvent.js | 20 +++- src/index.js | 38 ++++---- src/middleware/processRequest.js | 135 ++++++++++++++++++++++----- src/utils/calculateRewardBonus.js | 8 -- src/utils/calculateTokenValues.js | 17 ---- src/utils/index.js | 4 +- src/utils/processEvent.js | 6 +- test/test_handleEvent.js | 0 22 files changed, 461 insertions(+), 154 deletions(-) create mode 100644 dist/events/gollumEvent.js create mode 100644 dist/utils/calculateTokenValues.js create mode 100644 src/events/gollumEvent.js delete mode 100644 src/utils/calculateRewardBonus.js delete mode 100644 src/utils/calculateTokenValues.js create mode 100644 test/test_handleEvent.js diff --git a/dist/contract/deploy.js b/dist/contract/deploy.js index 75ef83e..5172688 100644 --- a/dist/contract/deploy.js +++ b/dist/contract/deploy.js @@ -32,7 +32,7 @@ function deploy(_ref) { return new _bluebird2.default(function (resolve, reject) { - var msgID = 'deploy_contract_' + new Date().getTime(); + var msgID = 'deploy_contract_' + new Date().getTime() + '_' + tokenDetails['organization']; var payload = { id: msgID, diff --git a/dist/contract/rewardContributor.js b/dist/contract/rewardContributor.js index 897bd22..646e7c4 100644 --- a/dist/contract/rewardContributor.js +++ b/dist/contract/rewardContributor.js @@ -22,26 +22,36 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de /** * [rewardContributor description] - * @param {[type]} eventDetails [description] - * @return [type] [description] + * @param {[type]} contributor [description] + * @param {[type]} event [description] + * @param {[type]} eventType [description] + * @param {[type]} rewardValue [description] + * @param {[type]} reservedValue [description] + * @param {[type]} deliveryID [description] + * @return [type] [description] */ function rewardContributor(_ref) { var _this = this; - var eventDetails = _ref.eventDetails; + var contributor = _ref.contributor, + event = _ref.event, + eventType = _ref.eventType, + rewardValue = _ref.rewardValue, + reservedValue = _ref.reservedValue, + deliveryID = _ref.deliveryID; return new _bluebird2.default(function (resolve, reject) { - var msgID = 'reward_contributor_' + new Date().getTime(); + var msgID = 'reward_' + contributor + '_' + new Date().getTime() + '_' + deliveryID; - _this.calculateRewardBonus({ eventDetails: eventDetails }).then(function (rewardBonus) { - var params = [eventDetails['contributor'], eventDetails['event'], eventDetails['action'], rewardBonus, eventDetails['delivery_id']]; + try { + var params = [contributor, event, eventType, rewardValue, reservedValue, deliveryID]; _this.signer.write((0, _stringify2.default)({ id: msgID, event: 'sign_contract_transaction', data: { recoveryShare: _this.recoveryShare, - organization: eventDetails['organization'], + organization: organization, method: 'rewardContributor', params: params } @@ -59,8 +69,8 @@ function rewardContributor(_ref) { reject(result); } }); - }).catch(function (error) { + } catch (error) { reject(error); - }); + } }); } \ No newline at end of file diff --git a/dist/events/gollumEvent.js b/dist/events/gollumEvent.js new file mode 100644 index 0000000..6394b2b --- /dev/null +++ b/dist/events/gollumEvent.js @@ -0,0 +1,48 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = gollumEvent; + +var _bluebird = require('bluebird'); + +var _bluebird2 = _interopRequireDefault(_bluebird); + +var _gittokenRewardValues = require('gittoken-reward-values'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * [gollumEvent description] + * @param {[type]} payload [description] + * @param {[type]} headers [description] + * @return [type] [description] + */ +function gollumEvent(_ref) { + var _this = this; + + var payload = _ref.payload, + headers = _ref.headers; + + return new _bluebird2.default(function (resolve, reject) { + var pages = payload.pages; + + + _bluebird2.default.resolve(pages).map(function (page, i) { + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: 'gollum', + eventType: payload[page.action], + rewardValue: _gittokenRewardValues.rewardValues['gollum'][page.action], + reservedValue: _gittokenRewardValues.reservedValues['gollum'][page.action], + deliveryID: headers['x-github-delivery'] + '-' + i, + organization: payload['organization']['login'] + }); + }).then(function (receipts) { + resolve(receipts); + }).catch(function (error) { + reject(error); + }); + }); +} \ No newline at end of file diff --git a/dist/events/index.js b/dist/events/index.js index a50b7da..1275fb3 100644 --- a/dist/events/index.js +++ b/dist/events/index.js @@ -3,12 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.pingEvent = undefined; +exports.gollumEvent = exports.pingEvent = undefined; var _pingEvent = require('./pingEvent'); var _pingEvent2 = _interopRequireDefault(_pingEvent); +var _gollumEvent = require('./gollumEvent'); + +var _gollumEvent2 = _interopRequireDefault(_gollumEvent); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -exports.pingEvent = _pingEvent2.default; \ No newline at end of file +exports.pingEvent = _pingEvent2.default; +exports.gollumEvent = _gollumEvent2.default; \ No newline at end of file diff --git a/dist/events/pingEvent.js b/dist/events/pingEvent.js index 43d87e1..d8c3c01 100644 --- a/dist/events/pingEvent.js +++ b/dist/events/pingEvent.js @@ -3,11 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); - -var _stringify = require('babel-runtime/core-js/json/stringify'); - -var _stringify2 = _interopRequireDefault(_stringify); - exports.default = pingEvent; var _bluebird = require('bluebird'); @@ -25,7 +20,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function pingEvent(_ref) { var _this = this; - var eventDetails = _ref.eventDetails, + var payload = _ref.payload, + headers = _ref.headers, tokenDetails = _ref.tokenDetails; return new _bluebird2.default(function (resolve, reject) { @@ -33,19 +29,28 @@ function pingEvent(_ref) { _this.deploy({ tokenDetails: tokenDetails }).then(function (txReceipt) { receipts.push(txReceipt); - return _this.rewardContributor({ eventDetails: eventDetails }); + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: 'ping', + eventType: '', + rewardValue: rewardValues['ping'], + reservedValue: reservedValues['ping'], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }); }).then(function (txReceipt) { receipts.push(txReceipt); - var data = { + /* + NOTE: Consider removing Listener Service from Webhook process. + const data = { organization: tokenDetails['organization'], token: receipts[0]['contractAddress'] - }; - - console.log('Sending Data ' + (0, _stringify2.default)(data) + ' to Event Listener'); - - // Setup Event Listener for newly deployed token - _this.watcher.eventListener.write((0, _stringify2.default)({ type: 'WATCH_TOKEN', data: data })); + } + console.log(`Sending Data ${JSON.stringify(data)} to Event Listener`) + // Setup Event Listener for newly deployed token + this.watcher.eventListener.write(JSON.stringify({ type: 'WATCH_TOKEN', data })) + */ resolve(receipts); }).catch(function (error) { diff --git a/dist/index.js b/dist/index.js index ede072d..b66df0c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -110,9 +110,9 @@ var GitTokenWebHookManager = function (_GitTokenSignerClient) { _this.webhookRouter = _index12.default.bind(_this); _this.handleWebHookEvent = _index8.handleWebHookEvent.bind(_this); _this.rewardContributor = _index10.rewardContributor.bind(_this); - _this.calculateRewardBonus = _index5.calculateRewardBonus.bind(_this); _this.deploy = _index10.deploy.bind(_this); _this.pingEvent = _index9.pingEvent.bind(_this); + _this.gollumEvent = _index9.gollumEvent.bind(_this); // Variables _this.signerIpcPath = signerIpcPath; diff --git a/dist/middleware/processRequest.js b/dist/middleware/processRequest.js index cd86f06..ef04209 100644 --- a/dist/middleware/processRequest.js +++ b/dist/middleware/processRequest.js @@ -10,37 +10,128 @@ var _stringify2 = _interopRequireDefault(_stringify); exports.default = processRequest; +var _bluebird = require('bluebird'); + +var _bluebird2 = _interopRequireDefault(_bluebird); + +var _gittokenRewardValues = require('gittoken-reward-values'); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * [processRequest description] - * @param {[type]} req [description] - * @param {[type]} res [description] - * @return [type] [description] + * @param {[type]} req [description] + * @param {[type]} res [description] + * @param {Function} next [description] + * @return [type] [description] */ function processRequest(req, res, next) { - var headers = req.headers, - payload = req.body.payload; - - - var data = JSON.parse(payload); - - req.eventDetails = { - delivery_id: headers['x-github-delivery'], - event: headers['x-github-event'], - action: data['action'] ? data['action'] : '', - organization: data['organization']['login'], - contributor: data['sender']['login'], - date_received: new Date().getTime() - }; - - this.processEvent({ - eventDetails: req.eventDetails, - tokenDetails: req.tokenDetails - }).then(function (receipts) { - req.receipts = receipts; - next(); - }).catch(function (error) { - res.status(500).send((0, _stringify2.default)(error, null, 2)); + var _this = this; + + return new _bluebird2.default(function (resolve, reject) { + var headers = req.headers, + body = req.body, + tokenDetails = req.tokenDetails; + + + var event = headers['x-github-event']; + var payload = JSON.parse(body['payload']); + + _bluebird2.default.resolve().then(function () { + switch (event) { + case 'ping': + // TODO: REFACTOR + return _this.pingEvent({ payload: payload, headers: headers, tokenDetails: tokenDetails }); + break; + case 'create': + // payload.ref_type + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: event, + eventType: payload.ref_type, + rewardValue: _gittokenRewardValues.rewardValues[event][payload.ref_type], + reservedValue: _gittokenRewardValues.reservedValues[event][payload.ref_type], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }); + break; + case 'deployment_status': + // payload.status + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: event, + eventType: payload.ref_type, + rewardValue: _gittokenRewardValues.rewardValues[event][payload.status], + reservedValue: _gittokenRewardValues.reservedValues[event][payload.status], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }); + break; + case 'gollum': + return _this.gollumEvent({ payload: payload, headers: headers }); + break; + case 'page_build': + // payload.build.status + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: event, + eventType: payload.build.status, + rewardValue: _gittokenRewardValues.rewardValues[event][payload.build.status], + reservedValue: _gittokenRewardValues.reservedValues[event][payload.build.status], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }); + break; + case 'status': + // payload.state + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: event, + eventType: payload.state, + rewardValue: _gittokenRewardValues.rewardValues[event][payload.state], + reservedValue: _gittokenRewardValues.reservedValues[event][payload.state], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }); + break; + default: + return _this.rewardContributor({ + contributor: payload['sender']['login'], + event: event, + eventType: payload.action, + rewardValue: _gittokenRewardValues.rewardValues[event][payload.action], + reservedValue: _gittokenRewardValues.reservedValues[event][payload.action], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }); + } + }).then(function (receipts) { + req.receipts = receipts; + next(); + }).catch(function (error) { + res.status(500).send((0, _stringify2.default)(error, null, 2)); + }); + }); +} + +// Determine number of pages to reward + +function calcGollumReward(pages) { + var reward = 0; + + forEach(pages, function (page) { + reward += _gittokenRewardValues.rewardValues[page.action]; + }); + + return reward; +} + +function calcGollumReserve(pages) { + var reserved = 0; + + forEach(pages, function (page) { + reserved += _gittokenRewardValues.reservedValues[page.action]; }); + + return reserved; } \ No newline at end of file diff --git a/dist/utils/calculateTokenValues.js b/dist/utils/calculateTokenValues.js new file mode 100644 index 0000000..1f32b5e --- /dev/null +++ b/dist/utils/calculateTokenValues.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = calculateTokenValues; + +var _bluebird = require('bluebird'); + +var _bluebird2 = _interopRequireDefault(_bluebird); + +var _gittokenRewardValues = require('gittoken-reward-values'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function calculateTokenValues(_ref) { + var eventDetails = _ref.eventDetails; + + return new _bluebird2.default(function (resolve, reject) { + + /** + * TODO: Parse event details and payload body for reward values + */ + + resolve({ + rewardValue: 0, + reservedValue: 0 + }); + }); +} \ No newline at end of file diff --git a/dist/utils/index.js b/dist/utils/index.js index d5a4575..9179596 100644 --- a/dist/utils/index.js +++ b/dist/utils/index.js @@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.verifyLog = exports.signLog = exports.calculateRewardBonus = exports.processEvent = undefined; +exports.verifyLog = exports.signLog = exports.calculateRewardValues = exports.processEvent = undefined; var _processEvent = require('./processEvent'); var _processEvent2 = _interopRequireDefault(_processEvent); -var _calculateRewardBonus = require('./calculateRewardBonus'); +var _calculateRewardValues = require('./calculateRewardValues'); -var _calculateRewardBonus2 = _interopRequireDefault(_calculateRewardBonus); +var _calculateRewardValues2 = _interopRequireDefault(_calculateRewardValues); var _signLog = require('./signLog'); @@ -24,6 +24,6 @@ var _verifyLog2 = _interopRequireDefault(_verifyLog); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.processEvent = _processEvent2.default; -exports.calculateRewardBonus = _calculateRewardBonus2.default; +exports.calculateRewardValues = _calculateRewardValues2.default; exports.signLog = _signLog2.default; exports.verifyLog = _verifyLog2.default; \ No newline at end of file diff --git a/dist/utils/processEvent.js b/dist/utils/processEvent.js index 4009208..2a1b85f 100644 --- a/dist/utils/processEvent.js +++ b/dist/utils/processEvent.js @@ -20,12 +20,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function processEvent(_ref) { var _this = this; - var eventDetails = _ref.eventDetails, + var request = _ref.request, tokenDetails = _ref.tokenDetails; return new _bluebird2.default(function (resolve, reject) { + var headers = request.headers, + payload = request.body.payload; + + _bluebird2.default.resolve().then(function () { - switch (eventDetails['event']) { + switch (headers['x-github-event']) { case 'ping': return _this.pingEvent({ eventDetails: eventDetails, diff --git a/src/contract/deploy.js b/src/contract/deploy.js index 7d2ae23..7a33cbb 100644 --- a/src/contract/deploy.js +++ b/src/contract/deploy.js @@ -9,7 +9,7 @@ import split from 'split' export default function deploy({ tokenDetails }) { return new Promise((resolve, reject) => { - const msgID = `deploy_contract_${new Date().getTime()}` + const msgID = `deploy_contract_${new Date().getTime()}_${tokenDetails['organization']}` const payload = { id: msgID, diff --git a/src/contract/rewardContributor.js b/src/contract/rewardContributor.js index fa46517..33bba9e 100644 --- a/src/contract/rewardContributor.js +++ b/src/contract/rewardContributor.js @@ -3,24 +3,33 @@ import split from 'split' /** * [rewardContributor description] - * @param {[type]} eventDetails [description] - * @return [type] [description] + * @param {[type]} contributor [description] + * @param {[type]} event [description] + * @param {[type]} eventType [description] + * @param {[type]} rewardValue [description] + * @param {[type]} reservedValue [description] + * @param {[type]} deliveryID [description] + * @return [type] [description] */ -export default function rewardContributor ({ eventDetails }) { +export default function rewardContributor({ + contributor, + event, + eventType, + rewardValue, + reservedValue, + deliveryID +}) { return new Promise((resolve, reject) => { - const msgID = `reward_contributor_${new Date().getTime()}` + const msgID = `reward_${contributor}_${new Date().getTime()}_${deliveryID}` - this.calculateTokenValues({ eventDetails }).then(({ - rewardValue, - reservedValue - }) => { + try { const params = [ - eventDetails['contributor'], - eventDetails['event'], - eventDetails['action'], + contributor, + event, + eventType, rewardValue, reservedValue, - eventDetails['delivery_id'] + deliveryID ] this.signer.write(JSON.stringify({ @@ -28,7 +37,7 @@ export default function rewardContributor ({ eventDetails }) { event: 'sign_contract_transaction', data: { recoveryShare: this.recoveryShare, - organization: eventDetails['organization'], + organization, method: 'rewardContributor', params } @@ -42,9 +51,8 @@ export default function rewardContributor ({ eventDetails }) { reject(result) } }) - - }).catch((error) => { + } catch (error) { reject(error) - }) + } }) } diff --git a/src/events/gollumEvent.js b/src/events/gollumEvent.js new file mode 100644 index 0000000..f483eda --- /dev/null +++ b/src/events/gollumEvent.js @@ -0,0 +1,30 @@ +import Promise from 'bluebird' +import { rewardValues, reservedValues } from 'gittoken-reward-values' + +/** + * [gollumEvent description] + * @param {[type]} payload [description] + * @param {[type]} headers [description] + * @return [type] [description] + */ +export default function gollumEvent({ payload, headers }) { + return new Promise((resolve, reject) => { + const { pages } = payload + + Promise.resolve(pages).map((page, i) => { + return this.rewardContributor({ + contributor: payload['sender']['login'], + event: 'gollum', + eventType: payload[page.action], + rewardValue: rewardValues['gollum'][page.action], + reservedValue: reservedValues['gollum'][page.action], + deliveryID: `${headers['x-github-delivery']}-${i}`, + organization: payload['organization']['login'] + }) + }).then((receipts) => { + resolve(receipts) + }).catch((error) => { + reject(error) + }) + }) +} diff --git a/src/events/index.js b/src/events/index.js index 1c7c128..5c4e874 100644 --- a/src/events/index.js +++ b/src/events/index.js @@ -1,5 +1,7 @@ import pingEvent from './pingEvent' +import gollumEvent from './gollumEvent' export { - pingEvent + pingEvent, + gollumEvent } diff --git a/src/events/pingEvent.js b/src/events/pingEvent.js index f26e286..3a22496 100644 --- a/src/events/pingEvent.js +++ b/src/events/pingEvent.js @@ -6,19 +6,27 @@ import Promise from 'bluebird' * @param {[type]} tokenDetails [description] * @return [type] [description] */ -export default function pingEvent({ - eventDetails, - tokenDetails -}) { +export default function pingEvent({ payload, headers, tokenDetails }) { return new Promise((resolve, reject) => { let receipts = [] this.deploy({ tokenDetails }).then((txReceipt) => { receipts.push(txReceipt) - return this.rewardContributor({ eventDetails }) + return this.rewardContributor({ + contributor: payload['sender']['login'], + event: 'ping', + eventType: '', + rewardValue: rewardValues['ping'], + reservedValue: reservedValues['ping'], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }) }).then((txReceipt) => { receipts.push(txReceipt) + /* + NOTE: Consider removing Listener Service from Webhook process. + const data = { organization: tokenDetails['organization'], token: receipts[0]['contractAddress'] @@ -28,6 +36,8 @@ export default function pingEvent({ // Setup Event Listener for newly deployed token this.watcher.eventListener.write(JSON.stringify({ type: 'WATCH_TOKEN', data })) + */ + resolve(receipts) }).catch((error) => { diff --git a/src/index.js b/src/index.js index 1021019..12e975b 100644 --- a/src/index.js +++ b/src/index.js @@ -13,8 +13,7 @@ import GitTokenEventWatcherClient from 'gittoken-event-listener/dist/client/inde import { processEvent, signLog, - verifyLog, - calculateRewardBonus + verifyLog } from './utils/index' import { @@ -33,7 +32,8 @@ import { } from './controllers/index' import { - pingEvent + pingEvent, + gollumEvent } from './events/index' import { @@ -61,24 +61,24 @@ export default class GitTokenWebHookManager extends GitTokenSignerClient { }) // // Methods - this.signLog = signLog.bind(this) - this.verifyLog = verifyLog.bind(this) - this.processEvent = processEvent.bind(this) - this.selectFromRegistry = selectFromRegistry.bind(this) - this.insertIntoWebhook = insertIntoWebhook.bind(this) - this.saveEvent = saveEvent.bind(this) - this.validateOrganization = validateOrganization.bind(this) - this.processRequest = processRequest.bind(this) - this.webhookRouter = webhookRouter.bind(this) - this.handleWebHookEvent = handleWebHookEvent.bind(this) - this.rewardContributor = rewardContributor.bind(this) - this.calculateRewardBonus = calculateRewardBonus.bind(this) - this.deploy = deploy.bind(this) - this.pingEvent = pingEvent.bind(this) + this.signLog = signLog.bind(this) + this.verifyLog = verifyLog.bind(this) + this.processEvent = processEvent.bind(this) + this.selectFromRegistry = selectFromRegistry.bind(this) + this.insertIntoWebhook = insertIntoWebhook.bind(this) + this.saveEvent = saveEvent.bind(this) + this.validateOrganization = validateOrganization.bind(this) + this.processRequest = processRequest.bind(this) + this.webhookRouter = webhookRouter.bind(this) + this.handleWebHookEvent = handleWebHookEvent.bind(this) + this.rewardContributor = rewardContributor.bind(this) + this.deploy = deploy.bind(this) + this.pingEvent = pingEvent.bind(this) + this.gollumEvent = gollumEvent.bind(this) // Variables - this.signerIpcPath = signerIpcPath - this.recoveryShare = recoveryShare + this.signerIpcPath = signerIpcPath + this.recoveryShare = recoveryShare // this.deployParams = deployParams // Hyperlog DAG Store diff --git a/src/middleware/processRequest.js b/src/middleware/processRequest.js index 63a1dbe..93d7818 100644 --- a/src/middleware/processRequest.js +++ b/src/middleware/processRequest.js @@ -1,30 +1,117 @@ +import Promise from 'bluebird' +import { rewardValues, reservedValues } from 'gittoken-reward-values' + /** * [processRequest description] - * @param {[type]} req [description] - * @param {[type]} res [description] - * @return [type] [description] + * @param {[type]} req [description] + * @param {[type]} res [description] + * @param {Function} next [description] + * @return [type] [description] */ export default function processRequest(req, res, next) { - const { headers, body: { payload } } = req - - const data = JSON.parse(payload) - - req.eventDetails = { - delivery_id: headers['x-github-delivery'], - event: headers['x-github-event'], - action: data['action'] ? data['action'] : '', - organization: data['organization']['login'], - contributor: data['sender']['login'], - date_received: new Date().getTime(), - } - - this.processEvent({ - eventDetails: req.eventDetails, - tokenDetails: req.tokenDetails - }).then((receipts) => { - req.receipts = receipts - next() - }).catch((error) => { - res.status(500).send(JSON.stringify(error, null, 2)); + return new Promise((resolve, reject) => { + const { headers, body, tokenDetails } = req + + const event = headers['x-github-event'] + const payload = JSON.parse(body['payload']) + + Promise.resolve().then(() => { + switch(event) { + case 'ping': + // TODO: REFACTOR + return this.pingEvent({ payload, headers, tokenDetails }) + break; + case 'create': + // payload.ref_type + return this.rewardContributor({ + contributor: payload['sender']['login'], + event, + eventType: payload.ref_type, + rewardValue: rewardValues[event][payload.ref_type], + reservedValue: reservedValues[event][payload.ref_type], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }) + break; + case 'deployment_status': + // payload.status + return this.rewardContributor({ + contributor: payload['sender']['login'], + event, + eventType: payload.ref_type, + rewardValue: rewardValues[event][payload.status], + reservedValue: reservedValues[event][payload.status], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }) + break; + case 'gollum': + return this.gollumEvent({ payload, headers }) + break; + case 'page_build': + // payload.build.status + return this.rewardContributor({ + contributor: payload['sender']['login'], + event, + eventType: payload.build.status, + rewardValue: rewardValues[event][payload.build.status], + reservedValue: reservedValues[event][payload.build.status], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }) + break; + case 'status': + // payload.state + return this.rewardContributor({ + contributor: payload['sender']['login'], + event, + eventType: payload.state, + rewardValue: rewardValues[event][payload.state], + reservedValue: reservedValues[event][payload.state], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }) + break; + default: + return this.rewardContributor({ + contributor: payload['sender']['login'], + event, + eventType: payload.action, + rewardValue: rewardValues[event][payload.action], + reservedValue: reservedValues[event][payload.action], + deliveryID: headers['x-github-delivery'], + organization: payload['organization']['login'] + }) + } + }).then((receipts) => { + req.receipts = receipts + next() + }).catch((error) => { + res.status(500).send(JSON.stringify(error, null, 2)); + }) + }) +} + + +// Determine number of pages to reward + +function calcGollumReward(pages) { + let reward = 0; + + forEach(pages, (page) => { + reward += rewardValues[page.action] + }) + + return reward +} + + +function calcGollumReserve(pages) { + let reserved = 0; + + forEach(pages, (page) => { + reserved += reservedValues[page.action] }) + + return reserved } diff --git a/src/utils/calculateRewardBonus.js b/src/utils/calculateRewardBonus.js deleted file mode 100644 index cb8e8b2..0000000 --- a/src/utils/calculateRewardBonus.js +++ /dev/null @@ -1,8 +0,0 @@ -import Promise from 'bluebird' - -export default function calculateRewardBonus({ eventDetails }) { - return new Promise ((resolve, reject) => { - // TODO: Calculate Additional Reward Bonuses based on contribution analysis - resolve(0) - }) -} diff --git a/src/utils/calculateTokenValues.js b/src/utils/calculateTokenValues.js deleted file mode 100644 index 779beb5..0000000 --- a/src/utils/calculateTokenValues.js +++ /dev/null @@ -1,17 +0,0 @@ -import Promise from 'bluebird' -import { rewardValues, reservedValues } from 'gittoken-reward-values' - -export default function calculateTokenValues({ eventDetails }) { - return new Promise ((resolve, reject) => { - - /** - * TODO: Parse event details and payload body for reward values - */ - - - resolve({ - rewardValue: 0, - reservedValue: 0 - }) - }) -} diff --git a/src/utils/index.js b/src/utils/index.js index 8e14a0e..d530a4e 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,11 +1,11 @@ import processEvent from './processEvent' -import calculateTokenValues from './calculateTokenValues' +import calculateRewardValues from './calculateRewardValues' import signLog from './signLog' import verifyLog from './verifyLog' export { processEvent, - calculateTokenValues, + calculateRewardValues, signLog, verifyLog, } diff --git a/src/utils/processEvent.js b/src/utils/processEvent.js index 97682b2..e06d9e8 100644 --- a/src/utils/processEvent.js +++ b/src/utils/processEvent.js @@ -6,10 +6,12 @@ import Promise from 'bluebird' * @param {Object} tokenDetails [description] * @return [type] [description] */ -export default function processEvent({ eventDetails, tokenDetails }) { +export default function processEvent({ request, tokenDetails }) { return new Promise((resolve, reject) => { + const { headers, body: { payload } } = request + Promise.resolve().then(() => { - switch(eventDetails['event']) { + switch(headers['x-github-event']) { case 'ping': return this.pingEvent({ eventDetails, diff --git a/test/test_handleEvent.js b/test/test_handleEvent.js new file mode 100644 index 0000000..e69de29 From 9418de47e2c71407e7465096e4f341f8e0b1414c Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 13:35:47 -0700 Subject: [PATCH 04/18] Adding .travis.yml file for CI --- .travis.yml | 12 +++++++++ CI_Dockerfile | 13 +++++++++ dist/utils/index.js | 7 +---- examples/manager.js | 1 - src/utils/index.js | 2 -- test/test_handleEvent.js | 0 test/test_pingEvent.js | 57 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 .travis.yml create mode 100644 CI_Dockerfile delete mode 100644 test/test_handleEvent.js create mode 100644 test/test_pingEvent.js diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8679401 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +sudo: required + +language: node_js + +node_js: +- "7" + +services: + - docker + +before_install: + - docker build -t gittoken/webhookmgr_test ./CI_Dockerfile diff --git a/CI_Dockerfile b/CI_Dockerfile new file mode 100644 index 0000000..b58b041 --- /dev/null +++ b/CI_Dockerfile @@ -0,0 +1,13 @@ +# Use this Dockerfile for CI tests only! + +FROM node:6.11.0 + +RUN npm i -g mocha + +WORKDIR /gittoken-webhook-manager + +ADD . . + +RUN npm install + +CMD [mocha] diff --git a/dist/utils/index.js b/dist/utils/index.js index 9179596..95b1936 100644 --- a/dist/utils/index.js +++ b/dist/utils/index.js @@ -3,16 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.verifyLog = exports.signLog = exports.calculateRewardValues = exports.processEvent = undefined; +exports.verifyLog = exports.signLog = exports.processEvent = undefined; var _processEvent = require('./processEvent'); var _processEvent2 = _interopRequireDefault(_processEvent); -var _calculateRewardValues = require('./calculateRewardValues'); - -var _calculateRewardValues2 = _interopRequireDefault(_calculateRewardValues); - var _signLog = require('./signLog'); var _signLog2 = _interopRequireDefault(_signLog); @@ -24,6 +20,5 @@ var _verifyLog2 = _interopRequireDefault(_verifyLog); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.processEvent = _processEvent2.default; -exports.calculateRewardValues = _calculateRewardValues2.default; exports.signLog = _signLog2.default; exports.verifyLog = _verifyLog2.default; \ No newline at end of file diff --git a/examples/manager.js b/examples/manager.js index aa25967..e31b382 100644 --- a/examples/manager.js +++ b/examples/manager.js @@ -1,4 +1,3 @@ -const Promise = require('bluebird') const GitTokenWebHookManager = require('../dist/index').default const { diff --git a/src/utils/index.js b/src/utils/index.js index d530a4e..3a35b6d 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,11 +1,9 @@ import processEvent from './processEvent' -import calculateRewardValues from './calculateRewardValues' import signLog from './signLog' import verifyLog from './verifyLog' export { processEvent, - calculateRewardValues, signLog, verifyLog, } diff --git a/test/test_handleEvent.js b/test/test_handleEvent.js deleted file mode 100644 index e69de29..0000000 diff --git a/test/test_pingEvent.js b/test/test_pingEvent.js new file mode 100644 index 0000000..3a3e66b --- /dev/null +++ b/test/test_pingEvent.js @@ -0,0 +1,57 @@ +const Promise = require('bluebird') +const GitTokenWebHookManager = require('../dist/index').default +const assert = require('chai').assert + +const { + port, + logDBPath, + signerIpcPath, + watcherIpcPath, + recoveryShare, + mysqlHost, + mysqlUser, + mysqlRootPassword, + mysqlDatabase +} = require('../config') + +function instantiateWebhookMgr() { + return new Promise((resolve, reject) => { + + /** + * NOTE: To run the tests, both the GitToken Signer and Contract Event Listener + * services must be running locally before running the tests and the correct environmental + * variables provided in the constructor of the WebHook Manager + * + */ + + try { + const manager = new GitTokenWebHookManager({ + port, + logDBPath, + signerIpcPath, + watcherIpcPath, + recoveryShare, + mysqlHost, + mysqlUser, + mysqlRootPassword, + mysqlDatabase + }) + + resolve(manager) + + } catch (error) { + reject(error) + } + }) +} + + +describe('GitToken Webhook Manager Ping Event', function() { + it('Should deploy a new contract on a ping event', function() { + instantiateWebhookMgr().then((manager) => { + assert.notEqual(manager, null, "Expect web hook manager instance to not be null") + }).catch((error) => { + assert.equal(error, null, "Expect no errors to occur") + }) + }).timeout(20000) +}) From dd61f6b7aef15af39b949f97aeb32a43a71072fe Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 13:39:56 -0700 Subject: [PATCH 05/18] Put CI Dockerfile in the test director --- .travis.yml | 2 +- CI_Dockerfile => test/Dockerfile | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename CI_Dockerfile => test/Dockerfile (100%) diff --git a/.travis.yml b/.travis.yml index 8679401..419f4a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,4 @@ services: - docker before_install: - - docker build -t gittoken/webhookmgr_test ./CI_Dockerfile + - docker build -t gittoken/webhookmgr_test ./test diff --git a/CI_Dockerfile b/test/Dockerfile similarity index 100% rename from CI_Dockerfile rename to test/Dockerfile From 099978a75e70d0bf4902a23dd8fbf96a2cfb9d85 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 13:43:29 -0700 Subject: [PATCH 06/18] Ensure workdir is main directory in CI Dockerfile --- test/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Dockerfile b/test/Dockerfile index b58b041..01f82e9 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -6,7 +6,7 @@ RUN npm i -g mocha WORKDIR /gittoken-webhook-manager -ADD . . +ADD ../ . RUN npm install From 76497baf81efb95e3adea4efbac4db97ab786bc5 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 13:49:14 -0700 Subject: [PATCH 07/18] Try using -f flag to give specify Dockerfile outside of build directory --- .travis.yml | 2 +- test/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 419f4a3..ad5f9ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,4 @@ services: - docker before_install: - - docker build -t gittoken/webhookmgr_test ./test + - docker build -t gittoken/webhookmgr_test -f ./test/Dockerfile . diff --git a/test/Dockerfile b/test/Dockerfile index 01f82e9..b58b041 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -6,7 +6,7 @@ RUN npm i -g mocha WORKDIR /gittoken-webhook-manager -ADD ../ . +ADD . . RUN npm install From a9c0d5a0bfaa2fb04c2a1c4b50d402f61cf22975 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 13:54:58 -0700 Subject: [PATCH 08/18] WIP --- test/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Dockerfile b/test/Dockerfile index b58b041..058774b 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -10,4 +10,4 @@ ADD . . RUN npm install -CMD [mocha] +CMD mocha From 3f6ab2b5c99946f86c9bfa64a8146ee39ec55788 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 14:02:17 -0700 Subject: [PATCH 09/18] Install mocha as a dev dependency --- package.json | 3 ++- test/Dockerfile | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4dbfd8a..2532445 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "babel-runtime": "^6.23.0", - "chai": "^4.0.1" + "chai": "^4.0.1", + "mocha": "^4.0.1" } } diff --git a/test/Dockerfile b/test/Dockerfile index 058774b..a28d0dd 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -2,8 +2,6 @@ FROM node:6.11.0 -RUN npm i -g mocha - WORKDIR /gittoken-webhook-manager ADD . . From df2692cfda6656c51388af8661e66fcf4679fd08 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 14:15:59 -0700 Subject: [PATCH 10/18] Use docker-compose in travis ci tests due to depedency on signer and listener services --- .travis.yml | 9 ++++++++- package.json | 2 ++ test/docker-compose.yml | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 test/docker-compose.yml diff --git a/.travis.yml b/.travis.yml index ad5f9ab..fe8ec11 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,5 +8,12 @@ node_js: services: - docker +env: + - DOCKER_COMPOSE_VERSION=1.8.0 + before_install: - - docker build -t gittoken/webhookmgr_test -f ./test/Dockerfile . + - sudo rm /usr/local/bin/docker-compose + - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose + - chmod +x docker-compose + - sudo mv docker-compose /usr/local/bin + - docker-compose up --build ./test/docker-compose.yml diff --git a/package.json b/package.json index 2532445..8715b6f 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,8 @@ "babel-preset-stage-0": "^6.24.1", "babel-runtime": "^6.23.0", "chai": "^4.0.1", + "gittoken-event-listener": "0.0.13", + "gittoken-signer": "0.0.44", "mocha": "^4.0.1" } } diff --git a/test/docker-compose.yml b/test/docker-compose.yml new file mode 100644 index 0000000..7633b99 --- /dev/null +++ b/test/docker-compose.yml @@ -0,0 +1,34 @@ +version: '3.0' +volumes: + signer-volume: + ipc-volume: + log-volume: +services: + listener: + env_file: + - ./environment/listener.env + build: + context: ../node_modules/gittoken-event-listener/. + ipc: signer + volumes: + - ipc-volume:/tmp/ + signer: + env_file: + - ./environment/signer.env + build: + context: ../node_modules/gittoken-signer/. + ipc: host + volumes: + - signer-volume:/keystore/ + - ipc-volume:/tmp/ + webhookmgr: + ports: + - 3000:3000 + env_file: + - ../.env + build: + context: . + ipc: signer + volumes: + - log-volume:/db + - ipc-volume:/tmp/ From 2cce452bdb3acb343913d49ddf75e17453c8a419 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 14:19:28 -0700 Subject: [PATCH 11/18] Use version 3 docker-compose reference version; 1.11.2 docker-compose version --- .travis.yml | 2 +- test/docker-compose.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index fe8ec11..f215746 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ services: - docker env: - - DOCKER_COMPOSE_VERSION=1.8.0 + - DOCKER_COMPOSE_VERSION=1.11.2 before_install: - sudo rm /usr/local/bin/docker-compose diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 7633b99..0ffce95 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -6,7 +6,7 @@ volumes: services: listener: env_file: - - ./environment/listener.env + - ../node_modules/gittoken-event-listener/.env build: context: ../node_modules/gittoken-event-listener/. ipc: signer @@ -14,7 +14,7 @@ services: - ipc-volume:/tmp/ signer: env_file: - - ./environment/signer.env + - ../node_modules/gittoken-signer/.env build: context: ../node_modules/gittoken-signer/. ipc: host From 2c18e5aeea66f3570eb82b28b5d96334b31d2113 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 14:42:58 -0700 Subject: [PATCH 12/18] Update travis.ci docker-compose info --- .travis.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.travis.yml b/.travis.yml index f215746..6fb9762 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,24 @@ env: - DOCKER_COMPOSE_VERSION=1.11.2 before_install: + # update is required to update the repositories to see the new packages for + # Docker. + - sudo apt-get update + + # Now we can install the newer docker-engine which is required for the newer + # docker-composer we will install next. The messy options are to force it to + # be non-interactive (normally it asks you a bunch of config questions). + - sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-engine + + # Print out the current docker-compose version. Once this reports 1.6+ then we + # do not need the following steps. + - docker-compose --version + + # Update docker-compose version - sudo rm /usr/local/bin/docker-compose - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose - chmod +x docker-compose - sudo mv docker-compose /usr/local/bin + + # Run docker-compose - docker-compose up --build ./test/docker-compose.yml From f0c419787a7fe6795ccc5f26fdd9bd71bfb8f4b3 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 14:50:43 -0700 Subject: [PATCH 13/18] Download docker-ce version in travis CI environment --- .travis.yml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6fb9762..d5ae8e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,10 +16,26 @@ before_install: # Docker. - sudo apt-get update - # Now we can install the newer docker-engine which is required for the newer - # docker-composer we will install next. The messy options are to force it to - # be non-interactive (normally it asks you a bunch of config questions). - - sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-engine + - sudo apt-get install \ + linux-image-extra-$(uname -r) \ + linux-image-extra-virtual + + - sudo apt-get install \ + apt-transport-https \ + ca-certificates \ + curl \ + software-properties-common + + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + + - sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" + + - sudo apt-get update + + - sudo apt-get install docker-ce=17.06.0~ce-0~ubuntu # Print out the current docker-compose version. Once this reports 1.6+ then we # do not need the following steps. From d36ce5c058f7235a87502bbd1abb2ff6af27f65f Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 15:32:08 -0700 Subject: [PATCH 14/18] WIP --- .travis.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index d5ae8e9..088bc2d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,10 +16,6 @@ before_install: # Docker. - sudo apt-get update - - sudo apt-get install \ - linux-image-extra-$(uname -r) \ - linux-image-extra-virtual - - sudo apt-get install \ apt-transport-https \ ca-certificates \ From c180854c6051cd832772c9606c7c3e02020b30bf Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 15:38:27 -0700 Subject: [PATCH 15/18] WIP --- .travis.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 088bc2d..6fa4268 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,9 +14,12 @@ env: before_install: # update is required to update the repositories to see the new packages for # Docker. - - sudo apt-get update + - - - sudo apt-get install \ + - sudo apt-get update \ + sudo apt-get install \ + linux-image-extra-$(uname -r) \ + linux-image-extra-virtual \ apt-transport-https \ ca-certificates \ curl \ @@ -25,13 +28,12 @@ before_install: - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - sudo add-apt-repository \ - "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) \ - stable" + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" - - sudo apt-get update - - - sudo apt-get install docker-ce=17.06.0~ce-0~ubuntu + - sudo apt-get update \ + sudo apt-get install docker-ce=17.06.0~ce-0~ubuntu # Print out the current docker-compose version. Once this reports 1.6+ then we # do not need the following steps. From ffabffd482eafb79939ef48b6e965c4a84824bd6 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 15:41:40 -0700 Subject: [PATCH 16/18] WIP --- .travis.yml | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6fa4268..53dd61b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,19 +11,20 @@ services: env: - DOCKER_COMPOSE_VERSION=1.11.2 +addons: + apt: + packages: + - linux-image-extra-$(uname -r) + - linux-image-extra-virtual + - apt-transport-https + - ca-certificates + - curl + - software-properties-common + - docker-ce=17.06.0~ce-0~ubuntu + before_install: # update is required to update the repositories to see the new packages for # Docker. - - - - - sudo apt-get update \ - sudo apt-get install \ - linux-image-extra-$(uname -r) \ - linux-image-extra-virtual \ - apt-transport-https \ - ca-certificates \ - curl \ - software-properties-common - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - @@ -32,9 +33,6 @@ before_install: $(lsb_release -cs) \ stable" - - sudo apt-get update \ - sudo apt-get install docker-ce=17.06.0~ce-0~ubuntu - # Print out the current docker-compose version. Once this reports 1.6+ then we # do not need the following steps. - docker-compose --version From 7aa80a8b724c4d7a5785776426dcec4a1cb08cbf Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 15:46:43 -0700 Subject: [PATCH 17/18] WIP --- .travis.yml | 7 ------- test/docker-compose.yml | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 53dd61b..b9eea79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,13 +26,6 @@ before_install: # update is required to update the repositories to see the new packages for # Docker. - - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - - - sudo add-apt-repository \ - "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) \ - stable" - # Print out the current docker-compose version. Once this reports 1.6+ then we # do not need the following steps. - docker-compose --version diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 0ffce95..0bb870d 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -28,6 +28,9 @@ services: - ../.env build: context: . + depends_on: + - listener + - signer ipc: signer volumes: - log-volume:/db From 79a2fd52cb69e5f9651987c1a96ed3a6bfaf72f4 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 16 Oct 2017 15:52:54 -0700 Subject: [PATCH 18/18] WIP --- .dockerignore | 1 - package.json | 6 ++---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.dockerignore b/.dockerignore index a41f125..9c39416 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1 @@ db/* -node_modules diff --git a/package.json b/package.json index 8715b6f..e6a0928 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "dotenv": "^4.0.0", "ethereumjs-util": "^5.1.2", "express": "^4.15.4", - "gittoken-event-listener": "0.0.12", + "gittoken-event-listener": "0.0.13", "gittoken-registry": "0.0.1", "gittoken-reward-values": "0.0.1", - "gittoken-signer": "0.0.37", + "gittoken-signer": "0.0.44", "hyperlog": "^4.12.1", "level": "^1.7.0", "request": "^2.81.0", @@ -48,8 +48,6 @@ "babel-preset-stage-0": "^6.24.1", "babel-runtime": "^6.23.0", "chai": "^4.0.1", - "gittoken-event-listener": "0.0.13", - "gittoken-signer": "0.0.44", "mocha": "^4.0.1" } }