"use strict"; var plugins = require("./npmci.plugins"); var NpmciEnv = require("./npmci.env"); exports.build = function () { var done = plugins.q.defer(); plugins.gulp.src("./Dockerfile*") .pipe(readDockerfiles()) .pipe(plugins.gulpFunction(function () { sortDockerfiles() .then(buildDockerfiles) .then(done.resolve); }, "atEnd")); return done.promise; }; var readDockerfiles = function () { return plugins.through2.obj(function (file, enc, cb) { var myDockerfile = new Dockerfile({ filePath: file.path, read: true }); NpmciEnv.dockerFiles.push(myDockerfile); cb(null, file); }); }; var sortDockerfiles = function () { var done = plugins.q.defer(); NpmciEnv.dockerFiles.sort(function (a, b) { var cleanTags = []; NpmciEnv.dockerFiles.forEach(function (dockerfileArg) { cleanTags.push(dockerfileArg.cleanTag); }); var aIndex = cleanTags.indexOf(a.baseImage); var bIndex = cleanTags.indexOf(b.cleanTag); console.log(cleanTags); console.log(a.baseImage, aIndex); console.log(b.cleanTag, bIndex); if (aIndex < bIndex && bIndex != -1) { return 1; } else { return 0; } }); done.resolve(); return done.promise; }; var buildDockerfiles = function () { var done = plugins.q.defer(); NpmciEnv.dockerFiles.forEach(function (dockerfileArg) { dockerfileArg.build(); }); done.resolve(); return done.promise; }; var Dockerfile = (function () { function Dockerfile(options) { this.filePath = options.filePath; this.repo = NpmciEnv.repo.user + "/" + NpmciEnv.repo.repo; this.version = dockerFileVersion(plugins.path.parse(options.filePath).base); this.cleanTag = this.repo + ":" + this.version; if (options.filePath && options.read) { this.content = plugins.smartfile.local.toStringSync(plugins.path.resolve(options.filePath)); } ; this.baseImage = dockerBaseImage(this.content); } ; Dockerfile.prototype.build = function () { if (!this.buildTag) { var tag = exports.dockerTag(this.repo, this.version); plugins.shelljs.exec("docker build -t " + tag + " -f " + this.filePath + " ."); this.buildTag = tag; NpmciEnv.dockerFilesBuilt.push(this); } else { plugins.beautylog.error("This Dockerfile already has been built!"); } }; ; Dockerfile.prototype.push = function () { if (this.buildTag) { plugins.shelljs.exec("docker push " + this.buildTag); } else { plugins.beautylog.error("Dockerfile hasn't been built yet!"); } }; return Dockerfile; }()); exports.Dockerfile = Dockerfile; var dockerFileVersion = function (dockerfileNameArg) { var versionString; var versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/; var regexResultArray = versionRegex.exec(dockerfileNameArg); if (regexResultArray && regexResultArray.length == 2) { versionString = regexResultArray[1]; } else { versionString = "latest"; } return versionString; }; var dockerBaseImage = function (dockerfileContentArg) { var baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n/; var regexResultArray = baseImageRegex.exec(dockerfileContentArg); return regexResultArray[1]; }; exports.dockerTag = function (repoArg, versionArg) { var tagString; var registry = NpmciEnv.dockerRegistry; if (process.env.CI_BUILD_STAGE == "build" || process.env.CI_BUILD_STAGE == "test") { registry = "registry.gitlab.com"; } var repo = repoArg; var version = versionArg; if (process.env.CI_BUILD_STAGE == "build" || process.env.CI_BUILD_STAGE == "test") { version = version + "_test"; } tagString = registry + "/" + repo + ":" + version; return tagString; }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9ucG1jaS5wbHVnaW5zXCJcbmltcG9ydCAqIGFzIE5wbWNpRW52IGZyb20gXCIuL25wbWNpLmVudlwiO1xuXG5cbmV4cG9ydCBsZXQgYnVpbGQgPSBmdW5jdGlvbigpe1xuICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgcGx1Z2lucy5ndWxwLnNyYyhcIi4vRG9ja2VyZmlsZSpcIilcbiAgICAgICAgLnBpcGUocmVhZERvY2tlcmZpbGVzKCkpXG4gICAgICAgIC5waXBlKHBsdWdpbnMuZ3VscEZ1bmN0aW9uKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBzb3J0RG9ja2VyZmlsZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKGJ1aWxkRG9ja2VyZmlsZXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oZG9uZS5yZXNvbHZlKTtcbiAgICAgICAgfSxcImF0RW5kXCIpKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5sZXQgcmVhZERvY2tlcmZpbGVzID0gZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gcGx1Z2lucy50aHJvdWdoMi5vYmooZnVuY3Rpb24oZmlsZSxlbmMsY2Ipe1xuICAgICAgICBsZXQgbXlEb2NrZXJmaWxlID0gbmV3IERvY2tlcmZpbGUoe1xuICAgICAgICAgICAgZmlsZVBhdGg6ZmlsZS5wYXRoLFxuICAgICAgICAgICAgcmVhZDp0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBOcG1jaUVudi5kb2NrZXJGaWxlcy5wdXNoKFxuICAgICAgICAgICAgbXlEb2NrZXJmaWxlXG4gICAgICAgICk7XG4gICAgICAgIGNiKG51bGwsZmlsZSk7XG4gICAgfSk7XG59XG5cbmxldCBzb3J0RG9ja2VyZmlsZXMgPSBmdW5jdGlvbigpe1xuICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgTnBtY2lFbnYuZG9ja2VyRmlsZXMuc29ydChmdW5jdGlvbihhLGIpe1xuICAgICAgICBsZXQgY2xlYW5UYWdzID0gW107XG4gICAgICAgIE5wbWNpRW52LmRvY2tlckZpbGVzLmZvckVhY2goZnVuY3Rpb24oZG9ja2VyZmlsZUFyZyl7XG4gICAgICAgICAgICBjbGVhblRhZ3MucHVzaChkb2NrZXJmaWxlQXJnLmNsZWFuVGFnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBhSW5kZXggPSBjbGVhblRhZ3MuaW5kZXhPZihhLmJhc2VJbWFnZSk7IFxuICAgICAgICBsZXQgYkluZGV4ID0gY2xlYW5UYWdzLmluZGV4T2YoYi5jbGVhblRhZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNsZWFuVGFncyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGEuYmFzZUltYWdlLGFJbmRleCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGIuY2xlYW5UYWcsYkluZGV4KTtcbiAgICAgICAgaWYoYUluZGV4IDwgYkluZGV4ICYmIGJJbmRleCAhPSAtMSl7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkb25lLnJlc29sdmUoKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5sZXQgYnVpbGREb2NrZXJmaWxlcyA9IGZ1bmN0aW9uKCl7XG4gICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBOcG1jaUVudi5kb2NrZXJGaWxlcy5mb3JFYWNoKGZ1bmN0aW9uKGRvY2tlcmZpbGVBcmcpe1xuICAgICAgICBkb2NrZXJmaWxlQXJnLmJ1aWxkKCk7XG4gICAgfSlcbiAgICBkb25lLnJlc29sdmUoKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VyZmlsZSB7XG4gICAgZmlsZVBhdGg6c3RyaW5nO1xuICAgIHJlcG86c3RyaW5nO1xuICAgIHZlcnNpb246c3RyaW5nO1xuICAgIGNsZWFuVGFnOnN0cmluZztcbiAgICBidWlsZFRhZzpzdHJpbmc7XG4gICAgY29udGVudDpzdHJpbmc7XG4gICAgYmFzZUltYWdlOnN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOntmaWxlUGF0aD86c3RyaW5nLGZpbGVDb250ZW50cz86c3RyaW5nfEJ1ZmZlcixyZWFkPzpib29sZWFufSl7XG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoO1xuICAgICAgICB0aGlzLnJlcG8gPSBOcG1jaUVudi5yZXBvLnVzZXIgKyBcIi9cIiArIE5wbWNpRW52LnJlcG8ucmVwbztcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gZG9ja2VyRmlsZVZlcnNpb24ocGx1Z2lucy5wYXRoLnBhcnNlKG9wdGlvbnMuZmlsZVBhdGgpLmJhc2UpO1xuICAgICAgICB0aGlzLmNsZWFuVGFnID0gdGhpcy5yZXBvICsgXCI6XCIgKyB0aGlzLnZlcnNpb247XG4gICAgICAgIGlmKG9wdGlvbnMuZmlsZVBhdGggJiYgb3B0aW9ucy5yZWFkKXtcbiAgICAgICAgICAgIHRoaXMuY29udGVudCA9IHBsdWdpbnMuc21hcnRmaWxlLmxvY2FsLnRvU3RyaW5nU3luYyhwbHVnaW5zLnBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGVQYXRoKSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYmFzZUltYWdlID0gZG9ja2VyQmFzZUltYWdlKHRoaXMuY29udGVudCk7XG4gICAgfTtcbiAgICBidWlsZCgpe1xuICAgICAgICBpZighdGhpcy5idWlsZFRhZyl7XG4gICAgICAgICAgICBsZXQgdGFnID0gZG9ja2VyVGFnKHRoaXMucmVwbyx0aGlzLnZlcnNpb24pO1xuICAgICAgICAgICAgcGx1Z2lucy5zaGVsbGpzLmV4ZWMoXCJkb2NrZXIgYnVpbGQgLXQgXCIgKyB0YWcgKyBcIiAtZiBcIiArIHRoaXMuZmlsZVBhdGggKyBcIiAuXCIpO1xuICAgICAgICAgICAgdGhpcy5idWlsZFRhZyA9IHRhZztcbiAgICAgICAgICAgIE5wbWNpRW52LmRvY2tlckZpbGVzQnVpbHQucHVzaCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBsdWdpbnMuYmVhdXR5bG9nLmVycm9yKFwiVGhpcyBEb2NrZXJmaWxlIGFscmVhZHkgaGFzIGJlZW4gYnVpbHQhXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIH07XG4gICAgcHVzaCgpe1xuICAgICAgICBpZih0aGlzLmJ1aWxkVGFnKXtcbiAgICAgICAgICAgIHBsdWdpbnMuc2hlbGxqcy5leGVjKFwiZG9ja2VyIHB1c2ggXCIgKyB0aGlzLmJ1aWxkVGFnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBsdWdpbnMuYmVhdXR5bG9nLmVycm9yKFwiRG9ja2VyZmlsZSBoYXNuJ3QgYmVlbiBidWlsdCB5ZXQhXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5sZXQgZG9ja2VyRmlsZVZlcnNpb24gPSBmdW5jdGlvbihkb2NrZXJmaWxlTmFtZUFyZzpzdHJpbmcpOnN0cmluZ3tcbiAgICBsZXQgdmVyc2lvblN0cmluZzpzdHJpbmc7XG4gICAgbGV0IHZlcnNpb25SZWdleCA9IC9Eb2NrZXJmaWxlXyhbYS16QS1aMC05XFwuXSopJC87XG4gICAgbGV0IHJlZ2V4UmVzdWx0QXJyYXkgPSB2ZXJzaW9uUmVnZXguZXhlYyhkb2NrZXJmaWxlTmFtZUFyZyk7XG4gICAgaWYocmVnZXhSZXN1bHRBcnJheSAmJiByZWdleFJlc3VsdEFycmF5Lmxlbmd0aCA9PSAyKXtcbiAgICAgICAgdmVyc2lvblN0cmluZyA9IHJlZ2V4UmVzdWx0QXJyYXlbMV07ICAgICAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgICB2ZXJzaW9uU3RyaW5nID0gXCJsYXRlc3RcIjtcbiAgICB9XG4gICAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG59XG5cbmxldCBkb2NrZXJCYXNlSW1hZ2UgPSBmdW5jdGlvbihkb2NrZXJmaWxlQ29udGVudEFyZzpzdHJpbmcpe1xuICAgIGxldCBiYXNlSW1hZ2VSZWdleCA9IC9GUk9NXFxzKFthLXpBLXowLTlcXC9cXC1cXDpdKilcXG4vXG4gICAgbGV0IHJlZ2V4UmVzdWx0QXJyYXkgPSBiYXNlSW1hZ2VSZWdleC5leGVjKGRvY2tlcmZpbGVDb250ZW50QXJnKVxuICAgIHJldHVybiByZWdleFJlc3VsdEFycmF5WzFdO1xufVxuXG5leHBvcnQgbGV0IGRvY2tlclRhZyA9IGZ1bmN0aW9uKHJlcG9Bcmc6c3RyaW5nLHZlcnNpb25Bcmc6c3RyaW5nKTpzdHJpbmd7XG4gICAgbGV0IHRhZ1N0cmluZzpzdHJpbmc7XG4gICAgbGV0IHJlZ2lzdHJ5ID0gTnBtY2lFbnYuZG9ja2VyUmVnaXN0cnk7XG4gICAgaWYocHJvY2Vzcy5lbnYuQ0lfQlVJTERfU1RBR0UgPT0gXCJidWlsZFwiICB8fCBwcm9jZXNzLmVudi5DSV9CVUlMRF9TVEFHRSA9PSBcInRlc3RcIil7XG4gICAgICAgIHJlZ2lzdHJ5ID0gXCJyZWdpc3RyeS5naXRsYWIuY29tXCI7XG4gICAgfSBcbiAgICBsZXQgcmVwbyA9IHJlcG9Bcmc7XG4gICAgbGV0IHZlcnNpb24gPSB2ZXJzaW9uQXJnO1xuICAgIGlmKHByb2Nlc3MuZW52LkNJX0JVSUxEX1NUQUdFID09IFwiYnVpbGRcIiB8fCBwcm9jZXNzLmVudi5DSV9CVUlMRF9TVEFHRSA9PSBcInRlc3RcIil7XG4gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uICsgXCJfdGVzdFwiO1xuICAgIH1cbiAgICB0YWdTdHJpbmcgPSByZWdpc3RyeSArIFwiL1wiICsgcmVwbyArIFwiOlwiICsgdmVyc2lvbjtcbiAgICByZXR1cm4gdGFnU3RyaW5nO1xufTtcbiJdfQ==