UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

103 lines 4.78 kB
"use strict"; 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; const bash_1 = require("../../../bash"); const gitlab_1 = require("../../../utils/gitlab"); const getDatabaseDeleteScript = (context, deployConfig) => { if (!deployConfig.cloudSql || !deployConfig.cloudSql.deleteDatabaseOnStop) { throw new Error("not possible"); } const DB_NAME = context.environment.envVars["DB_NAME"]; if (!DB_NAME) { throw new Error("error: env vars did not specify DB_NAME"); } const [projectId, region, instanceId] = deployConfig.cloudSql.instanceConnectionName.split(":"); // 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 ${DB_NAME}..."`, `echo "👆 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 ${DB_NAME} --instance=${instanceId} --project ${projectId}`, { pauseInSeconds: 10, }), ]; }; exports.getDatabaseDeleteScript = getDatabaseDeleteScript; const getDatabaseCreateScript = (context, deployConfig) => { if (!deployConfig.cloudSql) { throw new Error("not possible"); } const DB_NAME = context.environment.envVars["DB_NAME"]; if (!DB_NAME) { throw new Error("error: env vars did not specify DB_NAME"); } const [projectId, region, instanceId] = deployConfig.cloudSql.instanceConnectionName.split(":"); // may fail if it already exists return (0, gitlab_1.allowFailureInScripts)([ `echo "ensuring Database..."`, `gcloud sql databases create ${DB_NAME} --instance=${instanceId} --project ${projectId}`, ]); }; exports.getDatabaseCreateScript = getDatabaseCreateScript; exports.DEFAULT_DB_VARIABLES_MODE = "legacy"; const getVariableOrValue = (key, variables, mode) => { return mode === "legacy" ? `$${key}` : variables[key]; }; const getDatabaseJdbcUrl = (variables, mode) => { const 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; const getRailsDatabaseConnectionString = (variables, mode) => { const parts = [ "postgresql://", getVariableOrValue("DB_USER", variables, mode), ":", getVariableOrValue("DB_PASSWORD", variables, mode), "@", encodeURIComponent(`/cloudsql/${variables.CLOUD_SQL_INSTANCE_CONNECTION_NAME}`), "/", getVariableOrValue("DB_NAME", variables, mode), "?", ]; return (0, bash_1.joinBashExpressions)(parts); }; exports.getRailsDatabaseConnectionString = getRailsDatabaseConnectionString; const getPrismaDatabaseConnectionString = (variables, mode) => { const 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; const getDatabaseConnectionString = (config, variables) => { var _a; const 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; //# sourceMappingURL=database.js.map