UNPKG

@catladder/pipeline

Version:

Panter workflow for cloud CI/CD and DevOps

125 lines (124 loc) 5.98 kB
"use strict"; 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;