UNPKG

@catladder/pipeline

Version:

Panter workflow for cloud CI/CD and DevOps

98 lines (97 loc) 5.02 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDatabaseConnectionString = exports.getPrismaDatabaseConnectionString = exports.getRailsDatabaseConnectionString = exports.getDatabaseJdbcUrl = exports.DEFAULT_DB_VARIABLES_MODE = exports.getDatabaseCreateScript = exports.getDatabaseDeleteScript = void 0; var bash_1 = require("../../../bash"); var gitlab_1 = require("../../../utils/gitlab"); var getDatabaseDeleteScript = function (context, deployConfig) { if (!deployConfig.cloudSql || !deployConfig.cloudSql.deleteDatabaseOnStop) { throw new Error("not possible"); } var DB_NAME = context.environment.envVars["DB_NAME"]; if (!DB_NAME) { throw new Error("error: env vars did not specify DB_NAME"); } var _a = __read(deployConfig.cloudSql.instanceConnectionName.split(":"), 3), projectId = _a[0], region = _a[1], instanceId = _a[2]; // unfortunatly the database cannot be deleted right after the service has stopped, as it might still have connections // we have to repeate this process return ["echo \"deleting database ".concat(DB_NAME, "...\""), "echo \"\uD83D\uDC46 this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down\"", (0, gitlab_1.repeatOnFailure)("gcloud sql databases delete ".concat(DB_NAME, " --instance=").concat(instanceId, " --project ").concat(projectId), { pauseInSeconds: 10 })]; }; exports.getDatabaseDeleteScript = getDatabaseDeleteScript; var getDatabaseCreateScript = function (context, deployConfig) { if (!deployConfig.cloudSql) { throw new Error("not possible"); } var DB_NAME = context.environment.envVars["DB_NAME"]; if (!DB_NAME) { throw new Error("error: env vars did not specify DB_NAME"); } var _a = __read(deployConfig.cloudSql.instanceConnectionName.split(":"), 3), projectId = _a[0], region = _a[1], instanceId = _a[2]; // may fail if it already exists return (0, gitlab_1.allowFailureInScripts)(["echo \"ensuring Database...\"", "gcloud sql databases create ".concat(DB_NAME, " --instance=").concat(instanceId, " --project ").concat(projectId)]); }; exports.getDatabaseCreateScript = getDatabaseCreateScript; exports.DEFAULT_DB_VARIABLES_MODE = "legacy"; var getVariableOrValue = function (key, variables, mode) { return mode === "legacy" ? "$".concat(key) : variables[key]; }; var getDatabaseJdbcUrl = function (variables, mode) { var parts = ["jdbc:postgresql:///", getVariableOrValue("DB_NAME", variables, mode), "?cloudSqlInstance=", getVariableOrValue("CLOUD_SQL_INSTANCE_CONNECTION_NAME", variables, mode), "&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=", getVariableOrValue("DB_USER", variables, mode), "&password=", getVariableOrValue("DB_PASSWORD", variables, mode)]; return (0, bash_1.joinBashExpressions)(parts); }; exports.getDatabaseJdbcUrl = getDatabaseJdbcUrl; var getRailsDatabaseConnectionString = function (variables, mode) { var parts = ["postgresql://", getVariableOrValue("DB_USER", variables, mode), ":", getVariableOrValue("DB_PASSWORD", variables, mode), "@", encodeURIComponent("/cloudsql/".concat(variables.CLOUD_SQL_INSTANCE_CONNECTION_NAME)), "/", getVariableOrValue("DB_NAME", variables, mode), "?"]; return (0, bash_1.joinBashExpressions)(parts); }; exports.getRailsDatabaseConnectionString = getRailsDatabaseConnectionString; var getPrismaDatabaseConnectionString = function (variables, mode) { var parts = ["postgresql://", getVariableOrValue("DB_USER", variables, mode), ":", getVariableOrValue("DB_PASSWORD", variables, mode), "@localhost/", getVariableOrValue("DB_NAME", variables, mode), "?host=/cloudsql/", getVariableOrValue("CLOUD_SQL_INSTANCE_CONNECTION_NAME", variables, mode)]; return (0, bash_1.joinBashExpressions)(parts); }; exports.getPrismaDatabaseConnectionString = getPrismaDatabaseConnectionString; var getDatabaseConnectionString = function (config, variables) { var _a; var mode = (_a = config.dbConnectionStringVariablesMode) !== null && _a !== void 0 ? _a : exports.DEFAULT_DB_VARIABLES_MODE; switch (config.dbConnectionStringFormat) { case "jdbc": return (0, exports.getDatabaseJdbcUrl)(variables, mode); case "rails": return (0, exports.getRailsDatabaseConnectionString)(variables, mode); default: // prisma return (0, exports.getPrismaDatabaseConnectionString)(variables, mode); } }; exports.getDatabaseConnectionString = getDatabaseConnectionString;