diff --git a/b9/b9 b/b9/b9 index 635b5d14..799c8da6 100755 --- a/b9/b9 +++ b/b9/b9 @@ -13,7 +13,8 @@ B9=$B9_DIR/b9 source ./lib/_init.sh -NODEJS=$(_b9_init_find_nodejs) +NODEJS=$(_b9_init_nodejs) +NPM=$(_b9_init_npm) TMPDIR=$(_b9_init_temp) TMP=$TMPDIR diff --git a/b9/lib/_init.sh b/b9/lib/_init.sh index bfda6245..4886d348 100644 --- a/b9/lib/_init.sh +++ b/b9/lib/_init.sh @@ -18,7 +18,7 @@ _b9_init_temp() { echo $TMPDIR } -_b9_init_find_nodejs() { +_b9_init_nodejs() { local NODEJS . ~/.nvm/nvm.sh &> /dev/null || : @@ -33,4 +33,20 @@ _b9_init_find_nodejs() { fi echo $NODEJS +} + +_b9_init_npm() { + local NPM + + for NPM in $(which npm) /usr/local/bin/npm /usr/bin/npm; do + [ -x $NPM ] && break + NPM="" + done + + if [ -z "$NPM" ]; then + echo "Can't find npm executable" 1>&2 + exit 1 + fi + + echo $NPM } \ No newline at end of file diff --git a/b9/lib/js/package.json b/b9/lib/js/package.json new file mode 100644 index 00000000..48327c81 --- /dev/null +++ b/b9/lib/js/package.json @@ -0,0 +1,9 @@ +{ + "name": "b9-utils", + "private": true, + "dependencies": { + "async": "^1.5.2", + "lodash": "^4.2.1", + "optimist": "^0.6.1" + } +} diff --git a/b9/lib/js/release_event.js b/b9/lib/js/release_event.js index c1b01ca0..4b0b4faf 100644 --- a/b9/lib/js/release_event.js +++ b/b9/lib/js/release_event.js @@ -1,26 +1,53 @@ "use strict"; -var request = require('request'); +var https = require("https"); var DATADOG_API_KEY = '64e56d39dfdd7f2bbf06f09100d51a18'; -var DATADOG_API_URL = 'https://app.datadoghq.com/api/v1/events'; +var DATADOG_API_URL = 'https://app.datadoghq.com'; module.exports = releaseEvent; if (!module.parent) { var argv = process.argv; - releaseEvent(argv[2], argv[3], argv[4], argv[5]); + releaseEvent(argv[2], argv[3], argv[4], argv[5], function(err) { + if (err) { + console.error("Error posting release event to datadog" + err.message); + process.exit(1); + } + process.exit(0); + }); } function datadogEvent(msg, callback) { - request.post({ - url: DATADOG_API_URL, - qs: { api_key: DATADOG_API_KEY }, - json: msg - }, callback); + + var payload = JSON.stringify(msg); + + var req = https.request({ + hostname: "app.datadoghq.com", + port: 443, + path: "/api/v1/events?api_key=" + encodeURIComponent(DATADOG_API_KEY), + method: "POST", + headers: { + "Accept": "application/json", + "Content-Type": "application/json", + "Content-Length": payload.length + } + }, function(res) { + if (res.statusCode >= 400) + return callback(new Error("request failed with status code " + res.statusCode)); + + callback(); + }); + + req.on("error", function(e) { + callback(e); + }); + + req.write(payload); + req.end(); } -function releaseEvent(application, mode, version, pattern) { +function releaseEvent(application, mode, version, pattern, callback) { datadogEvent({ title: 'Release: ' + application + ' version ' + version + ' to "' + pattern + '"', tags: [ @@ -30,7 +57,5 @@ function releaseEvent(application, mode, version, pattern) { 'version:' + version, 'pattern:' + pattern ] - }, function(err) { - if (err) console.error("Error posting release event to datadog" + err.message); - }); + }, callback); } \ No newline at end of file diff --git a/b9/lib/package_service_docker.sh b/b9/lib/package_service_docker.sh index 2ac33b0e..c051f305 100644 --- a/b9/lib/package_service_docker.sh +++ b/b9/lib/package_service_docker.sh @@ -6,20 +6,28 @@ _d9_package_sync_workdir_docker() { pushd $WORKDIR &> /dev/null - _do_package_docker_init_source $WORKDIR $SOURCE $VERSION $SETTINGS - _do_package_docker_init_workdir + _b9_package_docker_init_source $WORKDIR $SOURCE $VERSION $SETTINGS + _b9_package_docker_init_workdir - _do_package_docker_node_modules $WORKDIR $SOURCE $SETTINGS - _do_package_docker_generate_settings $WORKDIR $SOURCE $SETTINGS - _do_package_docker_include_files $WORKDIR $SOURCE $SETTINGS - _do_package_docker_copy_plugins $WORKDIR $SOURCE $SETTINGS + _b9_init_node_helper + _b9_package_docker_node_modules $WORKDIR $SOURCE $SETTINGS + _b9_package_docker_generate_settings $WORKDIR $SOURCE $SETTINGS + _b9_package_docker_include_files $WORKDIR $SOURCE $SETTINGS + _b9_package_docker_copy_plugins $WORKDIR $SOURCE $SETTINGS rm -rf $SOURCE popd &> /dev/null } -_do_package_docker_init_source() { +_b9_init_node_helper() { + pushd $B9_DIR/lib/js &> /dev/null + rm -rf node_modules + $NPM install + popd &> /dev/null +} + +_b9_package_docker_init_source() { local WORKDIR=$1 local SOURCE=$2 local VERSION=$3 @@ -32,14 +40,14 @@ _do_package_docker_init_source() { _d9_package_npm_install $SOURCE } -_do_package_docker_init_workdir() { +_b9_package_docker_init_workdir() { mkdir -p plugins mkdir -p node_modules mkdir -p settings mkdir -p configs } -_do_package_docker_node_modules() { +_b9_package_docker_node_modules() { local WORKDIR=$1 local SOURCE=$2 local SETTINGS=$3 @@ -64,7 +72,7 @@ _do_package_docker_node_modules() { popd &> /dev/null } -_do_package_docker_generate_settings() { +_b9_package_docker_generate_settings() { local WORKDIR=$1 local SOURCE=$2 local SETTINGS=$3 @@ -72,7 +80,7 @@ _do_package_docker_generate_settings() { $NODEJS $B9_DIR/lib/js/generate_settings.js docker --targetFile=$WORKDIR/settings/$SETTINGS.js --source=$SOURCE --settings=$SETTINGS } -_do_package_docker_include_files() { +_b9_package_docker_include_files() { local WORKDIR=$1 local SOURCE=$2 local SETTINGS=$3 @@ -100,7 +108,7 @@ _do_package_docker_include_files() { popd &> /dev/null } -_do_package_docker_copy_plugins() { +_b9_package_docker_copy_plugins() { local WORKDIR=$1 local SOURCE=$2 local SETTINGS=$3