update commnts

This commit is contained in:
2016-09-04 16:05:47 +02:00
parent f0e62c06e8
commit c4aa3a8926
12 changed files with 160 additions and 27 deletions

View File

@ -3,6 +3,9 @@ import * as paths from "./npmci.paths";
import * as NpmciEnv from "./npmci.env";
import {bashBare} from "./npmci.bash";
/**
* builds a cwd of Dockerfiles by triggering a promisechain
*/
export let build = function(){
let done = plugins.q.defer();
readDockerfiles()
@ -16,8 +19,12 @@ export let build = function(){
return done.promise;
}
export let readDockerfiles = function(){
let done = plugins.q.defer();
/**
* creates instance of class Dockerfile for all Dockerfiles in cwd
* @returns Promise<Dockerfile[]>
*/
export let readDockerfiles = function():plugins.q.Promise<Dockerfile[]>{
let done = plugins.q.defer<Dockerfile[]>();
let readDockerfilesArray:Dockerfile[] = []
plugins.gulp.src("./Dockerfile*")
.pipe(plugins.through2.obj(function(file,enc,cb){
@ -33,8 +40,13 @@ export let readDockerfiles = function(){
return done.promise;
}
export let sortDockerfiles = function(sortableArrayArg:Dockerfile[]){
let done = plugins.q.defer();
/**
* sorts Dockerfiles into a dependency chain
* @param sortableArrayArg an array of instances of class Dockerfile
* @returns Promise<Dockerfile[]>
*/
export let sortDockerfiles = function(sortableArrayArg:Dockerfile[]):plugins.q.Promise<Dockerfile[]>{
let done = plugins.q.defer<Dockerfile[]>();
let sortedArray:Dockerfile[] = [];
let cleanTagsOriginal = cleanTagsArrayFunction(sortableArrayArg,sortedArray);
let sorterFunctionCounter:number = 0;
@ -59,8 +71,11 @@ export let sortDockerfiles = function(sortableArrayArg:Dockerfile[]){
return done.promise;
};
export let mapDockerfiles = function(sortedArray:Dockerfile[]){
let done = plugins.q.defer();
/**
* maps local Dockerfiles dependencies to the correspoding Dockerfile class instances
*/
export let mapDockerfiles = function(sortedArray:Dockerfile[]):plugins.q.Promise<Dockerfile[]>{
let done = plugins.q.defer<Dockerfile[]>();
sortedArray.forEach((dockerfileArg) => {
if(dockerfileArg.localBaseImageDependent){
sortedArray.forEach((dockfile2:Dockerfile) => {
@ -74,6 +89,9 @@ export let mapDockerfiles = function(sortedArray:Dockerfile[]){
return done.promise;
}
/**
* builds the correspoding real docker image for each Dockerfile class instance
*/
export let buildDockerfiles = (sortedArrayArg:Dockerfile[]) => {
let done = plugins.q.defer();
sortedArrayArg.forEach(function(dockerfileArg){
@ -83,6 +101,9 @@ export let buildDockerfiles = (sortedArrayArg:Dockerfile[]) => {
return done.promise;
}
/**
* pushes the real Dockerfile images to a Docker registry
*/
export let pushDockerfiles = function(sortedArrayArg:Dockerfile[]){
let done = plugins.q.defer();
sortedArrayArg.forEach(function(dockerfileArg){
@ -92,6 +113,10 @@ export let pushDockerfiles = function(sortedArrayArg:Dockerfile[]){
return done.promise;
}
/**
* pulls corresponding real Docker images for instances of Dockerfile from a registry.
* This is needed if building, testing, and publishing of Docker images is carried out in seperate CI stages.
*/
export let pullDockerfileImages = (sortableArrayArg:Dockerfile[],registryArg = "registry.gitlab.com") => {
let done = plugins.q.defer();
sortableArrayArg.forEach((dockerfileArg) => {
@ -101,6 +126,10 @@ export let pullDockerfileImages = (sortableArrayArg:Dockerfile[],registryArg = "
return done.promise;
}
/**
* tests all Dockerfiles in by calling class Dockerfile.test();
* @param sortedArrayArg Dockerfile[] that contains all Dockerfiles in cwd
*/
export let testDockerfiles = (sortedArrayArg:Dockerfile[]) => {
let done = plugins.q.defer();
sortedArrayArg.forEach(function(dockerfileArg){
@ -110,6 +139,9 @@ export let testDockerfiles = (sortedArrayArg:Dockerfile[]) => {
return done.promise;
};
/**
* class Dockerfile represents a Dockerfile on disk in npmci
*/
export class Dockerfile {
filePath:string;
repo:string;
@ -138,6 +170,10 @@ export class Dockerfile {
this.baseImage = dockerBaseImage(this.content);
this.localBaseImageDependent = false;
};
/**
* builds the Dockerfile
*/
build(){
let done = plugins.q.defer();
plugins.beautylog.info("now building Dockerfile for " + this.cleanTag);
@ -146,6 +182,10 @@ export class Dockerfile {
done.resolve();
return done.promise;
};
/**
* pushes the Dockerfile to a registry
*/
push(stageArg){
let done = plugins.q.defer();
let pushTag;
@ -162,12 +202,20 @@ export class Dockerfile {
bashBare("docker push " + pushTag);
done.resolve();
return done.promise;
}
};
/**
* pulls the Dockerfile from a registry
*/
pull(registryArg:string){
let pullTag = this.testTag;
bashBare("docker pull " + pullTag);
bashBare("docker tag " + pullTag + " " + this.buildTag);
};
/**
* tests the Dockerfile;
*/
test(){
let testFile:string = plugins.path.join(paths.NpmciTestDir,"test_" + this.version + ".sh");
let testFileExists:boolean = plugins.smartfile.fs.fileExistsSync(testFile);
@ -182,12 +230,19 @@ export class Dockerfile {
plugins.beautylog.warn("skipping tests for " + this.cleanTag + " because no testfile was found!");
}
};
/**
* gets the id of a Dockerfile
*/
getId(){
let containerId = bashBare("docker inspect --type=image --format=\"{{.Id}}\" " + this.buildTag);
return containerId;
};
}
/**
*
*/
export let dockerFileVersion = function(dockerfileNameArg:string):string{
let versionString:string;
let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/;
@ -200,12 +255,18 @@ export let dockerFileVersion = function(dockerfileNameArg:string):string{
return versionString;
}
/**
*
*/
export let dockerBaseImage = function(dockerfileContentArg:string){
let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/
let regexResultArray = baseImageRegex.exec(dockerfileContentArg)
return regexResultArray[1];
}
/**
*
*/
export let dockerTag = function(registryArg:string,repoArg:string,versionArg:string,suffixArg?:string):string{
let tagString:string;
let registry = registryArg;
@ -218,6 +279,9 @@ export let dockerTag = function(registryArg:string,repoArg:string,versionArg:str
return tagString;
};
/**
*
*/
export let cleanTagsArrayFunction = function(dockerfileArrayArg:Dockerfile[],trackingArrayArg:Dockerfile[]):string[]{
let cleanTagsArray:string[] = [];
dockerfileArrayArg.forEach(function(dockerfileArg){

View File

@ -4,13 +4,22 @@ import {bash} from "./npmci.bash";
import * as env from "./npmci.env";
import * as buildDocker from "./npmci.build.docker"
export let build = function(commandArg){
/**
* defines possible build services
*/
export type TBuildService = "docker";
/**
* builds for a specific service
*/
export let build = function(commandArg):plugins.q.Promise<any> {
switch(commandArg){
case "docker":
return buildDocker.build();
default:
plugins.beautylog.log("build target " + commandArg + " not recognised!");
}
};
return;
}

View File

@ -4,6 +4,17 @@ import {bash} from "./npmci.bash";
import * as env from "./npmci.env"
import * as sshModule from "./npmci.ssh"
//types
/**
* defines possible prepare services
*/
export type TPrepService = "npm" | "docker" | "docker-gitlab" | "ssh";
/**
* authenticates npm with token from env var
*/
let npm = function(){
let done = plugins.q.defer();
@ -22,6 +33,9 @@ let npm = function(){
return done.promise;
};
/**
* logs in docker
*/
let docker = function(){
let done = plugins.q.defer();
env.setDockerRegistry("docker.io");
@ -39,6 +53,9 @@ let docker = function(){
return done.promise;
}
/**
* prepare docker for gitlab registry
*/
let dockerGitlab = function(){
let done = plugins.q.defer();
env.setDockerRegistry("registry.gitlab.com");
@ -47,14 +64,21 @@ let dockerGitlab = function(){
return done.promise;
}
/**
* prepare ssh
*/
let ssh = function(){
let done = plugins.q.defer();
sshModule.ssh()
.then(done.resolve);
return done.promise;
}
};
export let prepare = function(serviceArg:string){
/**
* the main exported prepare function
* @param servieArg describes the service to prepare
*/
export let prepare = function(serviceArg:TPrepService){
switch (serviceArg) {
case "npm":
return npm();

View File

@ -8,14 +8,14 @@ import * as NpmciBuildDocker from "./npmci.build.docker"
/**
* type of supported services
*/
export type registryService = "npm" | "docker";
export type TPubService = "npm" | "docker";
/**
* the main exported publish function.
* @param registryServiceArg the serviceArg
* @param pubServiceArg references targeted service to publish to
*/
export let publish = (registryServiceArg:registryService = "npm") => {
switch (registryServiceArg){
export let publish = (pubServiceArg:TPubService = "npm") => {
switch (pubServiceArg){
case "npm":
return publishNpm();
case "docker":
@ -24,7 +24,7 @@ export let publish = (registryServiceArg:registryService = "npm") => {
};
/**
* tries to publish project at cwd to npm
* tries to publish current cwd to NPM registry
*/
let publishNpm = function(){
let done = plugins.q.defer();