diff --git a/app-backend/built/models/ICaptainDefinition.js b/app-backend/built/models/ICaptainDefinition.js new file mode 100644 index 0000000..42723c9 --- /dev/null +++ b/app-backend/built/models/ICaptainDefinition.js @@ -0,0 +1 @@ +//# sourceMappingURL=ICaptainDefinition.js.map \ No newline at end of file diff --git a/app-backend/built/models/ICaptainDefinition.js.map b/app-backend/built/models/ICaptainDefinition.js.map new file mode 100644 index 0000000..a319862 --- /dev/null +++ b/app-backend/built/models/ICaptainDefinition.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ICaptainDefinition.js","sourceRoot":"","sources":["../../src/models/ICaptainDefinition.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/app-backend/built/user/ImageMaker.js b/app-backend/built/user/ImageMaker.js index 2eff846..6d46556 100644 --- a/app-backend/built/user/ImageMaker.js +++ b/app-backend/built/user/ImageMaker.js @@ -67,9 +67,6 @@ class ImageMaker { * Creates image if necessary, or just simply passes the image name */ ensureImage(source, appName, appVersion) { - if (source.sourceImageName) { - return Promise.resolve(source.sourceImageName); - } const self = this; this.activeBuilds[appName] = true; this.buildLogs[appName] = @@ -81,7 +78,7 @@ class ImageMaker { const baseDir = self.getDirectoryForRawSource(appName, appVersion); const rawDir = baseDir + '/' + RAW_SOURCE_DIRECTORY; const tarFilePath = baseDir + '/' + TAR_FILE_NAME_READY_FOR_DOCKER; - const baseImageNameWithoutVersionAndReg = self.datastore.getImageNameBase(appName); // img-captain--myapp + const baseImageNameWithoutVerAndReg = self.datastore.getImageNameBase(appName); // img-captain--myapp let fullImageName = ''; // repo.domain.com:998/username/reponame:8 return Promise.resolve() // .then(function () { @@ -93,20 +90,14 @@ class ImageMaker { return self.correctDirectoryAndEnsureCaptainDefinition(rawDir); }) .then(function (correctedDir) { - return self.convertCaptainDefinitionToDockerfile(correctedDir); - }) - .then(function (correctedDir) { - return self.convertContentOfDirectoryIntoTar(correctedDir, tarFilePath); - }) - .then(function () { - return self.dockerApi - .buildImageFromDockerFile(baseImageNameWithoutVersionAndReg, appVersion, tarFilePath, self.buildLogs[appName]) - .catch(function (error) { - throw ApiStatusCodes.createError(ApiStatusCodes.BUILD_ERROR, ('' + error).trim()); + return self + .getCaptainDefinition(correctedDir) + .then(function (captainDefinition) { + if (captainDefinition.imageName) { + return captainDefinition.imageName + ''; + } + return self.getBuildPushAndReturnImageName(captainDefinition, correctedDir, tarFilePath, baseImageNameWithoutVerAndReg, appName, appVersion); }); - }) - .then(function () { - return self.dockerRegistryHelper.retagAndPushIfDefaultPushExist(baseImageNameWithoutVersionAndReg, appVersion, self.buildLogs[appName]); }) .then(function (ret) { fullImageName = ret; @@ -153,6 +144,27 @@ class ImageMaker { }); }); } + getBuildPushAndReturnImageName(captainDefinition, correctedDirProvided, tarFilePath, baseImageNameWithoutVersionAndReg, appName, appVersion) { + const self = this; + return Promise.resolve() // + .then(function () { + return self + .convertCaptainDefinitionToDockerfile(captainDefinition, correctedDirProvided) + .then(function () { + return self.convertContentOfDirectoryIntoTar(correctedDirProvided, tarFilePath); + }) + .then(function () { + return self.dockerApi + .buildImageFromDockerFile(baseImageNameWithoutVersionAndReg, appVersion, tarFilePath, self.buildLogs[appName]) + .catch(function (error) { + throw ApiStatusCodes.createError(ApiStatusCodes.BUILD_ERROR, ('' + error).trim()); + }); + }) + .then(function () { + return self.dockerRegistryHelper.retagAndPushIfDefaultPushExist(baseImageNameWithoutVersionAndReg, appVersion, self.buildLogs[appName]); + }); + }); + } /** * Returns a promise that resolve to path a directory where source files + captain definition * @@ -218,7 +230,7 @@ class ImageMaker { }); }); } - convertCaptainDefinitionToDockerfile(directoryWithCaptainDefinition) { + getCaptainDefinition(directoryWithCaptainDefinition) { return Promise.resolve() // .then(function () { return fs.readJson(directoryWithCaptainDefinition + @@ -232,27 +244,41 @@ class ImageMaker { if (!data.schemaVersion) { throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Captain Definition version is empty!'); } - if (data.schemaVersion === 1) { - const templateIdTag = data.templateId; - const dockerfileLines = data.dockerfileLines; - const hasDockerfileLines = dockerfileLines && dockerfileLines.length > 0; - if (hasDockerfileLines && !templateIdTag) { - return dockerfileLines.join('\n'); - } - else if (!hasDockerfileLines && templateIdTag) { - return TemplateHelper.get().getDockerfileContentFromTemplateTag(templateIdTag); - } - else { - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Dockerfile or TemplateId must be present. Both should not be present at the same time'); - } + if (data.schemaVersion !== 2) { + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Captain Definition version is not supported! Read migration guides to schemaVersion 2'); + } + const hasTemplateIdTag = !!data.templateId; + const hasImageName = !!data.imageName; + const hasDockerfileLines = data.dockerfileLines && data.dockerfileLines.length > 0; + let numberOfProperties = (hasTemplateIdTag ? 1 : 0) + + (hasImageName ? 1 : 0) + + (hasDockerfileLines ? 1 : 0); + if (numberOfProperties !== 1) { + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'One, and only one, of these properties should be present in captain-definition: templateId, imageName, or, hasDockerfileLines'); + } + return data; + }); + } + convertCaptainDefinitionToDockerfile(captainDefinition, directoryWithCaptainDefinition) { + const self = this; + return Promise.resolve() // + .then(function () { + let data = captainDefinition; + if (data.templateId) { + return TemplateHelper.get().getDockerfileContentFromTemplateTag(data.templateId); + } + else if (data.dockerfileLines) { + return data.dockerfileLines.join('\n'); + } + else if (data.imageName) { + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'ImageName cannot lead to a dockerfile'); + } + else { + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Dockerfile or TemplateId must be present. Both should not be present at the same time'); } - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Captain Definition version is not supported!'); }) .then(function (dockerfileContent) { return fs.outputFile(directoryWithCaptainDefinition + '/' + DOCKER_FILE, dockerfileContent); - }) - .then(function () { - return directoryWithCaptainDefinition; }); } correctDirectoryAndEnsureCaptainDefinition(originalDirectory) { diff --git a/app-backend/built/user/ImageMaker.js.map b/app-backend/built/user/ImageMaker.js.map index fab8839..8c94e9b 100644 --- a/app-backend/built/user/ImageMaker.js.map +++ b/app-backend/built/user/ImageMaker.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageMaker.js","sourceRoot":"","sources":["../../src/user/ImageMaker.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ImageMaker.js","sourceRoot":"","sources":["../../src/user/ImageMaker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app-backend/src/models/ICaptainDefinition.ts b/app-backend/src/models/ICaptainDefinition.ts new file mode 100644 index 0000000..5de8547 --- /dev/null +++ b/app-backend/src/models/ICaptainDefinition.ts @@ -0,0 +1,6 @@ +interface ICaptainDefinition { + schemaVersion: number + dockerfileLines?: string[] + imageName?: string + templateId?: string +} diff --git a/app-backend/src/models/IImageSource.ts b/app-backend/src/models/IImageSource.ts index c124464..cb77e72 100644 --- a/app-backend/src/models/IImageSource.ts +++ b/app-backend/src/models/IImageSource.ts @@ -1,5 +1,4 @@ interface IImageSource { - sourceImageName?: string uploadedTarPath?: string repoInfo?: RepoInfo captainDefinitionContent?: string diff --git a/app-backend/src/user/ImageMaker.ts b/app-backend/src/user/ImageMaker.ts index 3586b33..9bf1665 100644 --- a/app-backend/src/user/ImageMaker.ts +++ b/app-backend/src/user/ImageMaker.ts @@ -78,10 +78,6 @@ class ImageMaker { * Creates image if necessary, or just simply passes the image name */ ensureImage(source: IImageSource, appName: string, appVersion: number) { - if (source.sourceImageName) { - return Promise.resolve(source.sourceImageName) - } - const self = this this.activeBuilds[appName] = true @@ -97,7 +93,7 @@ class ImageMaker { const rawDir = baseDir + '/' + RAW_SOURCE_DIRECTORY const tarFilePath = baseDir + '/' + TAR_FILE_NAME_READY_FOR_DOCKER - const baseImageNameWithoutVersionAndReg = self.datastore.getImageNameBase( + const baseImageNameWithoutVerAndReg = self.datastore.getImageNameBase( appName ) // img-captain--myapp let fullImageName = '' // repo.domain.com:998/username/reponame:8 @@ -112,36 +108,23 @@ class ImageMaker { return self.correctDirectoryAndEnsureCaptainDefinition(rawDir) }) .then(function(correctedDir) { - return self.convertCaptainDefinitionToDockerfile(correctedDir) - }) - .then(function(correctedDir) { - return self.convertContentOfDirectoryIntoTar( - correctedDir, - tarFilePath - ) - }) - .then(function() { - return self.dockerApi - .buildImageFromDockerFile( - baseImageNameWithoutVersionAndReg, - appVersion, - tarFilePath, - self.buildLogs[appName] - ) - .catch(function(error: AnyError) { - throw ApiStatusCodes.createError( - ApiStatusCodes.BUILD_ERROR, - ('' + error).trim() + return self + .getCaptainDefinition(correctedDir) + .then(function(captainDefinition) { + if (captainDefinition.imageName) { + return captainDefinition.imageName + '' + } + + return self.getBuildPushAndReturnImageName( + captainDefinition, + correctedDir, + tarFilePath, + baseImageNameWithoutVerAndReg, + appName, + appVersion ) }) }) - .then(function() { - return self.dockerRegistryHelper.retagAndPushIfDefaultPushExist( - baseImageNameWithoutVersionAndReg, - appVersion, - self.buildLogs[appName] - ) - }) .then(function(ret) { fullImageName = ret }) @@ -188,6 +171,53 @@ class ImageMaker { }) } + private getBuildPushAndReturnImageName( + captainDefinition: ICaptainDefinition, + correctedDirProvided: string, + tarFilePath: string, + baseImageNameWithoutVersionAndReg: string, + appName: string, + appVersion: number + ) { + const self = this + return Promise.resolve() // + .then(function() { + return self + .convertCaptainDefinitionToDockerfile( + captainDefinition, + correctedDirProvided + ) + .then(function() { + return self.convertContentOfDirectoryIntoTar( + correctedDirProvided, + tarFilePath + ) + }) + .then(function() { + return self.dockerApi + .buildImageFromDockerFile( + baseImageNameWithoutVersionAndReg, + appVersion, + tarFilePath, + self.buildLogs[appName] + ) + .catch(function(error: AnyError) { + throw ApiStatusCodes.createError( + ApiStatusCodes.BUILD_ERROR, + ('' + error).trim() + ) + }) + }) + .then(function() { + return self.dockerRegistryHelper.retagAndPushIfDefaultPushExist( + baseImageNameWithoutVersionAndReg, + appVersion, + self.buildLogs[appName] + ) + }) + }) + } + /** * Returns a promise that resolve to path a directory where source files + captain definition * @@ -270,9 +300,7 @@ class ImageMaker { }) } - private convertCaptainDefinitionToDockerfile( - directoryWithCaptainDefinition: string - ) { + private getCaptainDefinition(directoryWithCaptainDefinition: string) { return Promise.resolve() // .then(function() { return fs.readJson( @@ -281,7 +309,7 @@ class ImageMaker { CAPTAIN_DEFINITION_FILE ) }) - .then(function(data) { + .then(function(data: ICaptainDefinition) { if (!data) { throw ApiStatusCodes.createError( ApiStatusCodes.STATUS_ERROR_GENERIC, @@ -296,30 +324,59 @@ class ImageMaker { ) } - if (data.schemaVersion === 1) { - const templateIdTag = data.templateId - const dockerfileLines: string[] = data.dockerfileLines - const hasDockerfileLines = - dockerfileLines && dockerfileLines.length > 0 - - if (hasDockerfileLines && !templateIdTag) { - return dockerfileLines.join('\n') - } else if (!hasDockerfileLines && templateIdTag) { - return TemplateHelper.get().getDockerfileContentFromTemplateTag( - templateIdTag - ) - } else { - throw ApiStatusCodes.createError( - ApiStatusCodes.STATUS_ERROR_GENERIC, - 'Dockerfile or TemplateId must be present. Both should not be present at the same time' - ) - } + if (data.schemaVersion !== 2) { + throw ApiStatusCodes.createError( + ApiStatusCodes.STATUS_ERROR_GENERIC, + 'Captain Definition version is not supported! Read migration guides to schemaVersion 2' + ) } - throw ApiStatusCodes.createError( - ApiStatusCodes.STATUS_ERROR_GENERIC, - 'Captain Definition version is not supported!' - ) + const hasTemplateIdTag = !!data.templateId + const hasImageName = !!data.imageName + const hasDockerfileLines = + data.dockerfileLines && data.dockerfileLines.length > 0 + + let numberOfProperties = + (hasTemplateIdTag ? 1 : 0) + + (hasImageName ? 1 : 0) + + (hasDockerfileLines ? 1 : 0) + + if (numberOfProperties !== 1) { + throw ApiStatusCodes.createError( + ApiStatusCodes.STATUS_ERROR_GENERIC, + 'One, and only one, of these properties should be present in captain-definition: templateId, imageName, or, hasDockerfileLines' + ) + } + + return data + }) + } + + private convertCaptainDefinitionToDockerfile( + captainDefinition: ICaptainDefinition, + directoryWithCaptainDefinition: string + ) { + const self = this + return Promise.resolve() // + .then(function() { + let data = captainDefinition + if (data.templateId) { + return TemplateHelper.get().getDockerfileContentFromTemplateTag( + data.templateId + ) + } else if (data.dockerfileLines) { + return data.dockerfileLines.join('\n') + } else if (data.imageName) { + throw ApiStatusCodes.createError( + ApiStatusCodes.STATUS_ERROR_GENERIC, + 'ImageName cannot lead to a dockerfile' + ) + } else { + throw ApiStatusCodes.createError( + ApiStatusCodes.STATUS_ERROR_GENERIC, + 'Dockerfile or TemplateId must be present. Both should not be present at the same time' + ) + } }) .then(function(dockerfileContent) { return fs.outputFile( @@ -327,9 +384,6 @@ class ImageMaker { dockerfileContent ) }) - .then(function() { - return directoryWithCaptainDefinition - }) } private correctDirectoryAndEnsureCaptainDefinition(