script base deployer

This commit is contained in:
Jan Prochazka
2024-11-11 15:37:54 +01:00
parent 1b8a2cb923
commit 9d8ec9cc6b
9 changed files with 290 additions and 24 deletions

View File

@@ -1,5 +1,9 @@
const generateDeploySql = require('./generateDeploySql');
const executeQuery = require('./executeQuery');
const { ScriptDrivedDeployer } = require('dbgate-datalib');
const connectUtility = require('../utility/connectUtility');
const requireEngineDriver = require('../utility/requireEngineDriver');
const loadModelFolder = require('../utility/loadModelFolder');
async function deployDb({
connection,
@@ -13,9 +17,15 @@ async function deployDb({
ignoreNameRegex = '',
targetSchema = null,
}) {
const dbhan = systemConnection || (await connectUtility(driver, connection, 'read'));
if (!driver) driver = requireEngineDriver(connection);
const scriptDeployer = new ScriptDrivedDeployer(dbhan, driver, loadedDbModel ?? (await loadModelFolder(modelFolder)));
await scriptDeployer.runPre();
const { sql } = await generateDeploySql({
connection,
systemConnection,
systemConnection: dbhan,
driver,
analysedStructure,
modelFolder,
@@ -26,7 +36,9 @@ async function deployDb({
targetSchema,
});
// console.log('RUNNING DEPLOY SCRIPT:', sql);
await executeQuery({ connection, systemConnection, driver, sql, logScriptItems: true });
await executeQuery({ connection, systemConnection: dbhan, driver, sql, logScriptItems: true });
await scriptDeployer.runPost();
}
module.exports = deployDb;

View File

@@ -9,6 +9,7 @@ const {
skipNamesInStructureByRegex,
replaceSchemaInStructure,
filterStructureBySchema,
skipDbGateInternalObjects,
} = require('dbgate-tools');
const importDbModel = require('../utility/importDbModel');
const requireEngineDriver = require('../utility/requireEngineDriver');
@@ -38,6 +39,7 @@ async function generateDeploySql({
if (ignoreNameRegex) {
analysedStructure = skipNamesInStructureByRegex(analysedStructure, new RegExp(ignoreNameRegex, 'i'));
}
analysedStructure = skipDbGateInternalObjects(analysedStructure);
let deployedModelSource = loadedDbModel
? databaseInfoFromYamlModel(loadedDbModel)

View File

@@ -35,6 +35,7 @@ const sqlTextReplacementTransform = require('./sqlTextReplacementTransform');
const autoIndexForeignKeysTransform = require('./autoIndexForeignKeysTransform');
const generateDeploySql = require('./generateDeploySql');
const dropAllDbObjects = require('./dropAllDbObjects');
const scriptDrivedDeploy = require('./scriptDrivedDeploy');
const dbgateApi = {
queryReader,
@@ -73,6 +74,7 @@ const dbgateApi = {
autoIndexForeignKeysTransform,
generateDeploySql,
dropAllDbObjects,
scriptDrivedDeploy,
};
requirePlugin.initializeDbgateApi(dbgateApi);

View File

@@ -1,28 +1,8 @@
const fs = require('fs-extra');
const path = require('path');
const yaml = require('js-yaml');
const { databaseInfoFromYamlModel, DatabaseAnalyser } = require('dbgate-tools');
const { startsWith } = require('lodash');
const { archivedir, resolveArchiveFolder } = require('./directories');
const loadFilesRecursive = require('./loadFilesRecursive');
const loadModelFolder = require('./loadModelFolder');
async function importDbModel(inputDir) {
const files = [];
const dir = inputDir.startsWith('archive:') ? resolveArchiveFolder(inputDir.substring('archive:'.length)) : inputDir;
for (const name of await loadFilesRecursive(dir)) {
if (name.endsWith('.table.yaml') || name.endsWith('.sql')) {
const text = await fs.readFile(path.join(dir, name), { encoding: 'utf-8' });
files.push({
name: path.parse(name).base,
text,
json: name.endsWith('.yaml') ? yaml.load(text) : null,
});
}
}
const files = await loadModelFolder(inputDir);
return databaseInfoFromYamlModel(files);
}

View File

@@ -0,0 +1,27 @@
const fs = require('fs-extra');
const path = require('path');
const yaml = require('js-yaml');
const { resolveArchiveFolder } = require('./directories');
const loadFilesRecursive = require('./loadFilesRecursive');
async function loadModelFolder(inputDir) {
const files = [];
const dir = inputDir.startsWith('archive:') ? resolveArchiveFolder(inputDir.substring('archive:'.length)) : inputDir;
for (const name of await loadFilesRecursive(dir)) {
if (name.endsWith('.table.yaml') || name.endsWith('.sql')) {
const text = await fs.readFile(path.join(dir, name), { encoding: 'utf-8' });
files.push({
name: path.parse(name).base,
text,
json: name.endsWith('.yaml') ? yaml.load(text) : null,
});
}
}
return files;
}
module.exports = loadModelFolder;