@catladder/pipeline
Version:
Panter workflow for cloud CI/CD and DevOps
125 lines (124 loc) • 5.98 kB
JavaScript
;
var __read = this && this.__read || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o),
r,
ar = [],
e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
} catch (error) {
e = {
error: error
};
} finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
} finally {
if (e) throw e.error;
}
}
return ar;
};
var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDeleteUnusedImagesCommands = exports.getArtifactsRegistryImage = exports.getArtifactsRegistryBuildCacheImage = exports.getArtifactsRegistryImageName = exports.getArtifactsRegistryDockerUrl = exports.getArtifactsRegistryHost = void 0;
var BashExpression_1 = require("../../bash/BashExpression");
var gitlab_1 = require("../../utils/gitlab");
var types_1 = require("../types");
var removeFirstLinesFromCommandOutput_1 = require("./utils/removeFirstLinesFromCommandOutput");
var getArtifactsRegistryHost = function (context) {
var _a;
if (!(0, types_1.isOfDeployType)((_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config, "google-cloudrun")) {
// should not happen
throw new Error("deploy config is wrong");
}
return "".concat(context.deploy.config.region, "-docker.pkg.dev");
};
exports.getArtifactsRegistryHost = getArtifactsRegistryHost;
var getArtifactsRegistryDockerUrl = function (context) {
var _a;
var deployConfig = (_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config;
if (!(0, types_1.isOfDeployType)(deployConfig, "google-cloudrun")) {
// should not happen
throw new Error("deploy config is wrong");
}
var fullAppName = "".concat(context.fullConfig.customerName, "-").concat(context.fullConfig.appName);
return "".concat((0, exports.getArtifactsRegistryHost)(context), "/").concat(deployConfig.projectId, "/catladder-deploy/").concat(fullAppName);
};
exports.getArtifactsRegistryDockerUrl = getArtifactsRegistryDockerUrl;
/**
*
* lecacyReviewImageName is only temporary. In old versions the images had no reviewslug in review apps, which makes cleanup harder. We delete all those images now, but need the path
*/
var getArtifactsRegistryImageName = function (context, lecacyReviewImageName) {
if (lecacyReviewImageName === void 0) {
lecacyReviewImageName = false;
}
if (lecacyReviewImageName && context.environment.envType !== "review") {
throw new Error("lecacyReviewImageName is only allowed for review app");
}
var dockerUrl = (0, exports.getArtifactsRegistryDockerUrl)(context);
var gcloudImagePath = __spreadArray([dockerUrl, context.env, context.name], __read(context.environment.reviewSlug && !lecacyReviewImageName ? [context.environment.reviewSlug] : []), false);
return (0, BashExpression_1.joinBashExpressions)(gcloudImagePath, "/");
};
exports.getArtifactsRegistryImageName = getArtifactsRegistryImageName;
var getArtifactsRegistryBuildCacheImage = function (context) {
var dockerUrl = (0, exports.getArtifactsRegistryDockerUrl)(context);
// does not include env, so that after merge, you might get more cache hits (review-->dev)
var gcloudImagePath = [dockerUrl, "caches", context.name];
return gcloudImagePath.join("/");
};
exports.getArtifactsRegistryBuildCacheImage = getArtifactsRegistryBuildCacheImage;
var getArtifactsRegistryImage = function (context) {
return "".concat((0, exports.getArtifactsRegistryImageName)(context), ":$DOCKER_IMAGE_TAG");
};
exports.getArtifactsRegistryImage = getArtifactsRegistryImage;
var getDeleteImageCommands = function (fullImageName, keepNewest) {
if (keepNewest === void 0) {
keepNewest = 0;
}
if (keepNewest === 0) {
// no need to list tags, we delete the whole thing
return ["gcloud artifacts docker images delete ".concat(fullImageName, " --quiet --delete-tags")];
}
// delete unused tags
var listAllImagesCommand = "gcloud artifacts docker images list ".concat(fullImageName, " --sort-by=~CREATE_TIME --format=\"value(version)\"");
var listImagesToDeletecommand = (0, removeFirstLinesFromCommandOutput_1.removeFirstLinesFromCommandOutput)(listAllImagesCommand, keepNewest);
var deleteImageCommand = "gcloud artifacts docker images delete ".concat(fullImageName, "@$version --quiet --delete-tags");
var deleteImagesCommand = "".concat(listImagesToDeletecommand, " | while read -r version; do ").concat(deleteImageCommand, "; done");
return [deleteImagesCommand];
};
/**
* commands to delete unused images.
*
* @param context
* @param keep how many of the newest images to keep
* @returns
*/
var getDeleteUnusedImagesCommands = function (context, keep) {
var _a;
if (keep === void 0) {
keep = 0;
}
var deployConfig = (_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config;
if (!(0, types_1.isOfDeployType)(deployConfig, "google-cloudrun")) {
// should not happen
throw new Error("deploy config is wrong");
}
var fullImageName = (0, exports.getArtifactsRegistryImageName)(context);
var buildCacheImageName = (0, exports.getArtifactsRegistryBuildCacheImage)(context);
return __spreadArray(__spreadArray(__spreadArray([], __read(getDeleteImageCommands(fullImageName, keep)), false), __read(getDeleteImageCommands(buildCacheImageName, 1)), false), __read(context.environment.envType === "review" ? (0, gitlab_1.allowFailureInScripts)(getDeleteImageCommands((0, exports.getArtifactsRegistryImageName)(context, true), 0)) : []), false);
};
exports.getDeleteUnusedImagesCommands = getDeleteUnusedImagesCommands;