diff --git a/assets/Dockerfile b/assets/Dockerfile new file mode 100644 index 0000000..c14246a --- /dev/null +++ b/assets/Dockerfile @@ -0,0 +1,5 @@ +FROM hosttoday/ht-docker-node:npmts +RUN mkdir /workspace +WORKDIR /workspace +ENV CI=true +CMD ["npm","test"]; diff --git a/dist/index.js b/dist/index.js index 9052a77..64b792e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,4 +1,10 @@ "use strict"; +const plugins = require("./npmdocker.plugins"); const promisechain = require("./npmdocker.promisechain"); -promisechain.run(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsTUFBWSxZQUFZLFdBQU0sMEJBQTBCLENBQUMsQ0FBQTtBQUV6RCxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMifQ== \ No newline at end of file +promisechain.run() + .then((configArg) => { + if (configArg.exitCode == 0) { + plugins.beautylog.success("Allright test in docker ran through"); + } +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0scUJBQXFCLENBQUMsQ0FBQTtBQUMvQyxNQUFZLFlBQVksV0FBTSwwQkFBMEIsQ0FBQyxDQUFBO0FBSXpELFlBQVksQ0FBQyxHQUFHLEVBQUU7S0FDYixJQUFJLENBQUMsQ0FBQyxTQUE4QjtJQUNqQyxFQUFFLENBQUEsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUM7UUFDeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/dist/npmdocker.config.d.ts b/dist/npmdocker.config.d.ts index 76d1519..7cbcd42 100644 --- a/dist/npmdocker.config.d.ts +++ b/dist/npmdocker.config.d.ts @@ -1,3 +1,8 @@ /// import * as plugins from "./npmdocker.plugins"; +export interface IConfig { + baseImage: string; + command: string; + exitCode?: number; +} export declare let run: () => plugins.q.Promise<{}>; diff --git a/dist/npmdocker.config.js b/dist/npmdocker.config.js index 97a309e..8422e4f 100644 --- a/dist/npmdocker.config.js +++ b/dist/npmdocker.config.js @@ -2,12 +2,14 @@ const plugins = require("./npmdocker.plugins"); let config = plugins.npmextra.dataFor({ toolName: "npmdocker", - defaultSettings: {}, - cwd: "" + defaultSettings: { + baseImage: "hosttoday/ht-docker-node:npmts", + command: "npm test" + } }); exports.run = () => { let done = plugins.q.defer(); done.resolve(config); return done.promise; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWRvY2tlci5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHFCQUFxQixDQUFDLENBQUE7QUFHL0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDbEMsUUFBUSxFQUFDLFdBQVc7SUFDcEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsR0FBRyxFQUFFLEVBQUU7Q0FDVixDQUFDLENBQUM7QUFFUSxXQUFHLEdBQUc7SUFDYixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFBIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWRvY2tlci5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHFCQUFxQixDQUFDLENBQUE7QUFTL0MsSUFBSSxNQUFNLEdBQVcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDMUMsUUFBUSxFQUFDLFdBQVc7SUFDcEIsZUFBZSxFQUFFO1FBQ2IsU0FBUyxFQUFDLGdDQUFnQztRQUMxQyxPQUFPLEVBQUMsVUFBVTtLQUNyQjtDQUNKLENBQUMsQ0FBQztBQUVRLFdBQUcsR0FBRztJQUNiLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/dist/npmdocker.docker.d.ts b/dist/npmdocker.docker.d.ts index 8a338d3..dbc6353 100644 --- a/dist/npmdocker.docker.d.ts +++ b/dist/npmdocker.docker.d.ts @@ -1,8 +1,3 @@ /// import * as plugins from "./npmdocker.plugins"; -/** - * check if docker is available - */ -export declare let checkDocker: () => plugins.q.Promise<{}>; -export declare let makeDockerReady: () => void; export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmdocker.docker.js b/dist/npmdocker.docker.js index 48aaf93..077f553 100644 --- a/dist/npmdocker.docker.js +++ b/dist/npmdocker.docker.js @@ -1,11 +1,20 @@ "use strict"; const plugins = require("./npmdocker.plugins"); +const paths = require("./npmdocker.paths"); +const snippets = require("./npmdocker.snippets"); +let config; +let dockerData = { + imageTag: "npmdocker-temp-image:latest", + containerName: "npmdocker-temp-container", + exitCode: 0 +}; /** * check if docker is available */ -exports.checkDocker = () => { +let checkDocker = () => { let done = plugins.q.defer(); if (plugins.shelljs.which("docker")) { + plugins.beautylog.ok("Docker found!"); done.resolve(); } else { @@ -13,10 +22,80 @@ exports.checkDocker = () => { } return done.promise; }; -exports.makeDockerReady = () => { }; -exports.run = (configArg) => { +/** + * builds the Dockerfile according to the config in the project + */ +let buildDockerFile = () => { let done = plugins.q.defer(); - done.resolve(configArg); + let dockerfile = snippets.dockerfileSnippet({ + baseImage: config.baseImage, + command: config.command + }); + plugins.beautylog.info(`Base image is: ${config.baseImage}`); + plugins.beautylog.info(`Command is: ${config.command}`); + plugins.smartfile.memory.toFsSync(dockerfile, paths.dockerfile); + plugins.beautylog.ok("Dockerfile created!"); + done.resolve(); return done.promise; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLmRvY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWRvY2tlci5kb2NrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHFCQUFxQixDQUFDLENBQUE7QUFHL0M7O0dBRUc7QUFDUSxtQkFBVyxHQUFHO0lBQ3JCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsRUFBRSxDQUFBLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRVMsdUJBQWUsR0FBRyxRQUFPLENBQUMsQ0FBQztBQUUzQixXQUFHLEdBQUcsQ0FBQyxTQUFTO0lBQ3ZCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUEifQ== \ No newline at end of file +/** + * builds the Dockerimage from the built Dockerfile + */ +let buildDockerImage = () => { + let done = plugins.q.defer(); + plugins.beautylog.log("pulling latest image..."); + plugins.shelljs.exec(`docker pull ${config.baseImage}`, { + silent: true + }); // first pull latest version of baseImage + plugins.shelljs.exec(`docker build -f ${paths.dockerfile} -t ${dockerData.imageTag} ${paths.assets}`, { + silent: true + }, () => { + plugins.beautylog.ok("Dockerimage built!"); + done.resolve(); + }); + return done.promise; +}; +/** + * creates a container by running the built Dockerimage + */ +let runDockerImage = () => { + let done = plugins.q.defer(); + plugins.beautylog.info("Now starting Container!"); + dockerData.exitCode = plugins.shelljs.exec(`docker run -v ${paths.cwd}:/workspace --name ${dockerData.containerName} ${dockerData.imageTag}`).code; + done.resolve(); + return done.promise; +}; +let deleteDockerContainter = () => { + let done = plugins.q.defer(); + plugins.shelljs.exec(`docker rm ${dockerData.containerName}`, { + silent: true + }); + done.resolve(); + plugins.beautylog.ok("removed test container!"); + return done.promise; +}; +let deleteDockerImage = () => { + let done = plugins.q.defer(); + plugins.shelljs.exec(`docker rmi ${dockerData.imageTag}`, { + silent: true + }); + done.resolve(); + plugins.beautylog.ok("removed test image!"); + plugins.beautylog.ok("Cleaned up!"); + return done.promise; +}; +exports.run = (configArg) => { + let done = plugins.q.defer(); + config = configArg; + checkDocker() + .then(buildDockerFile) + .then(buildDockerImage) + .then(runDockerImage) + .then(deleteDockerContainter) + .then(deleteDockerImage) + .then(() => { + done.resolve(configArg); + }); + return done.promise; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLmRvY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWRvY2tlci5kb2NrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHFCQUFxQixDQUFDLENBQUE7QUFDL0MsTUFBWSxLQUFLLFdBQU0sbUJBQW1CLENBQUMsQ0FBQTtBQUMzQyxNQUFZLFFBQVEsV0FBTSxzQkFBc0IsQ0FBQyxDQUFBO0FBRWpELElBQUksTUFBTSxDQUFDO0FBQ1gsSUFBSSxVQUFVLEdBQUc7SUFDYixRQUFRLEVBQUUsNkJBQTZCO0lBQ3ZDLGFBQWEsRUFBRSwwQkFBMEI7SUFDekMsUUFBUSxFQUFDLENBQUM7Q0FDYixDQUFDO0FBQ0Y7O0dBRUc7QUFDSCxJQUFJLFdBQVcsR0FBRztJQUNkLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsRUFBRSxDQUFBLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxJQUFJLGVBQWUsR0FBRztJQUNsQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLElBQUksVUFBVSxHQUFVLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztRQUMvQyxTQUFTLEVBQUMsTUFB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 \ No newline at end of file diff --git a/dist/npmdocker.paths.d.ts b/dist/npmdocker.paths.d.ts index 80e9ff5..d0fffae 100644 --- a/dist/npmdocker.paths.d.ts +++ b/dist/npmdocker.paths.d.ts @@ -1 +1,4 @@ +export declare let cwd: string; export declare let packageBase: string; +export declare let assets: string; +export declare let dockerfile: string; diff --git a/dist/npmdocker.paths.js b/dist/npmdocker.paths.js index b6c9b69..24a4602 100644 --- a/dist/npmdocker.paths.js +++ b/dist/npmdocker.paths.js @@ -1,4 +1,9 @@ "use strict"; const plugins = require("./npmdocker.plugins"); +// directories +exports.cwd = process.cwd(); exports.packageBase = plugins.path.join(__dirname, "../"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLnBhdGhzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtZG9ja2VyLnBhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxxQkFBcUIsQ0FBQyxDQUFBO0FBRXBDLG1CQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDIn0= \ No newline at end of file +exports.assets = plugins.path.join(exports.packageBase, "assets/"); +plugins.smartfile.fs.ensureDirSync(exports.assets); +exports.dockerfile = plugins.path.join(exports.assets, "Dockerfile"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLnBhdGhzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtZG9ja2VyLnBhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxxQkFBcUIsQ0FBQyxDQUFBO0FBRS9DLGNBQWM7QUFDSCxXQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLG1CQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELGNBQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBVyxFQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxjQUFNLENBQUMsQ0FBQztBQUNoQyxrQkFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQU0sRUFBQyxZQUFZLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/dist/npmdocker.plugins.d.ts b/dist/npmdocker.plugins.d.ts index b02ad57..6a294f1 100644 --- a/dist/npmdocker.plugins.d.ts +++ b/dist/npmdocker.plugins.d.ts @@ -3,5 +3,6 @@ export import beautylog = require("beautylog"); export import npmextra = require("npmextra"); export import path = require("path"); export import q = require("q"); -export declare let shelljs: any; +export import shelljs = require("shelljs"); export import smartfile = require("smartfile"); +export import smartstring = require("smartstring"); diff --git a/dist/npmdocker.plugins.js b/dist/npmdocker.plugins.js index 9dc3586..9f15388 100644 --- a/dist/npmdocker.plugins.js +++ b/dist/npmdocker.plugins.js @@ -6,4 +6,5 @@ exports.path = require("path"); exports.q = require("q"); exports.shelljs = require("shelljs"); exports.smartfile = require("smartfile"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1kb2NrZXIucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNqQyxnQkFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixTQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDcEIsZUFBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIn0= \ No newline at end of file +exports.smartstring = require("smartstring"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1kb2NrZXIucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNqQyxnQkFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixTQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDakIsZUFBTyxXQUFXLFNBQVMsQ0FBQyxDQUFDO0FBQzdCLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsbUJBQVcsV0FBVyxhQUFhLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/dist/npmdocker.snippets.d.ts b/dist/npmdocker.snippets.d.ts new file mode 100644 index 0000000..00ac4fd --- /dev/null +++ b/dist/npmdocker.snippets.d.ts @@ -0,0 +1,5 @@ +export interface IDockerfileSnippet { + baseImage: string; + command: string; +} +export declare let dockerfileSnippet: (optionsArg: IDockerfileSnippet) => string; diff --git a/dist/npmdocker.snippets.js b/dist/npmdocker.snippets.js new file mode 100644 index 0000000..65edd1b --- /dev/null +++ b/dist/npmdocker.snippets.js @@ -0,0 +1,21 @@ +"use strict"; +const plugins = require("./npmdocker.plugins"); +exports.dockerfileSnippet = (optionsArg) => { + let commandArray = optionsArg.command.split(/\s/); + let commandString = ""; + for (let stringItem of commandArray) { + if (!(commandString == "")) { + commandString = commandString + ","; + } + commandString = commandString + '"' + stringItem + '"'; + } + ; + return plugins.smartstring.indent.normalize(` + FROM ${optionsArg.baseImage} + RUN mkdir /workspace + WORKDIR /workspace + ENV CI=true + CMD [${commandString}]; + `); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZG9ja2VyLnNuaXBwZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtZG9ja2VyLnNuaXBwZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxxQkFBcUIsQ0FBQyxDQUFBO0FBT3BDLHlCQUFpQixHQUFHLENBQUMsVUFBNkI7SUFDekQsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsSUFBSSxhQUFhLEdBQVUsRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQSxDQUFDLElBQUksVUFBVSxJQUFJLFlBQVksQ0FBQyxDQUFBLENBQUM7UUFDaEMsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDdkIsYUFBYSxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUM7UUFDeEMsQ0FBQztRQUNELGFBQWEsR0FBRyxhQUFhLEdBQUcsR0FBRyxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDM0QsQ0FBQztJQUFBLENBQUM7SUFDRixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2VBQ2pDLFVBQVUsQ0FBQyxTQUFTOzs7O2VBSXBCLGFBQWE7S0FDdkIsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/package.json b/package.json index fa8ef94..b9922e8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,11 @@ "test": "test" }, "scripts": { - "test": "(npmts)" + "test": "(npm run clean && npm run compile && npm run setupCheck && npm run check)", + "clean": "(rm -rf test/)", + "compile": "(npmts --notest)", + "setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)", + "check": "(cd test/ && node ../dist/index.js)" }, "repository": { "type": "git", @@ -29,12 +33,14 @@ }, "dependencies": { "@types/q": "^0.0.27", + "@types/shelljs": "^0.3.27", "beautylog": "^5.0.14", "npmextra": "^1.0.8", "q": "^1.4.1", "rxjs": "^5.0.0-beta.10", "shelljs": "^0.7.0", "smartfile": "^4.0.11", + "smartstring": "^2.0.15", "typings-global": "^1.0.6" } } diff --git a/test b/test new file mode 160000 index 0000000..1478d1e --- /dev/null +++ b/test @@ -0,0 +1 @@ +Subproject commit 1478d1e901d2216c69e5217b84ee27bc6e56716c diff --git a/ts/index.ts b/ts/index.ts index e267a9d..85f6a10 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,5 +1,12 @@ import * as plugins from "./npmdocker.plugins"; import * as promisechain from "./npmdocker.promisechain"; +import * as ConfigModule from "./npmdocker.config"; -promisechain.run(); + +promisechain.run() + .then((configArg:ConfigModule.IConfig) => { + if(configArg.exitCode == 0){ + plugins.beautylog.success("Allright test in docker ran through"); + } + }); diff --git a/ts/npmdocker.config.ts b/ts/npmdocker.config.ts index 1342170..ebe17ce 100644 --- a/ts/npmdocker.config.ts +++ b/ts/npmdocker.config.ts @@ -4,12 +4,15 @@ import * as paths from "./npmdocker.paths"; export interface IConfig { baseImage:string; command:string; + exitCode?:number } let config:IConfig = plugins.npmextra.dataFor({ toolName:"npmdocker", - defaultSettings: {}, - cwd: "" + defaultSettings: { + baseImage:"hosttoday/ht-docker-node:npmts", + command:"npm test" + } }); export let run = () => { diff --git a/ts/npmdocker.docker.ts b/ts/npmdocker.docker.ts index 5bae0de..295f317 100644 --- a/ts/npmdocker.docker.ts +++ b/ts/npmdocker.docker.ts @@ -3,14 +3,18 @@ import * as paths from "./npmdocker.paths"; import * as snippets from "./npmdocker.snippets"; let config; -let imageTag = "npmdocker-temp-image" -let containerName = "npmdocker-temp-container" +let dockerData = { + imageTag: "npmdocker-temp-image:latest", + containerName: "npmdocker-temp-container", + exitCode:0 +}; /** * check if docker is available */ let checkDocker = () => { let done = plugins.q.defer(); if(plugins.shelljs.which("docker")){ + plugins.beautylog.ok("Docker found!") done.resolve(); } else { done.reject(new Error("docker not found on this machine")); @@ -23,11 +27,15 @@ let checkDocker = () => { */ let buildDockerFile = () => { let done = plugins.q.defer(); - let dockerfile = snippets.dockerfileSnippet({ + let dockerfile:string = snippets.dockerfileSnippet({ baseImage:config.baseImage, command:config.command }); - plugins.smartfile.memory.toFsSync(JSON.stringify(dockerfile),paths.dockerfile); + plugins.beautylog.info(`Base image is: ${config.baseImage}`); + plugins.beautylog.info(`Command is: ${config.command}`); + plugins.smartfile.memory.toFsSync(dockerfile,paths.dockerfile); + plugins.beautylog.ok("Dockerfile created!"); + done.resolve(); return done.promise }; @@ -36,9 +44,16 @@ let buildDockerFile = () => { */ let buildDockerImage = () => { let done = plugins.q.defer(); - plugins.shelljs.exec(`docker pull ${config.baseImage}`); // first pull latest version of baseImage - plugins.shelljs.exec(`docker build -f ${paths.dockerfile} -v ${paths.cwd}:/workdir -t ${imageTag} ${paths.assets}`); - done.resolve(); + plugins.beautylog.log("pulling latest image..."); + plugins.shelljs.exec(`docker pull ${config.baseImage}`,{ + silent:true + }); // first pull latest version of baseImage + plugins.shelljs.exec(`docker build -f ${paths.dockerfile} -t ${dockerData.imageTag} ${paths.assets}`,{ + silent:true + },() => { + plugins.beautylog.ok("Dockerimage built!") + done.resolve(); + }); return done.promise }; @@ -47,17 +62,30 @@ let buildDockerImage = () => { */ let runDockerImage = () => { let done = plugins.q.defer(); - plugins.shelljs.exec(`docker run --name ${containerName} ${imageTag}`); - return done.promise + plugins.beautylog.info("Now starting Container!"); + dockerData.exitCode = plugins.shelljs.exec(`docker run -v ${paths.cwd}:/workspace --name ${dockerData.containerName} ${dockerData.imageTag}`).code; + done.resolve(); + return done.promise; }; let deleteDockerContainter = () => { let done = plugins.q.defer(); + plugins.shelljs.exec(`docker rm ${dockerData.containerName}`,{ + silent:true + }); + done.resolve(); + plugins.beautylog.ok("removed test container!"); return done.promise }; let deleteDockerImage = () => { let done = plugins.q.defer(); + plugins.shelljs.exec(`docker rmi ${dockerData.imageTag}`,{ + silent:true + }); + done.resolve(); + plugins.beautylog.ok("removed test image!"); + plugins.beautylog.ok("Cleaned up!"); return done.promise }; diff --git a/ts/npmdocker.paths.ts b/ts/npmdocker.paths.ts index 1492ee8..a9a5fbe 100644 --- a/ts/npmdocker.paths.ts +++ b/ts/npmdocker.paths.ts @@ -1,5 +1,7 @@ import * as plugins from "./npmdocker.plugins"; +// directories +export let cwd = process.cwd(); export let packageBase = plugins.path.join(__dirname,"../"); export let assets = plugins.path.join(packageBase,"assets/"); plugins.smartfile.fs.ensureDirSync(assets); diff --git a/ts/npmdocker.plugins.ts b/ts/npmdocker.plugins.ts index fe481c8..1fec4af 100644 --- a/ts/npmdocker.plugins.ts +++ b/ts/npmdocker.plugins.ts @@ -3,5 +3,6 @@ export import beautylog = require("beautylog"); export import npmextra = require("npmextra"); export import path = require("path"); export import q = require("q"); -export let shelljs = require("shelljs"); -export import smartfile = require("smartfile"); \ No newline at end of file +export import shelljs = require("shelljs"); +export import smartfile = require("smartfile"); +export import smartstring = require("smartstring"); \ No newline at end of file diff --git a/ts/npmdocker.snippets.ts b/ts/npmdocker.snippets.ts index 86265eb..16e3937 100644 --- a/ts/npmdocker.snippets.ts +++ b/ts/npmdocker.snippets.ts @@ -6,18 +6,19 @@ export interface IDockerfileSnippet { } export let dockerfileSnippet = (optionsArg:IDockerfileSnippet):string => { - let commandArray = optionsArg.command.split(" "); + let commandArray = optionsArg.command.split(/\s/); let commandString:string = ""; for(let stringItem of commandArray){ if(!(commandString == "")){ commandString = commandString + ","; } commandString = commandString + '"' + stringItem + '"'; - } - return ` + }; + return plugins.smartstring.indent.normalize(` FROM ${optionsArg.baseImage} RUN mkdir /workspace WORKDIR /workspace - cmd[${commandString}]; - ` + ENV CI=true + CMD [${commandString}]; + `); } \ No newline at end of file