dockerize-app
Advanced tools
| # Change Log | ||
| All notable changes to this project will be documented in this file. | ||
| This project adheres to [Semantic Versioning](http://semver.org/). | ||
| ## [1.1.0] - 2015-11-26 | ||
| - Source code location in container changed to /usr/local/[app-name] |
| { | ||
| "name": "dockerize-app", | ||
| "version": "1.1.0", | ||
| "dependencies": { | ||
| "lodash-deep": { | ||
| "version": "1.6.0", | ||
| "from": "lodash-deep@>=1.6.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/lodash-deep/-/lodash-deep-1.6.0.tgz", | ||
| "dependencies": { | ||
| "lodash": { | ||
| "version": "3.10.1", | ||
| "from": "lodash@>=3.10.0 <4.0.0", | ||
| "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "request-promise": { | ||
| "version": "1.0.2", | ||
| "from": "request-promise@>=1.0.2 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-1.0.2.tgz", | ||
| "dependencies": { | ||
| "bluebird": { | ||
| "version": "2.10.2", | ||
| "from": "bluebird@>=2.3.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz" | ||
| }, | ||
| "cls-bluebird": { | ||
| "version": "1.0.1", | ||
| "from": "cls-bluebird@>=1.0.1 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-1.0.1.tgz", | ||
| "dependencies": { | ||
| "shimmer": { | ||
| "version": "1.1.0", | ||
| "from": "shimmer@>=1.0.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "lodash": { | ||
| "version": "3.10.1", | ||
| "from": "lodash@>=3.10.0 <4.0.0", | ||
| "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" | ||
| }, | ||
| "request": { | ||
| "version": "2.67.0", | ||
| "from": "request@>=2.34.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", | ||
| "dependencies": { | ||
| "bl": { | ||
| "version": "1.0.0", | ||
| "from": "bl@>=1.0.0 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz", | ||
| "dependencies": { | ||
| "readable-stream": { | ||
| "version": "2.0.4", | ||
| "from": "readable-stream@>=2.0.0 <2.1.0", | ||
| "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.4.tgz", | ||
| "dependencies": { | ||
| "core-util-is": { | ||
| "version": "1.0.2", | ||
| "from": "core-util-is@>=1.0.0 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" | ||
| }, | ||
| "inherits": { | ||
| "version": "2.0.1", | ||
| "from": "inherits@>=2.0.1 <2.1.0", | ||
| "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" | ||
| }, | ||
| "isarray": { | ||
| "version": "0.0.1", | ||
| "from": "isarray@0.0.1", | ||
| "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" | ||
| }, | ||
| "process-nextick-args": { | ||
| "version": "1.0.3", | ||
| "from": "process-nextick-args@>=1.0.0 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" | ||
| }, | ||
| "string_decoder": { | ||
| "version": "0.10.31", | ||
| "from": "string_decoder@>=0.10.0 <0.11.0", | ||
| "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" | ||
| }, | ||
| "util-deprecate": { | ||
| "version": "1.0.2", | ||
| "from": "util-deprecate@>=1.0.1 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "caseless": { | ||
| "version": "0.11.0", | ||
| "from": "caseless@>=0.11.0 <0.12.0", | ||
| "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" | ||
| }, | ||
| "extend": { | ||
| "version": "3.0.0", | ||
| "from": "extend@>=3.0.0 <3.1.0", | ||
| "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" | ||
| }, | ||
| "forever-agent": { | ||
| "version": "0.6.1", | ||
| "from": "forever-agent@>=0.6.1 <0.7.0", | ||
| "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" | ||
| }, | ||
| "form-data": { | ||
| "version": "1.0.0-rc3", | ||
| "from": "form-data@>=1.0.0-rc3 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", | ||
| "dependencies": { | ||
| "async": { | ||
| "version": "1.5.0", | ||
| "from": "async@>=1.4.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/async/-/async-1.5.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "json-stringify-safe": { | ||
| "version": "5.0.1", | ||
| "from": "json-stringify-safe@>=5.0.1 <5.1.0", | ||
| "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" | ||
| }, | ||
| "mime-types": { | ||
| "version": "2.1.7", | ||
| "from": "mime-types@>=2.1.7 <2.2.0", | ||
| "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz", | ||
| "dependencies": { | ||
| "mime-db": { | ||
| "version": "1.19.0", | ||
| "from": "mime-db@>=1.19.0 <1.20.0", | ||
| "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "node-uuid": { | ||
| "version": "1.4.7", | ||
| "from": "node-uuid@>=1.4.7 <1.5.0", | ||
| "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz" | ||
| }, | ||
| "qs": { | ||
| "version": "5.2.0", | ||
| "from": "qs@>=5.2.0 <5.3.0", | ||
| "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz" | ||
| }, | ||
| "tunnel-agent": { | ||
| "version": "0.4.1", | ||
| "from": "tunnel-agent@>=0.4.1 <0.5.0", | ||
| "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz" | ||
| }, | ||
| "tough-cookie": { | ||
| "version": "2.2.1", | ||
| "from": "tough-cookie@>=2.2.0 <2.3.0", | ||
| "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.1.tgz" | ||
| }, | ||
| "http-signature": { | ||
| "version": "1.1.0", | ||
| "from": "http-signature@>=1.1.0 <1.2.0", | ||
| "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.0.tgz", | ||
| "dependencies": { | ||
| "assert-plus": { | ||
| "version": "0.1.5", | ||
| "from": "assert-plus@>=0.1.5 <0.2.0", | ||
| "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" | ||
| }, | ||
| "jsprim": { | ||
| "version": "1.2.2", | ||
| "from": "jsprim@>=1.2.2 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.2.2.tgz", | ||
| "dependencies": { | ||
| "extsprintf": { | ||
| "version": "1.0.2", | ||
| "from": "extsprintf@1.0.2", | ||
| "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" | ||
| }, | ||
| "json-schema": { | ||
| "version": "0.2.2", | ||
| "from": "json-schema@0.2.2", | ||
| "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz" | ||
| }, | ||
| "verror": { | ||
| "version": "1.3.6", | ||
| "from": "verror@1.3.6", | ||
| "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "sshpk": { | ||
| "version": "1.7.0", | ||
| "from": "sshpk@>=1.7.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.7.0.tgz", | ||
| "dependencies": { | ||
| "asn1": { | ||
| "version": "0.2.3", | ||
| "from": "asn1@>=0.2.3 <0.3.0", | ||
| "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz" | ||
| }, | ||
| "assert-plus": { | ||
| "version": "0.2.0", | ||
| "from": "assert-plus@>=0.2.0 <0.3.0", | ||
| "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz" | ||
| }, | ||
| "dashdash": { | ||
| "version": "1.10.1", | ||
| "from": "dashdash@>=1.10.1 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.10.1.tgz", | ||
| "dependencies": { | ||
| "assert-plus": { | ||
| "version": "0.1.5", | ||
| "from": "assert-plus@>=0.1.0 <0.2.0", | ||
| "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "jsbn": { | ||
| "version": "0.1.0", | ||
| "from": "jsbn@>=0.1.0 <0.2.0", | ||
| "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" | ||
| }, | ||
| "tweetnacl": { | ||
| "version": "0.13.2", | ||
| "from": "tweetnacl@>=0.13.0 <1.0.0", | ||
| "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.2.tgz" | ||
| }, | ||
| "jodid25519": { | ||
| "version": "1.0.2", | ||
| "from": "jodid25519@>=1.0.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz" | ||
| }, | ||
| "ecc-jsbn": { | ||
| "version": "0.1.1", | ||
| "from": "ecc-jsbn@>=0.0.1 <1.0.0", | ||
| "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "oauth-sign": { | ||
| "version": "0.8.0", | ||
| "from": "oauth-sign@>=0.8.0 <0.9.0", | ||
| "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz" | ||
| }, | ||
| "hawk": { | ||
| "version": "3.1.2", | ||
| "from": "hawk@>=3.1.0 <3.2.0", | ||
| "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.2.tgz", | ||
| "dependencies": { | ||
| "hoek": { | ||
| "version": "2.16.3", | ||
| "from": "hoek@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" | ||
| }, | ||
| "boom": { | ||
| "version": "2.10.1", | ||
| "from": "boom@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" | ||
| }, | ||
| "cryptiles": { | ||
| "version": "2.0.5", | ||
| "from": "cryptiles@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" | ||
| }, | ||
| "sntp": { | ||
| "version": "1.0.9", | ||
| "from": "sntp@>=1.0.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "aws-sign2": { | ||
| "version": "0.6.0", | ||
| "from": "aws-sign2@>=0.6.0 <0.7.0", | ||
| "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" | ||
| }, | ||
| "stringstream": { | ||
| "version": "0.0.5", | ||
| "from": "stringstream@>=0.0.4 <0.1.0", | ||
| "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" | ||
| }, | ||
| "combined-stream": { | ||
| "version": "1.0.5", | ||
| "from": "combined-stream@>=1.0.5 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", | ||
| "dependencies": { | ||
| "delayed-stream": { | ||
| "version": "1.0.0", | ||
| "from": "delayed-stream@>=1.0.0 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "isstream": { | ||
| "version": "0.1.2", | ||
| "from": "isstream@>=0.1.2 <0.2.0", | ||
| "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" | ||
| }, | ||
| "is-typedarray": { | ||
| "version": "1.0.0", | ||
| "from": "is-typedarray@>=1.0.0 <1.1.0", | ||
| "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" | ||
| }, | ||
| "har-validator": { | ||
| "version": "2.0.3", | ||
| "from": "har-validator@>=2.0.2 <2.1.0", | ||
| "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.3.tgz", | ||
| "dependencies": { | ||
| "chalk": { | ||
| "version": "1.1.1", | ||
| "from": "chalk@>=1.1.1 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", | ||
| "dependencies": { | ||
| "ansi-styles": { | ||
| "version": "2.1.0", | ||
| "from": "ansi-styles@>=2.1.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz" | ||
| }, | ||
| "escape-string-regexp": { | ||
| "version": "1.0.3", | ||
| "from": "escape-string-regexp@>=1.0.2 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz" | ||
| }, | ||
| "has-ansi": { | ||
| "version": "2.0.0", | ||
| "from": "has-ansi@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", | ||
| "dependencies": { | ||
| "ansi-regex": { | ||
| "version": "2.0.0", | ||
| "from": "ansi-regex@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "strip-ansi": { | ||
| "version": "3.0.0", | ||
| "from": "strip-ansi@>=3.0.0 <4.0.0", | ||
| "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz", | ||
| "dependencies": { | ||
| "ansi-regex": { | ||
| "version": "2.0.0", | ||
| "from": "ansi-regex@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "supports-color": { | ||
| "version": "2.0.0", | ||
| "from": "supports-color@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "commander": { | ||
| "version": "2.9.0", | ||
| "from": "commander@>=2.9.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", | ||
| "dependencies": { | ||
| "graceful-readlink": { | ||
| "version": "1.0.1", | ||
| "from": "graceful-readlink@>=1.0.0", | ||
| "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "is-my-json-valid": { | ||
| "version": "2.12.3", | ||
| "from": "is-my-json-valid@>=2.12.3 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.3.tgz", | ||
| "dependencies": { | ||
| "generate-function": { | ||
| "version": "2.0.0", | ||
| "from": "generate-function@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" | ||
| }, | ||
| "generate-object-property": { | ||
| "version": "1.2.0", | ||
| "from": "generate-object-property@>=1.1.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", | ||
| "dependencies": { | ||
| "is-property": { | ||
| "version": "1.0.2", | ||
| "from": "is-property@>=1.0.0 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "jsonpointer": { | ||
| "version": "2.0.0", | ||
| "from": "jsonpointer@2.0.0", | ||
| "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz" | ||
| }, | ||
| "xtend": { | ||
| "version": "4.0.1", | ||
| "from": "xtend@>=4.0.0 <5.0.0", | ||
| "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "pinkie-promise": { | ||
| "version": "2.0.0", | ||
| "from": "pinkie-promise@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz", | ||
| "dependencies": { | ||
| "pinkie": { | ||
| "version": "2.0.1", | ||
| "from": "pinkie@>=2.0.0 <3.0.0", | ||
| "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.1.tgz" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "continuation-local-storage": { | ||
| "version": "3.1.4", | ||
| "from": "continuation-local-storage@>=3.0.0 <4.0.0", | ||
| "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.1.4.tgz", | ||
| "dependencies": { | ||
| "async-listener": { | ||
| "version": "0.5.6", | ||
| "from": "async-listener@>=0.5.0 <0.6.0", | ||
| "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.5.6.tgz", | ||
| "dependencies": { | ||
| "shimmer": { | ||
| "version": "1.0.0", | ||
| "from": "shimmer@1.0.0", | ||
| "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.0.0.tgz" | ||
| } | ||
| } | ||
| }, | ||
| "emitter-listener": { | ||
| "version": "1.0.1", | ||
| "from": "emitter-listener@>=1.0.1 <2.0.0", | ||
| "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.0.1.tgz", | ||
| "dependencies": { | ||
| "shimmer": { | ||
| "version": "1.0.0", | ||
| "from": "shimmer@1.0.0", | ||
| "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.0.0.tgz" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } |
+2
-2
@@ -47,4 +47,4 @@ 'use strict'; | ||
| return `FROM node:${version}${os.EOL}` | ||
| + `COPY . /usr/${packageJson.name}${os.EOL}` | ||
| + `WORKDIR /usr/${packageJson.name}${os.EOL}` | ||
| + `COPY . /usr/local/${packageJson.name}${os.EOL}` | ||
| + `WORKDIR /usr/local/${packageJson.name}${os.EOL}` | ||
| + `RUN npm install${os.EOL}` | ||
@@ -51,0 +51,0 @@ + `CMD ${runCmd}`; |
+2
-2
| { | ||
| "name": "dockerize-app", | ||
| "version": "1.0.2", | ||
| "version": "1.1.0", | ||
| "description": "CLI tool to launch a docker container and create a Dockerfile for NodeJS applications", | ||
@@ -39,3 +39,3 @@ "preferGlobal": true, | ||
| "mocha": "^2.3.4", | ||
| "nock": "^3.1.1" | ||
| "nock": "^3.3.2" | ||
| }, | ||
@@ -42,0 +42,0 @@ "dependencies": { |
| test: | ||
| override: | ||
| - nvm install 4.0 && npm rebuild && npm test | ||
| - nvm install 4.1 && npm rebuild && npm test | ||
| - nvm install 4.2 && npm rebuild && npm test | ||
| - nvm install 5.0 && npm rebuild && npm test | ||
| - nvm install 5.1 && npm rebuild && npm test |
-35
| 'use strict'; | ||
| module.exports = function (grunt) { | ||
| require('load-grunt-tasks')(grunt); | ||
| grunt.initConfig({ | ||
| module: ['./*.js', './lib/**/*.js'], | ||
| tests: ['./test/**/*.js'], | ||
| eslint: { | ||
| target: ['<%= module %>', '<%= tests %>'] | ||
| }, | ||
| mochaTest: { | ||
| test: { | ||
| options: { | ||
| reporter: 'spec', | ||
| clearRequireCache: false | ||
| }, | ||
| src: ['<%= tests %>'] | ||
| } | ||
| }, | ||
| watch: { | ||
| all: { | ||
| files: ['<%= module %>', '<%= tests %>'], | ||
| tasks: ['lint', 'test'] | ||
| } | ||
| }, | ||
| retire: { | ||
| node: ['node'] | ||
| } | ||
| }); | ||
| grunt.registerTask('lint', 'eslint'); | ||
| grunt.registerTask('test', 'mochaTest:test'); | ||
| grunt.registerTask('default', ['lint', 'test']); | ||
| }; |
| 'use strict'; | ||
| const os = require('os'); | ||
| const expect = require('chai').expect; | ||
| const nock = require('nock'); | ||
| const dockerize = require('../lib/dockerize'); | ||
| describe('Dockerize', () => { | ||
| describe('dockerfile', () => { | ||
| let nvmrcNockScope; | ||
| let packageJsonNockScope; | ||
| let unknownNodeNockScope; | ||
| beforeEach(() => { | ||
| nvmrcNockScope = nock('https://semver.io') | ||
| .get('/node/4.x.x') | ||
| .reply(200, '4.2.1'); | ||
| packageJsonNockScope = nock('https://semver.io') | ||
| .get('/node/5.x.x') | ||
| .reply(200, '5.0.0'); | ||
| unknownNodeNockScope = nock('https://semver.io') | ||
| .get('/node/stable') | ||
| .reply(200, '5.1.0') | ||
| }); | ||
| afterEach(() => { | ||
| nock.cleanAll(); | ||
| }); | ||
| it('throws when there is no package.json', done => { | ||
| return dockerize.dockerfile(__dirname + '/12345') | ||
| .then(() => { | ||
| done(new Error('Expected test to error')); | ||
| }) | ||
| .catch(err => { | ||
| expect(err).to.exist; | ||
| expect(err).to.be.a('error'); | ||
| expect(err.message).to.equal(`${__dirname}/12345 does not contain a package.json file!`); | ||
| done(); | ||
| }); | ||
| }); | ||
| describe('node version from .nvmrc', () => { | ||
| it('requests node version from semver.io', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_nvmrc') | ||
| .then(() => { | ||
| expect(nvmrcNockScope.isDone()).to.equal(true, 'Version not requested from semver.io!'); | ||
| }); | ||
| }); | ||
| it('sets dockerfile FROM', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_nvmrc') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[0]).to.equal('FROM node:4.2.1'); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('node version from package.json', () => { | ||
| it('requests node version from semver.io', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_node_engine') | ||
| .then(() => { | ||
| expect(packageJsonNockScope.isDone()).to.equal(true, 'Version not requested from semver.io!'); | ||
| }); | ||
| }); | ||
| it('sets dockerfile FROM', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_node_engine') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[0]).to.equal('FROM node:5.0.0'); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('unknown node version', () => { | ||
| it('requests stable version from semver.io', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_no_node_version') | ||
| .then(() => { | ||
| expect(unknownNodeNockScope.isDone()).to.equal(true, 'Version not requested from semver.io!'); | ||
| }); | ||
| });; | ||
| it('sets dockerfile FROM', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_no_node_version') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[0]).to.equal('FROM node:5.1.0'); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('error getting node version', () => { | ||
| beforeEach(() => { | ||
| // override existing nock response to 500 error | ||
| nock.cleanAll(); | ||
| nock('https://semver.io') | ||
| .get('/node/4.x.x') | ||
| .reply(500, 'an error from semver.io'); | ||
| }); | ||
| it('throws with error information', done => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_nvmrc') | ||
| .then(() => { | ||
| done(new Error('Expected an error in test')); | ||
| }) | ||
| .catch(err => { | ||
| expect(err).to.exist; | ||
| expect(err).to.be.a('error'); | ||
| expect(err.message).to.equal('Unable to get node version for base image from https://semver.io. 500 - an error from semver.io'); | ||
| done(); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('CMD', () => { | ||
| it('is npm start when defined in package.json', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_npm_start') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[lines.length - 1]).to.equal('CMD ["npm", "start"]'); | ||
| }); | ||
| }); | ||
| it('is node [entrypoint] when defined in package.json', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_node_entrypoint') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[lines.length - 1]).to.equal('CMD ["node", "entrypoint.js"]'); | ||
| }); | ||
| }); | ||
| it('throws when unknown', done => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_unknown_cmd') | ||
| .then(dockerfile => { | ||
| done(new Error('Expected an error in test')); | ||
| }) | ||
| .catch(err => { | ||
| expect(err).to.exist; | ||
| expect(err).to.be.a('error'); | ||
| expect(err.message).to.equal('Cannot determine CMD for Dockerfile. Set "start" script or "main" attribute in package.json!'); | ||
| done(); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('source code', () => { | ||
| it('copies source code to /usr/[app-name]', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_source_code') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[1]).to.equal('COPY . /usr/package-json-name') | ||
| }); | ||
| }); | ||
| it('sets WORKDIR to /usr/[app-name]', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_source_code') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[2]).to.equal('WORKDIR /usr/package-json-name') | ||
| }); | ||
| }); | ||
| it ('runs npm install', () => { | ||
| return dockerize.dockerfile(__dirname + '/sample_app_source_code') | ||
| .then(dockerfile => { | ||
| const lines = dockerfile.split(os.EOL); | ||
| expect(lines[3]).to.equal('RUN npm install') | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| }); |
| { | ||
| "scripts": { | ||
| "start": "node index.js" | ||
| } | ||
| } |
| { | ||
| "engines": { | ||
| "node": "5.x.x" | ||
| }, | ||
| "scripts": { | ||
| "start": "node index.js" | ||
| } | ||
| } |
| { | ||
| "main": "entrypoint.js" | ||
| } |
| { | ||
| "engines": { | ||
| "node": "5.x.x" | ||
| }, | ||
| "scripts": { | ||
| "start": "node index.js" | ||
| } | ||
| } |
| 4.x.x |
| { | ||
| "scripts": { | ||
| "start": "node index.js" | ||
| } | ||
| } |
| { | ||
| "name": "package-json-name", | ||
| "scripts": { | ||
| "start": "node index.js" | ||
| } | ||
| } |
| { | ||
| "scripts": {} | ||
| } |
Sorry, the diff of this file is not supported yet
Shrinkwrap
Supply chain riskPackage contains a shrinkwrap file. This may allow the package to bypass normal install procedures.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
25638
92.88%513
106.02%9
-50%1
Infinity%1
Infinity%