now working

This commit is contained in:
2016-07-19 19:21:06 +02:00
parent 2d5054be0b
commit ca0ecd4e93
20 changed files with 215 additions and 38 deletions

View File

@ -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");
}
});

View File

@ -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 = () => {

View File

@ -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
};

View File

@ -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);

View File

@ -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");
export import shelljs = require("shelljs");
export import smartfile = require("smartfile");
export import smartstring = require("smartstring");

View File

@ -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}];
`);
}