@sap/cds-dk 7.9.4 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2116 -0
- package/bin/add.js +18 -52
- package/bin/bind.js +2 -2
- package/bin/build.js +29 -4
- package/bin/cds.js +23 -11
- package/bin/compile/index.js +7 -6
- package/bin/completion/index.js +70 -46
- package/bin/completion/scripts/cds-bash.sh +4 -1
- package/bin/completion/scripts/cds-fish.fish +13 -0
- package/bin/completion/scripts/cds-ps.ps1 +2 -1
- package/bin/completion/scripts/cds-zsh.sh +2 -1
- package/bin/deploy/index.js +6 -5
- package/bin/deploy/to-sqlite.js +2 -2
- package/bin/extend.js +19 -50
- package/bin/help.js +2 -2
- package/bin/init.js +10 -77
- package/bin/login.js +13 -5
- package/bin/migrate.js +1 -1
- package/bin/pull.js +11 -0
- package/bin/repl.js +3 -0
- package/bin/test.js +5 -0
- package/bin/version.js +7 -7
- package/bin/watch.js +2 -11
- package/lib/bind/KubernetesApiAccessor.js +10 -9
- package/lib/build/buildTaskEngine.js +11 -7
- package/lib/build/buildTaskFactory.js +15 -43
- package/lib/build/buildTaskProviderFactory.js +16 -44
- package/lib/build/constants.js +3 -3
- package/lib/build/index.js +2 -2
- package/lib/build/{buildPlugin.js → plugin.js} +65 -46
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/Chart.yaml +1 -1
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/values.yaml +1 -1
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/service-instance/Chart.yaml +1 -1
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/service-instance/templates/_helpers.tpl +7 -0
- package/lib/build/plugins/helm/files/subcharts/service-instance/templates/servicebinding.yaml +32 -0
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/service-instance/templates/serviceinstance.yaml +3 -0
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/service-instance/values.schema.json +63 -0
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/service-instance/values.yaml +23 -1
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/Chart.yaml +1 -1
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/deployment.yaml +2 -0
- package/lib/build/plugins/helm/files/subcharts/web-application/templates/hpa.yaml +22 -0
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/pod-disruption-budget.yaml +1 -0
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/values.schema.json +49 -0
- package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/values.yaml +8 -2
- package/lib/{init/template/helm/files/chart → build/plugins/helm/files}/templates/_deployment_helpers.tpl +5 -0
- package/lib/build/plugins/helm/files/templates/_helpers.tpl +13 -0
- package/lib/build/plugins/helm/index.js +81 -0
- package/lib/build/plugins.js +12 -15
- package/lib/build/provider/featureToggleBuildPlugin.js +7 -39
- package/lib/build/provider/hana/2migration.js +168 -124
- package/lib/build/provider/hana/index.js +20 -25
- package/lib/build/provider/hana/template/.hdiconfig-all +3 -0
- package/lib/build/provider/hana/template/.hdiconfig-cloud +3 -0
- package/lib/build/provider/hana/template/package.json +4 -3
- package/lib/build/provider/internalBuildPlugin.js +32 -97
- package/lib/build/provider/internalBuildTaskProvider.js +10 -46
- package/lib/build/provider/java/index.js +2 -3
- package/lib/build/provider/mtx/index.js +5 -4
- package/lib/build/provider/mtx-extension/index.js +5 -2
- package/lib/build/provider/mtx-sidecar/index.js +2 -2
- package/lib/build/util.js +83 -12
- package/lib/compile/to-mermaid.js +108 -0
- package/lib/compile/to_asyncapi.js +7 -0
- package/lib/compile/to_openapi.js +7 -0
- package/lib/deploy/to-hana/hana.js +37 -34
- package/lib/deploy/to-hana/hdiDeployUtil.js +8 -6
- package/lib/env/schemas/cds-rc.js +1 -1
- package/lib/import/common.js +2 -2
- package/lib/import/odata/metadataconverter/MetadataConverter.js +4 -4
- package/lib/import/odata/v2parser.js +83 -197
- package/lib/import/odata/v4parser.js +1 -38
- package/lib/import/openapi/importOpenAPI.js +164 -42
- package/lib/index.js +10 -12
- package/lib/init/bas.js +91 -0
- package/lib/init/constants.js +16 -10
- package/lib/init/index.js +74 -150
- package/lib/init/merge.js +12 -20
- package/lib/init/mvn.js +103 -150
- package/lib/init/plugin.js +11 -7
- package/lib/init/projectReader.js +53 -19
- package/lib/init/registries/mta.js +51 -6
- package/lib/init/template/application-logging/files/package.json.hbs +7 -0
- package/lib/init/template/application-logging/index.js +13 -1
- package/lib/init/template/approuter/files/containerize.yaml.hbs +10 -0
- package/lib/init/template/approuter/files/mta.yaml.hbs +1 -2
- package/lib/init/template/approuter/files/values.yaml.hbs +19 -4
- package/lib/init/template/approuter/files/xs-app.json.hbs +12 -3
- package/lib/init/template/approuter/index.js +29 -25
- package/lib/init/template/attachments/files/mta.yaml.hbs +14 -0
- package/lib/init/template/attachments/files/package.json.hbs +5 -0
- package/lib/init/template/attachments/files/values.yaml +7 -0
- package/lib/init/template/attachments/index.js +53 -0
- package/lib/init/template/audit-logging/files/mta.yaml.hbs +14 -0
- package/lib/init/template/audit-logging/files/package.json.hbs +7 -0
- package/lib/init/template/audit-logging/index.js +66 -0
- package/lib/init/template/cf-manifest/index.js +4 -0
- package/lib/init/template/completion/completionSetup.js +54 -33
- package/lib/init/template/completion/index.js +7 -1
- package/lib/init/template/connectivity/index.js +4 -4
- package/lib/init/template/containerize/files/containerize.yaml.hbs +26 -0
- package/lib/init/template/containerize/index.js +24 -0
- package/lib/init/template/data/index.js +4 -0
- package/lib/init/template/destination/files/mta.yaml.hbs +25 -1
- package/lib/init/template/destination/index.js +12 -2
- package/lib/init/template/enterprise-messaging/index.js +6 -3
- package/lib/init/template/enterprise-messaging-shared/index.js +5 -1
- package/lib/init/template/extensibility/files/package.json.hbs +1 -1
- package/lib/init/template/extensibility/files/xs-security.json.hbs +2 -8
- package/lib/init/template/extensibility/index.js +3 -1
- package/lib/init/template/file-based-messaging/index.js +4 -0
- package/lib/init/template/h2/index.js +4 -0
- package/lib/init/template/hana/files/containerize.yaml.hbs +10 -0
- package/lib/init/template/hana/files/db/package.json +3 -2
- package/lib/init/template/hana/files/package.json.hbs +4 -7
- package/lib/init/template/hana/files/src/.hdiconfig +3 -0
- package/lib/init/template/hana/files/values.yaml.hbs +1 -2
- package/lib/init/template/hana/index.js +15 -7
- package/lib/init/template/helm/files/Chart.yaml.hbs +2 -3
- package/lib/init/template/helm/files/values.schema.json +2173 -0
- package/lib/init/template/helm/files/values.yaml.hbs +11 -6
- package/lib/init/template/helm/index.js +77 -18
- package/lib/init/template/helm-unified-runtime/index.js +19 -56
- package/lib/init/template/html5-repo/files/app-package.json.hbs +11 -7
- package/lib/init/template/html5-repo/files/manifest.json +13 -0
- package/lib/init/template/html5-repo/files/mta.yaml.hbs +41 -8
- package/lib/init/template/html5-repo/files/ui5-deploy.yaml.hbs +21 -0
- package/lib/init/template/html5-repo/files/ui5.yaml.hbs +2 -29
- package/lib/init/template/html5-repo/files/values.yaml.hbs +6 -2
- package/lib/init/template/html5-repo/files/xs-app.json.hbs +21 -8
- package/lib/init/template/html5-repo/index.js +33 -30
- package/lib/init/template/http/index.js +36 -12
- package/lib/init/template/java/index.js +18 -12
- package/lib/init/template/kafka/index.js +4 -0
- package/lib/init/template/lint/index.js +7 -2
- package/lib/init/template/liquibase/index.js +4 -0
- package/lib/init/template/local-messaging/index.js +4 -0
- package/lib/init/template/malware-scanner/files/mta.yaml.hbs +14 -0
- package/lib/init/template/malware-scanner/files/package.json.hbs +17 -0
- package/lib/init/template/malware-scanner/files/values.yaml +7 -0
- package/lib/init/template/malware-scanner/index.js +47 -0
- package/lib/init/template/mta/files/mta.yaml.hbs +3 -3
- package/lib/init/template/mta/files/package.json +1 -1
- package/lib/init/template/mta/index.js +4 -0
- package/lib/init/template/mtx/index.js +4 -0
- package/lib/init/template/multitenancy/files/containerize.yaml.hbs +10 -0
- package/lib/init/template/multitenancy/files/mta.yaml.hbs +0 -1
- package/lib/init/template/multitenancy/files/package.json.hbs +1 -1
- package/lib/init/template/multitenancy/files/package.sidecar.json.hbs +6 -5
- package/lib/init/template/multitenancy/files/values.yaml.hbs +14 -24
- package/lib/init/template/multitenancy/index.js +50 -28
- package/lib/init/template/nodejs/files/eslint.config.mjs +2 -0
- package/lib/init/template/nodejs/files/package.json.hbs +2 -3
- package/lib/init/template/nodejs/index.js +4 -0
- package/lib/init/template/notifications/files/mta.yaml.hbs +2 -2
- package/lib/init/template/notifications/index.js +4 -0
- package/lib/init/template/pipeline/files/.pipeline/config.yml +1 -1
- package/lib/init/template/pipeline/files/Jenkinsfile +1 -1
- package/lib/init/template/pipeline/index.js +4 -0
- package/lib/init/template/portal/files/mta.yaml.hbs +52 -0
- package/lib/init/template/portal/files/package.json.hbs +11 -0
- package/lib/init/template/portal/files/package.sidecar.json +7 -0
- package/lib/init/template/portal/files/portal-site/CommonDataModel.json.hbs +97 -0
- package/lib/init/template/portal/files/portal-site/i18n/catalog.properties +1 -0
- package/lib/init/template/portal/files/portal-site/i18n/catalog_de.properties +1 -0
- package/lib/init/template/portal/files/portal-site/i18n/group.properties +1 -0
- package/lib/init/template/portal/files/portal-site/i18n/group_de.properties +1 -0
- package/lib/init/template/portal/index.js +84 -0
- package/lib/init/template/postgres/index.js +5 -1
- package/lib/init/template/redis-messaging/index.js +4 -0
- package/lib/init/template/sample/files/app/admin-books/webapp/i18n/i18n_de.properties +3 -0
- package/lib/init/template/sample/files/app/admin-books/webapp/i18n/i18n_en.properties +3 -0
- package/lib/init/template/sample/files/app/admin-books/webapp/manifest.json +13 -1
- package/lib/init/template/sample/files/app/browse/webapp/i18n/i18n.properties +2 -2
- package/lib/init/template/sample/files/app/browse/webapp/i18n/i18n_de.properties +3 -0
- package/lib/init/template/sample/files/app/browse/webapp/i18n/i18n_en.properties +4 -0
- package/lib/init/template/sample/files/app/browse/webapp/manifest.json +3 -3
- package/lib/init/template/sample/files/app/index.html +1 -1
- package/lib/init/template/sample/files/db/data/sap.capire.bookshop-Authors.csv +5 -5
- package/lib/init/template/sample/files/db/data/sap.capire.bookshop-Books.csv +6 -6
- package/lib/init/template/sample/files/db/data/sap.capire.bookshop-Books_texts.csv +5 -5
- package/lib/init/template/sample/files/db/data/sap.capire.bookshop-Genres.csv +16 -16
- package/lib/init/template/sample/files/nodejs/cat-service.js +2 -2
- package/lib/init/template/sample/files/package.json.hbs +3 -0
- package/lib/init/template/sample/index.js +16 -9
- package/lib/init/template/sqlite/index.js +4 -0
- package/lib/init/template/tiny-sample/files/nodejs/db/data/my.bookshop-Books.csv +3 -3
- package/lib/init/template/tiny-sample/files/nodejs/srv/cat-service.cds.hbs +1 -1
- package/lib/init/template/tiny-sample/index.js +4 -0
- package/lib/init/template/toggles/files/package.json.hbs +1 -1
- package/lib/init/template/toggles/index.js +4 -0
- package/lib/init/template/typer/index.js +4 -0
- package/lib/init/template/typescript/files/package.json +12 -0
- package/lib/init/template/typescript/files/tsconfig.json +13 -0
- package/lib/init/template/typescript/index.js +39 -0
- package/lib/init/template/workzone/index.js +5 -0
- package/lib/init/template/workzone-standard/files/manifest.json.hbs +6 -0
- package/lib/init/template/workzone-standard/index.js +30 -0
- package/lib/init/template/xsuaa/files/package.json.hbs +1 -1
- package/lib/init/template/xsuaa/files/values.yaml.hbs +3 -2
- package/lib/init/template/xsuaa/index.js +11 -7
- package/lib/init/validate.js +27 -0
- package/lib/lint/generators.js +1 -1
- package/lib/lint/io.js +25 -7
- package/lib/mtx/auth_manager.js +64 -30
- package/lib/mtx/download_legacy.js +2 -2
- package/lib/mtx/index.js +0 -4
- package/lib/mtx/params.js +32 -38
- package/lib/mtx/pull.js +151 -43
- package/lib/mtx/push.js +3 -3
- package/lib/mtx/settings_manager.js +75 -35
- package/lib/mtx/tenant_action.js +1 -1
- package/lib/mtx/util/cf.js +1 -1
- package/lib/mtx/util/fs.js +26 -1
- package/lib/mtx/util/logging.js +7 -3
- package/lib/util/command.js +0 -2
- package/lib/util/fs.js +2 -3
- package/lib/util/question.js +28 -0
- package/lib/util/term.js +5 -3
- package/npm-shrinkwrap.json +231 -1089
- package/package.json +13 -8
- package/bin/activate.js +0 -77
- package/lib/compile/asyncapi/channels.js +0 -22
- package/lib/compile/asyncapi/components/messageTraits/index.js +0 -89
- package/lib/compile/asyncapi/components/messages/index.js +0 -173
- package/lib/compile/asyncapi/components/schemas/annotations.js +0 -33
- package/lib/compile/asyncapi/components/schemas/array.js +0 -8
- package/lib/compile/asyncapi/components/schemas/cache.js +0 -14
- package/lib/compile/asyncapi/components/schemas/definition.js +0 -187
- package/lib/compile/asyncapi/components/schemas/enum.js +0 -16
- package/lib/compile/asyncapi/components/schemas/examples.js +0 -10
- package/lib/compile/asyncapi/components/schemas/index.js +0 -14
- package/lib/compile/asyncapi/components/schemas/localized.js +0 -29
- package/lib/compile/asyncapi/components/schemas/primitiveElement.js +0 -41
- package/lib/compile/asyncapi/components/schemas/ref.js +0 -45
- package/lib/compile/asyncapi/components/schemas/utils.js +0 -108
- package/lib/compile/asyncapi/index.js +0 -247
- package/lib/compile/asyncapi/message.js +0 -13
- package/lib/compile/asyncapi/utils.js +0 -27
- package/lib/compile/openapi/csdl2openapi.js +0 -2448
- package/lib/compile/openapi/index.js +0 -68
- package/lib/init/template/helm/files/chart/templates/NOTES.txt +0 -14
- package/lib/init/template/helm/files/chart/templates/_helpers.tpl +0 -28
- package/lib/init/template/helm/files/chart/values.root.schema.json +0 -61
- package/lib/init/template/helm/files/chart/values.schema.json +0 -366
- package/lib/init/template/helm-unified-runtime/files/Chart.yaml.hbs +0 -10
- package/lib/init/template/helm-unified-runtime/files/templates/_deployment_helpers.tpl +0 -90
- package/lib/init/template/helm-unified-runtime/files/templates/_helpers.tpl +0 -28
- package/lib/init/template/helm-unified-runtime/files/values.root.schema.json +0 -61
- package/lib/init/template/helm-unified-runtime/files/values.schema.json +0 -366
- package/lib/init/template/helm-unified-runtime/files/values.yaml.hbs +0 -26
- package/lib/init/template/helm-unified-runtime/package.json +0 -4
- package/lib/init/template/multitenancy/files/mtxs-configmap-java-approuter.yaml +0 -20
- package/lib/init/template/multitenancy/files/mtxs-configmap-java.yaml +0 -18
- package/lib/init/template/multitenancy/files/mtxs-configmap-nodejs-approuter.yaml +0 -12
- package/lib/init/template/multitenancy/files/mtxs-configmap-nodejs.yaml +0 -12
- package/lib/init/template/multitenancy/files/saas-registry-secret.yaml +0 -9
- package/lib/init/template/nodejs/files/eslint.config.js +0 -13
- package/lib/init/template/notebook/index.js +0 -11
- package/lib/init/template/samples/index.js +0 -9
- package/lib/mtx/activate.js +0 -238
- package/lib/mtx/extend.js +0 -173
- package/lib/util/exec.d.ts +0 -54
- package/lib/util/exec.js +0 -211
- /package/lib/{init/template/approuter/files → build/plugins/helm/files/plugins/approuter}/approuter-configmap.yaml +0 -0
- /package/lib/{init/template/connectivity/files → build/plugins/helm/files/plugins/connectivity}/connectivity-proxy-info.yaml +0 -0
- /package/lib/{init/template/html5-repo/files → build/plugins/helm/files/plugins/html5-repo}/html5-apps-deployer-configmap.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/templates/_helpers.tpl +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/templates/job.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/templates/secret.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/templates/service-account.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/templates/service-binding.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/content-deployment/values.schema.json +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/NOTES.txt +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/_api.tpl +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/_helpers.tpl +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/api-rule.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/network-policy.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/rbac.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/secret.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/service-account.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/service-binding.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/service.yaml +0 -0
- /package/lib/{init/template/helm/files → build/plugins/helm/files/subcharts}/web-application/templates/virtual-service.yaml +0 -0
- /package/lib/{init/template/helm-unified-runtime → build/plugins/helm}/files/templates/NOTES.txt +0 -0
- /package/lib/init/template/{nodejs/files → java}/.cdsrc.json +0 -0
- /package/lib/init/template/tiny-sample/files/nodejs/db/{data-model.cds → schema.cds} +0 -0
|
@@ -288,6 +288,11 @@
|
|
|
288
288
|
"maxUnavailable": {
|
|
289
289
|
"type": "string",
|
|
290
290
|
"default": "10%"
|
|
291
|
+
},
|
|
292
|
+
"unhealthyPodEvictionPolicy": {
|
|
293
|
+
"type": "string",
|
|
294
|
+
"default": "AlwaysAllow",
|
|
295
|
+
"enum": ["AlwaysAllow", "IfHealthyBudget"]
|
|
291
296
|
}
|
|
292
297
|
}
|
|
293
298
|
},
|
|
@@ -567,6 +572,9 @@
|
|
|
567
572
|
],
|
|
568
573
|
"additionalProperties": false,
|
|
569
574
|
"type": "object"
|
|
575
|
+
},
|
|
576
|
+
"prefix": {
|
|
577
|
+
"type": "string"
|
|
570
578
|
}
|
|
571
579
|
},
|
|
572
580
|
"required": [
|
|
@@ -587,6 +595,9 @@
|
|
|
587
595
|
],
|
|
588
596
|
"additionalProperties": false,
|
|
589
597
|
"type": "object"
|
|
598
|
+
},
|
|
599
|
+
"prefix": {
|
|
600
|
+
"type": "string"
|
|
590
601
|
}
|
|
591
602
|
},
|
|
592
603
|
"required": [
|
|
@@ -957,6 +968,9 @@
|
|
|
957
968
|
],
|
|
958
969
|
"additionalProperties": false,
|
|
959
970
|
"type": "object"
|
|
971
|
+
},
|
|
972
|
+
"prefix": {
|
|
973
|
+
"type": "string"
|
|
960
974
|
}
|
|
961
975
|
},
|
|
962
976
|
"required": [
|
|
@@ -977,6 +991,9 @@
|
|
|
977
991
|
],
|
|
978
992
|
"additionalProperties": false,
|
|
979
993
|
"type": "object"
|
|
994
|
+
},
|
|
995
|
+
"prefix": {
|
|
996
|
+
"type": "string"
|
|
980
997
|
}
|
|
981
998
|
},
|
|
982
999
|
"required": [
|
|
@@ -1260,6 +1277,38 @@
|
|
|
1260
1277
|
}
|
|
1261
1278
|
}
|
|
1262
1279
|
}
|
|
1280
|
+
},
|
|
1281
|
+
"hpa": {
|
|
1282
|
+
"$id": "#/properties/hpa",
|
|
1283
|
+
"title": "Enable autoscaling",
|
|
1284
|
+
"type": "object",
|
|
1285
|
+
"additionalProperties": false,
|
|
1286
|
+
"properties": {
|
|
1287
|
+
"enabled": {
|
|
1288
|
+
"type": "boolean",
|
|
1289
|
+
"title": "Add Horizontal App Autoscaler resource.",
|
|
1290
|
+
"default": false
|
|
1291
|
+
},
|
|
1292
|
+
"minReplicas": {
|
|
1293
|
+
"type": "number",
|
|
1294
|
+
"title": "Lower limit for the number of replicas to which the autoscaler can scale up.",
|
|
1295
|
+
"default": 1
|
|
1296
|
+
},
|
|
1297
|
+
"maxReplicas": {
|
|
1298
|
+
"type": "number",
|
|
1299
|
+
"title": "Upper limit for the number of replicas to which the autoscaler can scale up.",
|
|
1300
|
+
"default": 3
|
|
1301
|
+
},
|
|
1302
|
+
"behavior": {
|
|
1303
|
+
"type": "object"
|
|
1304
|
+
},
|
|
1305
|
+
"metrics": {
|
|
1306
|
+
"type": "array",
|
|
1307
|
+
"items": {
|
|
1308
|
+
"type": "object"
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1263
1312
|
}
|
|
1264
1313
|
},
|
|
1265
1314
|
"definitions": {
|
|
@@ -15,7 +15,7 @@ global:
|
|
|
15
15
|
_internal:
|
|
16
16
|
web-application:
|
|
17
17
|
versions:
|
|
18
|
-
1.
|
|
18
|
+
1.16.0: true
|
|
19
19
|
## Will be used instead of the `.Chart.Name`, e.g. when generating the Deployment name.
|
|
20
20
|
# nameOverride: name
|
|
21
21
|
|
|
@@ -76,9 +76,11 @@ additionalVolumes: []
|
|
|
76
76
|
|
|
77
77
|
# Availability related configuration
|
|
78
78
|
availability:
|
|
79
|
-
# The max disruption to the pods, see https://kubernetes.io/docs/
|
|
79
|
+
# The max disruption to the pods, see https://kubernetes.io/docs/tasks/run-application/configure-pdb/ for details
|
|
80
80
|
podDisruptionBudget:
|
|
81
81
|
maxUnavailable: 10%
|
|
82
|
+
# See https://kubernetes.io/blog/2023/01/06/unhealthy-pod-eviction-policy-for-pdbs/
|
|
83
|
+
unhealthyPodEvictionPolicy: AlwaysAllow
|
|
82
84
|
# How pods ought to spread across topology domains., see https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/ for details
|
|
83
85
|
topologySpreadConstraints:
|
|
84
86
|
- topologyKey: topology.kubernetes.io/zone
|
|
@@ -291,3 +293,7 @@ annotations:
|
|
|
291
293
|
# envFrom:
|
|
292
294
|
# - configMapRef:
|
|
293
295
|
# name: my-configmap1
|
|
296
|
+
hpa:
|
|
297
|
+
enabled: false
|
|
298
|
+
minReplicas: 1
|
|
299
|
+
maxReplicas: 3
|
|
@@ -73,6 +73,11 @@ Backend Destinations
|
|
|
73
73
|
{{- $urlKey = "URL" -}}
|
|
74
74
|
{{- end -}}
|
|
75
75
|
{{- range $destinationName, $destination := $root.Values.backendDestinations -}}
|
|
76
|
+
{{- if $destination.external }}
|
|
77
|
+
{{- $_ := unset $destination "external" -}}
|
|
78
|
+
{{- $destinations = (append $destinations $destination) -}}
|
|
79
|
+
{{- continue -}}
|
|
80
|
+
{{- end -}}
|
|
76
81
|
{{- $destination := merge (dict "name" $destinationName) $destination -}}
|
|
77
82
|
{{- $deployment := (get $root.Values $destination.service) -}}
|
|
78
83
|
{{- $srv := merge (dict "name" $destination.service "destination" $destination "deployment" $deployment) $root -}}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{{/*
|
|
2
|
+
Labels for a component
|
|
3
|
+
*/}}
|
|
4
|
+
{{- define "cap.labels" -}}
|
|
5
|
+
helm.sh/revision: {{ .Release.Revision | quote }}
|
|
6
|
+
helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
7
|
+
app.kubernetes.io/name: {{ .name }}
|
|
8
|
+
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
9
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
10
|
+
{{- if .Chart.AppVersion }}
|
|
11
|
+
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
|
12
|
+
{{- end }}
|
|
13
|
+
{{- end -}}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const cds = require('../../../cds')
|
|
2
|
+
const { exists, path, readFileSync, yaml } = cds.utils
|
|
3
|
+
const { Plugin, BuildError } = require('../../../build')
|
|
4
|
+
const { join } = path
|
|
5
|
+
const { readProject } = require('../../../init/projectReader')
|
|
6
|
+
|
|
7
|
+
module.exports = class HelmBuildPlugin extends Plugin {
|
|
8
|
+
static taskDefaults = { src: "." }
|
|
9
|
+
|
|
10
|
+
static hasTask() {
|
|
11
|
+
if (exists('chart/Chart.yaml')) {
|
|
12
|
+
const chartFile = readFileSync(join(cds.root, 'chart', 'Chart.yaml'), 'utf8')
|
|
13
|
+
const chartYaml = yaml.parseDocument(chartFile).toJS()
|
|
14
|
+
return chartYaml.annotations?.["app.kubernetes.io/managed-by"] === 'cds-dk/helm'
|
|
15
|
+
}
|
|
16
|
+
return false
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
init() {
|
|
20
|
+
if (this.task.src !== cds.root) {
|
|
21
|
+
throw new BuildError("Invalid value for property 'src', it must have value '.'")
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// different from the default build output structure
|
|
25
|
+
this.task.dest = join(cds.root, cds.env.build.target !== '.' ? cds.env.build.target : 'gen', 'chart')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async build() {
|
|
29
|
+
if(!HelmBuildPlugin.hasTask()) {
|
|
30
|
+
this.pushMessage("Helm Chart not found. Execute `cds add helm` to add the helm chart.", Plugin.WARNING)
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const { hasApprouter, hasConnectivity, hasHtml5Repo } = readProject()
|
|
35
|
+
|
|
36
|
+
const chartFile = readFileSync(join(cds.root, 'chart', 'Chart.yaml'), 'utf8')
|
|
37
|
+
const chartYaml = yaml.parseDocument(chartFile).toJS()
|
|
38
|
+
const isInternal = chartYaml.dependencies?.find(dep => dep.name === 'web-application')?.repository !== undefined
|
|
39
|
+
|
|
40
|
+
if (!isInternal) {
|
|
41
|
+
// copy web appplication helm chart
|
|
42
|
+
await this.copy(join(__dirname, 'files', 'subcharts', 'web-application')).to('charts/web-application')
|
|
43
|
+
|
|
44
|
+
// copy service instance helm chart
|
|
45
|
+
if (this._hasSubchart('service-instance')) {
|
|
46
|
+
await this.copy(join(__dirname, 'files', 'subcharts', 'service-instance')).to('charts/service-instance')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// copy content deployment helm chart
|
|
50
|
+
if (this._hasSubchart('content-deployment')) {
|
|
51
|
+
await this.copy(join(__dirname, 'files', 'subcharts', 'content-deployment')).to('charts/content-deployment')
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// copy templates
|
|
56
|
+
await this.copy(join(__dirname, 'files', 'templates')).to('templates')
|
|
57
|
+
|
|
58
|
+
const pluginResourcePath = join(__dirname, 'files', 'plugins')
|
|
59
|
+
|
|
60
|
+
if (hasApprouter) {
|
|
61
|
+
await this.copy(join(pluginResourcePath, 'approuter/approuter-configmap.yaml')).to('templates/approuter-configmap.yaml')
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (hasConnectivity) {
|
|
65
|
+
await this.copy(join(pluginResourcePath, 'connectivity/connectivity-proxy-info.yaml')).to('templates/connectivity-proxy-info.yaml')
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
if (hasHtml5Repo) {
|
|
70
|
+
await this.copy(join(pluginResourcePath, 'html5-repo/html5-apps-deployer-configmap.yaml')).to('templates/html5-apps-deployer-configmap.yaml')
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// copy chart folder to gen/chart
|
|
74
|
+
await this.copy(join(cds.root, 'chart')).to(".")
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
_hasSubchart(subchart) {
|
|
78
|
+
const chart = exists('chart/Chart.yaml') ? readFileSync(join(cds.root, 'chart/Chart.yaml'), 'utf8') : ''
|
|
79
|
+
return chart.includes(subchart)
|
|
80
|
+
}
|
|
81
|
+
}
|
package/lib/build/plugins.js
CHANGED
|
@@ -1,35 +1,32 @@
|
|
|
1
1
|
const cds = require('../cds')
|
|
2
|
+
const Plugin = require('./plugin')
|
|
2
3
|
const DEBUG = cds.debug('cli|build')
|
|
3
4
|
|
|
4
5
|
module.exports = new (class Plugins {
|
|
5
6
|
constructor() {
|
|
6
7
|
this._plugins = new Map()
|
|
8
|
+
this._registerDefaults()
|
|
7
9
|
}
|
|
8
10
|
get plugins() {
|
|
9
11
|
return this._plugins
|
|
10
12
|
}
|
|
11
13
|
register(id, plugin) {
|
|
12
14
|
if (!id || !plugin) {
|
|
13
|
-
throw Error(
|
|
14
|
-
}
|
|
15
|
-
if (plugin.impl) {
|
|
16
|
-
// REVISIT: remove compat mode - latest cds-dk@8
|
|
17
|
-
const taskDefaults = plugin.taskDefaults
|
|
18
|
-
plugin = this._loadPlugin(id, plugin.impl)
|
|
19
|
-
plugin.taskDefaults = taskDefaults
|
|
15
|
+
throw new Error(`Invalid parameter passed, build plugin id: ${id}`)
|
|
20
16
|
}
|
|
21
17
|
if (this._plugins.has(id)) {
|
|
22
|
-
throw Error(`
|
|
18
|
+
throw new Error(`CDS build plugin ${id} already registered`)
|
|
19
|
+
}
|
|
20
|
+
if(!(plugin.prototype instanceof Plugin)) {
|
|
21
|
+
// with cds-dk version 7 the following registration format was supported:
|
|
22
|
+
// cds.build.register("cov2ap", { impl: "@cap-js-community/odata-v2-adapter/src/build.js", taskDefaults: { src: "srv" } })
|
|
23
|
+
throw `The cds build plugin '${id}' is not compatible with this @sap/cds-dk version. Update the npm package '${plugin.impl || id}' to the latest version.`
|
|
23
24
|
}
|
|
24
25
|
DEBUG?.(`Registering build plugin ${id}`)
|
|
25
26
|
this._plugins.set(id, plugin)
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return require(require.resolve(impl, { paths: [cds.root, __dirname] }))
|
|
31
|
-
} catch (e) {
|
|
32
|
-
throw new Error(`Custom build plugin implementation '${impl}' for '${id}' cannot be loaded:\n` + e)
|
|
33
|
-
}
|
|
28
|
+
|
|
29
|
+
_registerDefaults() {
|
|
30
|
+
this.register('helm', require('./plugins/helm'))
|
|
34
31
|
}
|
|
35
32
|
})
|
|
@@ -2,7 +2,7 @@ const path = require('path')
|
|
|
2
2
|
const cds = require('../../cds')
|
|
3
3
|
const { DEFAULT_CSN_FILE_NAME, OUTPUT_MODE, OUTPUT_MODE_RESULT } = require('../constants')
|
|
4
4
|
const InternalBuildPlugin = require('./internalBuildPlugin')
|
|
5
|
-
const { getI18nDefaultFolder } = require('../util')
|
|
5
|
+
const { getI18nDefaultFolder, filterFeaturePaths } = require('../util')
|
|
6
6
|
|
|
7
7
|
class FeatureToggleBuildPlugin extends InternalBuildPlugin {
|
|
8
8
|
init() {
|
|
@@ -16,12 +16,8 @@ class FeatureToggleBuildPlugin extends InternalBuildPlugin {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
get ftsName() {
|
|
20
|
-
return path.dirname(cds.env.features.folders || 'fts/*')
|
|
21
|
-
}
|
|
22
|
-
|
|
23
19
|
async compileAll(csn, destBase, destFts) {
|
|
24
|
-
const sources =
|
|
20
|
+
const sources = filterFeaturePaths(csn, this.task.options.model || this.task.src)
|
|
25
21
|
const dictionary = { base: null, features: null }
|
|
26
22
|
|
|
27
23
|
if (sources.features) {
|
|
@@ -47,6 +43,7 @@ class FeatureToggleBuildPlugin extends InternalBuildPlugin {
|
|
|
47
43
|
|
|
48
44
|
async collectAllLanguageBundles(dictionary, paths, destBase, destFts) {
|
|
49
45
|
const i18nFolder = getI18nDefaultFolder()
|
|
46
|
+
const ftsName = path.dirname(cds.env.features.folders || 'fts/*')
|
|
50
47
|
// create language bundle for base model
|
|
51
48
|
const i18n = await this.collectLanguageBundles(dictionary.base, path.join(destBase, i18nFolder))
|
|
52
49
|
if (i18n && this.hasBuildOption(OUTPUT_MODE, OUTPUT_MODE_RESULT)) {
|
|
@@ -58,52 +55,23 @@ class FeatureToggleBuildPlugin extends InternalBuildPlugin {
|
|
|
58
55
|
for (const ftName in dictionary.features) {
|
|
59
56
|
// attach the sources information for i18n location reference
|
|
60
57
|
dictionary.features[ftName]['$sources'] = paths.features[ftName]
|
|
61
|
-
await this.collectLanguageBundles(dictionary.features[ftName], path.join(destFts,
|
|
58
|
+
await this.collectLanguageBundles(dictionary.features[ftName], path.join(destFts, ftsName, ftName, i18nFolder))
|
|
62
59
|
}
|
|
63
60
|
}
|
|
64
61
|
}
|
|
65
62
|
|
|
66
|
-
async _resolveSourcePaths(csn) {
|
|
67
|
-
const regex = new RegExp(this.ftsName + '[/|\\\\](?<ftName>[^/|\\\\]*)')
|
|
68
|
-
let paths = { base: [] }
|
|
69
|
-
|
|
70
|
-
// add ROOT source file paths for the base model
|
|
71
|
-
paths.base = this._resolveModel().reduce((acc, file) => {
|
|
72
|
-
const match = file.match(regex)
|
|
73
|
-
if (!match) {
|
|
74
|
-
acc.push(file)
|
|
75
|
-
}
|
|
76
|
-
return acc
|
|
77
|
-
}, [])
|
|
78
|
-
|
|
79
|
-
// add source file paths for the features
|
|
80
|
-
paths.features = csn['$sources'].reduce((acc, file) => {
|
|
81
|
-
const match = file.match(regex)
|
|
82
|
-
if (match) {
|
|
83
|
-
const { ftName } = match.groups
|
|
84
|
-
//feature
|
|
85
|
-
if (!acc[ftName]) {
|
|
86
|
-
acc[ftName] = []
|
|
87
|
-
}
|
|
88
|
-
acc[ftName].push(file)
|
|
89
|
-
}
|
|
90
|
-
return acc
|
|
91
|
-
}, {})
|
|
92
|
-
|
|
93
|
-
return paths
|
|
94
|
-
}
|
|
95
|
-
|
|
96
63
|
async _compileFeatures(ftsPaths, destBase, destFts, baseCsn) {
|
|
97
64
|
if (!ftsPaths) {
|
|
98
65
|
return
|
|
99
66
|
}
|
|
100
67
|
const features = {}
|
|
101
68
|
const options = { ...this.options(), flavor: 'parsed' }
|
|
69
|
+
const ftsName = path.dirname(cds.env.features.folders || 'fts/*')
|
|
102
70
|
|
|
103
71
|
// create feature models
|
|
104
72
|
for (const ftName in ftsPaths) {
|
|
105
73
|
const ftCsn = await cds.load(ftsPaths[ftName], options)
|
|
106
|
-
const ftPath = path.join(destFts,
|
|
74
|
+
const ftPath = path.join(destFts, ftsName, ftName)
|
|
107
75
|
|
|
108
76
|
// replace require paths by base model path to ensure precedence of feature annotations
|
|
109
77
|
// see https://pages.github.tools.sap/cap/docs/cds/compiler-messages#anno-duplicate-unrelated-layer
|
|
@@ -119,7 +87,7 @@ class FeatureToggleBuildPlugin extends InternalBuildPlugin {
|
|
|
119
87
|
_validateFeature(ftCsn, baseCsn) {
|
|
120
88
|
// features must not have other dependencies than base model dependencies - cross feature dependencies are not supported
|
|
121
89
|
// assuming only core compiler options are relevant for validation scenario
|
|
122
|
-
cds.compiler.compileSources({ [ftCsn.requires[0]]: baseCsn, 'feature.csn': ftCsn }, { ...super.options(), ...cds.env.cdsc ?? {}})
|
|
90
|
+
cds.compiler.compileSources({ [ftCsn.requires[0]]: baseCsn, 'feature.csn': ftCsn }, { ...super.options(), ...cds.env.cdsc ?? {} })
|
|
123
91
|
}
|
|
124
92
|
}
|
|
125
93
|
|