UNPKG

@sap/cds-dk

Version:

Command line client and development toolkit for the SAP Cloud Application Programming Model

115 lines (96 loc) 4.43 kB
const { join } = require('path') const cds = require('../../../cds') const { read, write, exists, copy, rimraf } = cds.utils const { readProject } = require('../../projectReader') const { merge } = require('../../merge') const mvn = require('../../mvn') const { srv4, hdbDeployer, serviceManager, hdiContainer, mtxSidecar4 } = require('../../registries/mta') module.exports = class HanaTemplate extends require('../../plugin') { static help() { return 'database support for SAP HANA' } static hasInProduction(env) { return env.requires?.db?.kind === 'hana' || readProject().dependencies?.['@cap-js/hana'] } async run() { const project = readProject() const { isJava, configFile, db } = project project.shortcut = typeof (await read(configFile)).cds?.requires?.db !== 'object' // REVISIT: Let cds build generate those by default await merge(__dirname, 'files/src/.hdiconfig').into(join(db.folder, 'src/.hdiconfig')) await merge(__dirname, 'files/undeploy.json').into(join(db.folder, 'undeploy.json')) if (isJava) { await copy(join(__dirname, 'files', 'db')).to(db.folder) await mvn.add('hana') } await merge(__dirname, 'files/package.json.hbs').into(configFile, { with: project, forceOverwrite: true }) // REVISIT: forceOverwrite: true as default? const packageJson = exists('package.json') ? await read('package.json') : null if (packageJson?.dependencies) { delete packageJson.dependencies['@sap/hana-client'] await write('package.json', packageJson, { spaces: 2 }) } } async combine() { const project = readProject() const { hasMta, hasHelm, hasHelmUnifiedRuntime, hasHtml5Repo, hasContainerize, isJava, hasMultitenancy, srvPath } = project if (hasMta) { const srv = srv4(srvPath) const db = hasMultitenancy ? serviceManager : hdiContainer const deletions = hasMultitenancy ? [{ item: hdbDeployer, relationships: [{ removeProperty: 'name', allWithin: ['modules', 'requires', 'name'], }] }, { item: hdiContainer, relationships: [{ removeProperty: 'name', allWithin: ['modules', 'requires', 'name'], }] }] : [] const relationships = [{ insert: [db, 'name'], into: [srv, 'requires', 'name'] }] if (hasMultitenancy) { relationships.push({ insert: [serviceManager, 'name'], into: [mtxSidecar4(isJava ? 'mtx/sidecar' : 'gen/mtx/sidecar'), 'requires', 'name'] }) } else { relationships.push({ insert: [hdiContainer, 'name'], into: [hdbDeployer, 'requires', 'name'] }) } const modules = hasMultitenancy ? [srv] : [srv, hdbDeployer] await merge(__dirname, 'files/mta.yaml.hbs').into('mta.yaml', { with: project, additions: [...modules, db].filter(a => a), deletions, relationships }) } if (hasHelm || hasHelmUnifiedRuntime) { if (hasMultitenancy) { await merge('chart/values.yaml') .remove(['hana-deployer', 'srv.bindings.db', 'hana']) await merge('chart/Chart.yaml') .remove([ { dependencies: { alias: 'hana' } }, { dependencies: { alias: 'hana-deployer' } } ]) if (!hasHtml5Repo) { await rimraf('chart/charts/content-deployment') // REVISIT: Move to build task } } else { await merge(__dirname, 'files', 'values.yaml.hbs').into('chart/values.yaml', { with: project }) } } if (hasContainerize && !hasMultitenancy) { const additions = [{ in: 'modules', where: { name: `${project.appName}-hana-deployer` } }] await merge(__dirname, '/files/containerize.yaml.hbs').into('containerize.yaml', { with: project, additions }) } } }