start tests

This commit is contained in:
Philipp Kunz 2016-06-05 13:01:45 +02:00
parent 229c3ae27b
commit ea01b87949
10 changed files with 157 additions and 66 deletions

View File

@ -1,4 +1,8 @@
export declare let build: () => any; export declare let build: () => any;
export declare let readDockerfiles: () => any;
export declare let cleanTagsArrayFunction: (dockerfileArrayArg: Dockerfile[]) => string[];
export declare let sortDockerfiles: (sortableArrayArg: Dockerfile[]) => any;
export declare let buildDockerfiles: () => any;
export declare class Dockerfile { export declare class Dockerfile {
filePath: string; filePath: string;
repo: string; repo: string;
@ -15,4 +19,6 @@ export declare class Dockerfile {
build(): void; build(): void;
push(): void; push(): void;
} }
export declare let dockerFileVersion: (dockerfileNameArg: string) => string;
export declare let dockerBaseImage: (dockerfileContentArg: string) => string;
export declare let dockerTag: (repoArg: string, versionArg: string) => string; export declare let dockerTag: (repoArg: string, versionArg: string) => string;

File diff suppressed because one or more lines are too long

View File

@ -20,7 +20,9 @@
}, },
"homepage": "https://gitlab.com/pushrocks/npmci#README", "homepage": "https://gitlab.com/pushrocks/npmci#README",
"devDependencies": { "devDependencies": {
"npmts": "^5.2.1" "npmts": "^5.2.1",
"should": "^9.0.0",
"typings-test": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"beautylog": "^5.0.8", "beautylog": "^5.0.8",

2
test/assets/Dockerfile Normal file
View File

@ -0,0 +1,2 @@
FROM ubuntu
RUN apt-get update

View File

@ -0,0 +1,2 @@
FROM myrepo/mygroup:sometag2
RUN apt-get update

View File

@ -0,0 +1 @@
FROM mygroup/myrepo:latest

2
test/test.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
import "typings-test";
import "should";

41
test/test.js Normal file
View File

@ -0,0 +1,41 @@
"use strict";
require("typings-test");
require("should");
var path = require("path");
//set up environment
process.env.CI_BUILD_REPO = "https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git";
process.cwd = function () {
return path.join(__dirname, "assets/");
};
//require NPMCI files
var NpmciBuildDocker = require("../dist/npmci.build.docker");
var dockerfile1;
var dockerfile2;
var sortableArray;
describe("NPMCI", function () {
describe("build.docker", function () {
it("should return valid Dockerfiles", function () {
dockerfile1 = new NpmciBuildDocker.Dockerfile({ filePath: "./Dockerfile", read: true });
dockerfile2 = new NpmciBuildDocker.Dockerfile({ filePath: "./Dockerfile_sometag1", read: true });
dockerfile1.version.should.equal("latest");
dockerfile2.version.should.equal("sometag1");
});
it("should read a directory of Dockerfiles", function (done) {
NpmciBuildDocker.readDockerfiles()
.then(function (readDockerfilesArrayArg) {
readDockerfilesArrayArg[1].version.should.equal("sometag1");
sortableArray = readDockerfilesArrayArg;
done();
});
});
it("should sort an array of Dockerfiles", function (done) {
NpmciBuildDocker.sortDockerfiles(sortableArray)
.then(function (sortedArrayArg) {
console.log(sortedArrayArg);
done();
});
});
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixJQUFPLElBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUM5QixvQkFBb0I7QUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsdURBQXVELENBQUM7QUFDcEYsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRixxQkFBcUI7QUFDckIsSUFBTyxnQkFBZ0IsV0FBVyw0QkFBNEIsQ0FBQyxDQUFDO0FBR2hFLElBQUksV0FBdUMsQ0FBQztBQUM1QyxJQUFJLFdBQXVDLENBQUM7QUFDNUMsSUFBSSxhQUEyQyxDQUFDO0FBRWhELFFBQVEsQ0FBQyxPQUFPLEVBQUM7SUFDYixRQUFRLENBQUMsY0FBYyxFQUFDO1FBQ3BCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBQztZQUNqQyxXQUFXLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1lBQ25GLFdBQVcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFDLFFBQVEsRUFBQyx1QkFBdUIsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUM1RixXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLHdDQUF3QyxFQUFDLFVBQVMsSUFBSTtZQUNyRCxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7aUJBQzdCLElBQUksQ0FBQyxVQUFTLHVCQUFxRDtnQkFDaEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzVELGFBQWEsR0FBRyx1QkFBdUIsQ0FBQTtnQkFDdkMsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFBO1FBQ0YsRUFBRSxDQUFDLHFDQUFxQyxFQUFDLFVBQVMsSUFBSTtZQUNsRCxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO2lCQUMxQyxJQUFJLENBQUMsVUFBUyxjQUE0QztnQkFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQTtRQUNWLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQSIsImZpbGUiOiJ0ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy10ZXN0XCI7XG5pbXBvcnQgXCJzaG91bGRcIjtcbmltcG9ydCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG4vL3NldCB1cCBlbnZpcm9ubWVudFxucHJvY2Vzcy5lbnYuQ0lfQlVJTERfUkVQTyA9IFwiaHR0cHM6Ly95eXl5eXk6eHh4eHh4eHhAZ2l0bGFiLmNvbS9teWdyb3VwL215cmVwby5naXRcIjtcbnByb2Nlc3MuY3dkID0gKCkgPT4ge1xuICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLFwiYXNzZXRzL1wiKTtcbn07XG5cbi8vcmVxdWlyZSBOUE1DSSBmaWxlc1xuaW1wb3J0IE5wbWNpQnVpbGREb2NrZXIgPSByZXF1aXJlKFwiLi4vZGlzdC9ucG1jaS5idWlsZC5kb2NrZXJcIik7XG5cblxubGV0IGRvY2tlcmZpbGUxOk5wbWNpQnVpbGREb2NrZXIuRG9ja2VyZmlsZTtcbmxldCBkb2NrZXJmaWxlMjpOcG1jaUJ1aWxkRG9ja2VyLkRvY2tlcmZpbGU7XG5sZXQgc29ydGFibGVBcnJheTpOcG1jaUJ1aWxkRG9ja2VyLkRvY2tlcmZpbGVbXTtcblxuZGVzY3JpYmUoXCJOUE1DSVwiLGZ1bmN0aW9uKCl7XG4gICAgZGVzY3JpYmUoXCJidWlsZC5kb2NrZXJcIixmdW5jdGlvbigpe1xuICAgICAgICBpdChcInNob3VsZCByZXR1cm4gdmFsaWQgRG9ja2VyZmlsZXNcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgZG9ja2VyZmlsZTEgPSBuZXcgTnBtY2lCdWlsZERvY2tlci5Eb2NrZXJmaWxlKHtmaWxlUGF0aDpcIi4vRG9ja2VyZmlsZVwiLHJlYWQ6dHJ1ZX0pO1xuICAgICAgICAgICAgZG9ja2VyZmlsZTIgPSBuZXcgTnBtY2lCdWlsZERvY2tlci5Eb2NrZXJmaWxlKHtmaWxlUGF0aDpcIi4vRG9ja2VyZmlsZV9zb21ldGFnMVwiLHJlYWQ6dHJ1ZX0pO1xuICAgICAgICAgICAgZG9ja2VyZmlsZTEudmVyc2lvbi5zaG91bGQuZXF1YWwoXCJsYXRlc3RcIik7XG4gICAgICAgICAgICBkb2NrZXJmaWxlMi52ZXJzaW9uLnNob3VsZC5lcXVhbChcInNvbWV0YWcxXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoXCJzaG91bGQgcmVhZCBhIGRpcmVjdG9yeSBvZiBEb2NrZXJmaWxlc1wiLGZ1bmN0aW9uKGRvbmUpe1xuICAgICAgICAgICAgTnBtY2lCdWlsZERvY2tlci5yZWFkRG9ja2VyZmlsZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlYWREb2NrZXJmaWxlc0FycmF5QXJnOk5wbWNpQnVpbGREb2NrZXIuRG9ja2VyZmlsZVtdKXtcbiAgICAgICAgICAgICAgICAgICAgcmVhZERvY2tlcmZpbGVzQXJyYXlBcmdbMV0udmVyc2lvbi5zaG91bGQuZXF1YWwoXCJzb21ldGFnMVwiKTtcbiAgICAgICAgICAgICAgICAgICAgc29ydGFibGVBcnJheSA9IHJlYWREb2NrZXJmaWxlc0FycmF5QXJnXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgaXQoXCJzaG91bGQgc29ydCBhbiBhcnJheSBvZiBEb2NrZXJmaWxlc1wiLGZ1bmN0aW9uKGRvbmUpe1xuICAgICAgICAgICAgTnBtY2lCdWlsZERvY2tlci5zb3J0RG9ja2VyZmlsZXMoc29ydGFibGVBcnJheSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3J0ZWRBcnJheUFyZzpOcG1jaUJ1aWxkRG9ja2VyLkRvY2tlcmZpbGVbXSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHNvcnRlZEFycmF5QXJnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSlcbn0pIl19

42
test/test.ts Normal file
View File

@ -0,0 +1,42 @@
import "typings-test";
import "should";
import path = require("path");
//set up environment
process.env.CI_BUILD_REPO = "https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git";
process.cwd = () => {
return path.join(__dirname,"assets/");
};
//require NPMCI files
import NpmciBuildDocker = require("../dist/npmci.build.docker");
let dockerfile1:NpmciBuildDocker.Dockerfile;
let dockerfile2:NpmciBuildDocker.Dockerfile;
let sortableArray:NpmciBuildDocker.Dockerfile[];
describe("NPMCI",function(){
describe("build.docker",function(){
it("should return valid Dockerfiles",function(){
dockerfile1 = new NpmciBuildDocker.Dockerfile({filePath:"./Dockerfile",read:true});
dockerfile2 = new NpmciBuildDocker.Dockerfile({filePath:"./Dockerfile_sometag1",read:true});
dockerfile1.version.should.equal("latest");
dockerfile2.version.should.equal("sometag1");
});
it("should read a directory of Dockerfiles",function(done){
NpmciBuildDocker.readDockerfiles()
.then(function(readDockerfilesArrayArg:NpmciBuildDocker.Dockerfile[]){
readDockerfilesArrayArg[1].version.should.equal("sometag1");
sortableArray = readDockerfilesArrayArg
done();
});
})
it("should sort an array of Dockerfiles",function(done){
NpmciBuildDocker.sortDockerfiles(sortableArray)
.then(function(sortedArrayArg:NpmciBuildDocker.Dockerfile[]){
console.log(sortedArrayArg);
done();
})
})
})
})

View File

@ -4,55 +4,51 @@ import * as NpmciEnv from "./npmci.env";
export let build = function(){ export let build = function(){
let done = plugins.q.defer(); let done = plugins.q.defer();
plugins.gulp.src("./Dockerfile*")
.pipe(readDockerfiles())
.pipe(plugins.gulpFunction(function(){
sortDockerfiles()
.then(buildDockerfiles)
.then(done.resolve);
},"atEnd"));
return done.promise; return done.promise;
} }
let readDockerfiles = function(){ export let readDockerfiles = function(){
return plugins.through2.obj(function(file,enc,cb){ let done = plugins.q.defer();
let readDockerfilesArray:Dockerfile[] = []
plugins.gulp.src("./Dockerfile*")
.pipe(plugins.through2.obj(function(file,enc,cb){
let myDockerfile = new Dockerfile({ let myDockerfile = new Dockerfile({
filePath:file.path, filePath:file.path,
read:true read:true
}); });
NpmciEnv.dockerFiles.push( readDockerfilesArray.push(myDockerfile);
myDockerfile
);
cb(null,file); cb(null,file);
}); },function(){
done.resolve(readDockerfilesArray);
}));
return done.promise;
} }
let cleanTagsArrayFunction = function(){ export let cleanTagsArrayFunction = function(dockerfileArrayArg:Dockerfile[]):string[]{
let cleanTagsArray = []; let cleanTagsArray:string[] = [];
NpmciEnv.dockerFiles.forEach(function(dockerfileArg){ dockerfileArrayArg.forEach(function(dockerfileArg){
cleanTagsArray.push(dockerfileArg.cleanTag); cleanTagsArray.push(dockerfileArg.cleanTag);
}); });
return cleanTagsArray; return cleanTagsArray;
} }
let sortDockerfiles = function(){ export let sortDockerfiles = function(sortableArrayArg:Dockerfile[]){
let done = plugins.q.defer(); let done = plugins.q.defer();
let sortableArray = NpmciEnv.dockerFiles;
let sortedArray:Dockerfile[] = []; let sortedArray:Dockerfile[] = [];
let sorterFunctionCounter:number = 0; let sorterFunctionCounter:number = 0;
let sorterFunction = function(){ let sorterFunction = function(){
let cleanTags = cleanTagsArrayFunction(); console.log(sorterFunctionCounter);
sortableArray.forEach((dockerfileArg)=>{ let cleanTags = cleanTagsArrayFunction(sortableArrayArg);
sortableArrayArg.forEach((dockerfileArg)=>{
if(cleanTags.indexOf(dockerfileArg.baseImage) == -1){ if(cleanTags.indexOf(dockerfileArg.baseImage) == -1){
let dockerfileArgIndex = sortableArray.indexOf(dockerfileArg); let dockerfileArgIndex = sortableArrayArg.indexOf(dockerfileArg);
sortableArray.splice(dockerfileArgIndex); sortableArrayArg.splice(dockerfileArgIndex,1);
sortedArray.push(dockerfileArg); sortedArray.push(dockerfileArg);
} }
}); });
if(sortableArray.length == 0){ if(sortableArrayArg.length == 0){
console.log(sortedArray); done.resolve(sortedArray);
NpmciEnv.dockerFiles = sortedArray;
done.resolve();
} else if (sorterFunctionCounter < 100) { } else if (sorterFunctionCounter < 100) {
sorterFunctionCounter++; sorterFunctionCounter++;
sorterFunction(); sorterFunction();
@ -62,7 +58,7 @@ let sortDockerfiles = function(){
return done.promise; return done.promise;
} }
let buildDockerfiles = function(){ export let buildDockerfiles = function(){
let done = plugins.q.defer(); let done = plugins.q.defer();
NpmciEnv.dockerFiles.forEach(function(dockerfileArg){ NpmciEnv.dockerFiles.forEach(function(dockerfileArg){
dockerfileArg.build(); dockerfileArg.build();
@ -109,7 +105,7 @@ export class Dockerfile {
} }
} }
let dockerFileVersion = function(dockerfileNameArg:string):string{ export let dockerFileVersion = function(dockerfileNameArg:string):string{
let versionString:string; let versionString:string;
let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/; let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/;
let regexResultArray = versionRegex.exec(dockerfileNameArg); let regexResultArray = versionRegex.exec(dockerfileNameArg);
@ -121,8 +117,8 @@ let dockerFileVersion = function(dockerfileNameArg:string):string{
return versionString; return versionString;
} }
let dockerBaseImage = function(dockerfileContentArg:string){ export let dockerBaseImage = function(dockerfileContentArg:string){
let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n/ let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/
let regexResultArray = baseImageRegex.exec(dockerfileContentArg) let regexResultArray = baseImageRegex.exec(dockerfileContentArg)
return regexResultArray[1]; return regexResultArray[1];
} }