@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
78 lines (63 loc) • 2.28 kB
JavaScript
module.exports = Object.assign(up, {
options: ['--to'],
shortcuts: ['-2'],
flags: [],
help: `
# SYNOPSIS
*cds up*
Builds and deploys the application to Cloud Foundry or Kubernetes.
# OPTIONS
*-2* | *--to* cf|k8s
The platform to deploy to. Default is 'cf'.
# EXAMPLES
*cds up*
*cds up --to k8s*
`})
const { execSync } = require('node:child_process')
const cds = require('../lib/cds')
const { highlight } = require('../lib/util/term')
const { exists, path: { join } } = cds.utils
const { readProject } = require('../lib/init/projectReader')
const run = cmd => {
console.log(highlight(cmd))
try {
execSync(cmd, { stdio: 'inherit', env: { ...process.env, FORCE_COLOR: cds.utils.colors.enabled }})
} catch (error) {
throw error.message
}
}
async function up() {
const { apps, appName, hasMultitenancy, hasApprouter, hasXsuaa } = readProject()
for (const { app } of apps) {
const appPath = join(cds.root, cds.env.folders.app, app)
if (exists(join(appPath, 'package.json')) && !exists(join(appPath, 'package-lock.json'))) {
run(`npm i --package-lock-only --prefix ${appPath}`)
}
}
if (hasMultitenancy && !exists('mtx/sidecar/package-lock.json')) {
run('npm i --package-lock-only --prefix mtx/sidecar')
}
if (cds.cli.options.to === 'k8s') {
if (!exists('chart')) run('cds add helm')
if (!exists('containerize.yaml')) run('cds add containerize')
} else {
if (!exists('mta.yaml')) {
run('cds add mta')
run('npm i --package-lock-only')
} else if (!exists('package-lock.json')) {
run('npm i --package-lock-only')
}
}
if (cds.cli.options.to === 'k8s') {
run('ctz containerize.yaml --log --push')
let helmUpgrade = `helm upgrade --install ${appName} ./gen/chart --wait --wait-for-jobs`
if (hasXsuaa) helmUpgrade += ' --set-file xsuaa.jsonParameters=xs-security.json'
run(helmUpgrade)
run(`kubectl rollout status deployment ${appName}-srv --timeout=8m`)
if (hasApprouter) run(`kubectl rollout status deployment ${appName}-approuter --timeout=8m`)
if (hasMultitenancy) run(`kubectl rollout status deployment ${appName}-sidecar --timeout=8m`)
} else {
run('mbt build -t gen --mtar mta.tar')
run('cf deploy gen/mta.tar -f')
}
}