@catladder/pipeline
Version:
Panter workflow for cloud CI/CD and DevOps
98 lines (97 loc) • 5.02 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;
};
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;