From d1ae1871c031482223881bf39a9e7f72c4d4b6b8 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Fri, 24 Mar 2023 16:32:41 +0000 Subject: [PATCH 1/8] allow arrow key navigation in the components panel --- .../[componentId]/new/_components/NewComponentPanel.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/NewComponentPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/NewComponentPanel.svelte index 033881c0ac..092e429515 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/NewComponentPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/NewComponentPanel.svelte @@ -182,12 +182,13 @@ } const handleKeyDown = e => { - if (e.key === "Tab") { + if (e.key === "Tab" || e.key === "ArrowDown" || e.key === "ArrowUp") { // Cycle selected components on tab press if (selectedIndex == null) { selectedIndex = 0 } else { - selectedIndex = (selectedIndex + 1) % componentList.length + const direction = e.key === "ArrowUp" ? -1 : 1 + selectedIndex = (selectedIndex + direction) % componentList.length } e.preventDefault() e.stopPropagation() From 46381c381dda7a879cf001fb6288abd849639f10 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Sun, 26 Mar 2023 18:00:20 +0100 Subject: [PATCH 2/8] Update commands to run locally and in CI --- qa-core/package.json | 6 ++-- .../internal-api/dataSources/example.spec.ts | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 qa-core/src/tests/internal-api/dataSources/example.spec.ts diff --git a/qa-core/package.json b/qa-core/package.json index 15246af294..6fb032cd04 100644 --- a/qa-core/package.json +++ b/qa-core/package.json @@ -13,13 +13,15 @@ "test:watch": "env-cmd jest --watch", "test:debug": "DEBUG=1 jest", "test:notify": "node scripts/testResultsWebhook", - "test:ci": "jest --runInBand --json --outputFile=testResults.json", + "test:ci": "jest --runInBand --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", "docker:up": "docker-compose up -d", "docker:down": "docker-compose down", "api:server:setup": "npm run docker:up && env-cmd ts-node ../packages/builder/ts/setup.ts", "api:server:setup:ci": "env-cmd node ../packages/builder/setup.js", "api:test:ci": "start-server-and-test api:server:setup:ci http://localhost:4100/builder test", - "api:test": "start-server-and-test api:server:setup http://localhost:4100/builder test" + "api:test": "start-server-and-test api:server:setup http://localhost:4100/builder test", + "api:test:local": "env-cmd jest --runInBand --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", + "api:test:local:withDataSources": "env-cmd jest --runInBand" }, "jest": { "preset": "ts-jest", diff --git a/qa-core/src/tests/internal-api/dataSources/example.spec.ts b/qa-core/src/tests/internal-api/dataSources/example.spec.ts new file mode 100644 index 0000000000..736e49bd89 --- /dev/null +++ b/qa-core/src/tests/internal-api/dataSources/example.spec.ts @@ -0,0 +1,36 @@ +import TestConfiguration from "../../../config/internal-api/TestConfiguration" +import { App } from "@budibase/types" +import InternalAPIClient from "../../../config/internal-api/TestConfiguration/InternalAPIClient" +import AccountsAPIClient from "../../../config/internal-api/TestConfiguration/accountsAPIClient" +import { generateApp } from "../../../config/internal-api/fixtures/applications" +import { Screen } from "@budibase/types" +import generateScreen from "../../../config/internal-api/fixtures/screens" + +describe("Internal API - Data Sources", () => { + const api = new InternalAPIClient() + const accountsAPI = new AccountsAPIClient() + const config = new TestConfiguration(api, accountsAPI) + const appConfig = new TestConfiguration(api, accountsAPI) + + beforeAll(async () => { + await config.setupAccountAndTenant() + }) + + afterAll(async () => { + await config.afterAll() + }) + + it("Create an app with a data source", async () => { + // Create app + const app = await appConfig.applications.create(generateApp()) + + // Create Screen + const roleArray = ["BASIC", "POWER", "ADMIN", "PUBLIC"] + appConfig.applications.api.appId = app.appId + for (let role in roleArray) { + const [response, screen] = await config.screen.create( + generateScreen(roleArray[role]) + ) + } + }) +}) From 077e7228622784fa2e0c79cb54e7c531325cac81 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Sun, 26 Mar 2023 18:03:17 +0100 Subject: [PATCH 3/8] Updade nightly command --- qa-core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa-core/package.json b/qa-core/package.json index 6fb032cd04..dd6d559267 100644 --- a/qa-core/package.json +++ b/qa-core/package.json @@ -21,7 +21,7 @@ "api:test:ci": "start-server-and-test api:server:setup:ci http://localhost:4100/builder test", "api:test": "start-server-and-test api:server:setup http://localhost:4100/builder test", "api:test:local": "env-cmd jest --runInBand --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", - "api:test:local:withDataSources": "env-cmd jest --runInBand" + "api:test:withDataSources": "env-cmd jest --runInBand" }, "jest": { "preset": "ts-jest", From f8f13ed2c7545bfdec6a38e658a0b7162233d8f6 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Sun, 26 Mar 2023 18:05:02 +0100 Subject: [PATCH 4/8] Fix logs in qa-core test runs --- qa-core/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qa-core/package.json b/qa-core/package.json index dd6d559267..59c028f9f9 100644 --- a/qa-core/package.json +++ b/qa-core/package.json @@ -13,7 +13,7 @@ "test:watch": "env-cmd jest --watch", "test:debug": "DEBUG=1 jest", "test:notify": "node scripts/testResultsWebhook", - "test:ci": "jest --runInBand --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", + "test:ci": "jest --runInBand --json --outputFile=testResults.json --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", "docker:up": "docker-compose up -d", "docker:down": "docker-compose down", "api:server:setup": "npm run docker:up && env-cmd ts-node ../packages/builder/ts/setup.ts", @@ -21,7 +21,7 @@ "api:test:ci": "start-server-and-test api:server:setup:ci http://localhost:4100/builder test", "api:test": "start-server-and-test api:server:setup http://localhost:4100/builder test", "api:test:local": "env-cmd jest --runInBand --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", - "api:test:withDataSources": "env-cmd jest --runInBand" + "api:test:withDataSources": "env-cmd jest --runInBand --outputFile=testResults.json" }, "jest": { "preset": "ts-jest", From 37ba34cf94c7f4ad7d0d0a6d580d0d66e3137e52 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Sun, 26 Mar 2023 18:12:26 +0100 Subject: [PATCH 5/8] Update readme --- qa-core/README.md | 20 ++++++++++++++++---- qa-core/package.json | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/qa-core/README.md b/qa-core/README.md index b812742ab3..c9d0727878 100644 --- a/qa-core/README.md +++ b/qa-core/README.md @@ -3,20 +3,32 @@ The QA Core API tests are a jest suite that run directly against the budibase backend APIs. ## Auto Setup + You can run the whole test suite with one command, that spins up the budibase server and runs the jest tests: -`yarn api:test` +`yarn api:test` ## Setup Server Only + You can also just stand up the budibase server alone. -`yarn api:server:setup` +`yarn api:server:setup` ## Run Tests + If you configured the server using the previous command, you can run the whole test suite by using: -`yarn test` +`yarn test` for watch mode, where the tests will run on every change: -`yarn test:watch` \ No newline at end of file +`yarn test:watch` + +To run tests locally against a cloud service you can use the command: +`yarn run api:test:local` + +To run the tests in CI, it assumes the correct environment variables are set, and the server is already running. Use the command: +`yarn run api:test:ci` + +To run the nightly tests against the QA environment, use the command: +`yarn run api:test:nightly` diff --git a/qa-core/package.json b/qa-core/package.json index 59c028f9f9..9a5cc8dc32 100644 --- a/qa-core/package.json +++ b/qa-core/package.json @@ -21,7 +21,7 @@ "api:test:ci": "start-server-and-test api:server:setup:ci http://localhost:4100/builder test", "api:test": "start-server-and-test api:server:setup http://localhost:4100/builder test", "api:test:local": "env-cmd jest --runInBand --testPathIgnorePatterns=\\\"\\/dataSources\\/\\\"", - "api:test:withDataSources": "env-cmd jest --runInBand --outputFile=testResults.json" + "api:test:nightly": "env-cmd jest --runInBand --outputFile=testResults.json" }, "jest": { "preset": "ts-jest", From 62d0a49761e9358eeff18082d0c367f806f27e65 Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Mon, 27 Mar 2023 16:40:48 +0000 Subject: [PATCH 6/8] v2.4.27-alpha.7 --- lerna.json | 2 +- packages/backend-core/package.json | 4 ++-- packages/bbui/package.json | 6 +++--- packages/builder/package.json | 12 ++++++------ packages/cli/package.json | 8 ++++---- packages/client/package.json | 12 ++++++------ packages/frontend-core/package.json | 6 +++--- packages/sdk/package.json | 2 +- packages/server/package.json | 12 ++++++------ packages/shared-core/package.json | 4 ++-- packages/string-templates/package.json | 2 +- packages/types/package.json | 2 +- packages/worker/package.json | 8 ++++---- 13 files changed, 40 insertions(+), 40 deletions(-) diff --git a/lerna.json b/lerna.json index bdf32d27ba..640daf025f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 7d4bc7e033..48327add76 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/backend-core", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase backend core libraries used in server and worker", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -24,7 +24,7 @@ "dependencies": { "@budibase/nano": "10.1.2", "@budibase/pouchdb-replication-stream": "1.2.10", - "@budibase/types": "2.4.27-alpha.6", + "@budibase/types": "2.4.27-alpha.7", "@shopify/jest-koa-mocks": "5.0.1", "@techpass/passport-openidconnect": "0.3.2", "aws-cloudfront-sign": "2.2.0", diff --git a/packages/bbui/package.json b/packages/bbui/package.json index 56bb1fd9f3..3e310466c0 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/bbui", "description": "A UI solution used in the different Budibase projects.", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "license": "MPL-2.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", @@ -38,8 +38,8 @@ ], "dependencies": { "@adobe/spectrum-css-workflow-icons": "1.2.1", - "@budibase/shared-core": "2.4.27-alpha.6", - "@budibase/string-templates": "2.4.27-alpha.6", + "@budibase/shared-core": "2.4.27-alpha.7", + "@budibase/string-templates": "2.4.27-alpha.7", "@spectrum-css/accordion": "3.0.24", "@spectrum-css/actionbutton": "1.0.1", "@spectrum-css/actiongroup": "1.0.1", diff --git a/packages/builder/package.json b/packages/builder/package.json index cfd91b366c..ef395a7e13 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "license": "GPL-3.0", "private": true, "scripts": { @@ -58,11 +58,11 @@ } }, "dependencies": { - "@budibase/bbui": "2.4.27-alpha.6", - "@budibase/client": "2.4.27-alpha.6", - "@budibase/frontend-core": "2.4.27-alpha.6", - "@budibase/shared-core": "2.4.27-alpha.6", - "@budibase/string-templates": "2.4.27-alpha.6", + "@budibase/bbui": "2.4.27-alpha.7", + "@budibase/client": "2.4.27-alpha.7", + "@budibase/frontend-core": "2.4.27-alpha.7", + "@budibase/shared-core": "2.4.27-alpha.7", + "@budibase/string-templates": "2.4.27-alpha.7", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/free-brands-svg-icons": "^6.2.1", "@fortawesome/free-solid-svg-icons": "^6.2.1", diff --git a/packages/cli/package.json b/packages/cli/package.json index e66e0d0268..f2c8b81328 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/cli", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase CLI, for developers, self hosting and migrations.", "main": "dist/index.js", "bin": { @@ -29,9 +29,9 @@ "outputPath": "build" }, "dependencies": { - "@budibase/backend-core": "2.4.27-alpha.6", - "@budibase/string-templates": "2.4.27-alpha.6", - "@budibase/types": "2.4.27-alpha.6", + "@budibase/backend-core": "2.4.27-alpha.7", + "@budibase/string-templates": "2.4.27-alpha.7", + "@budibase/types": "2.4.27-alpha.7", "axios": "0.21.2", "chalk": "4.1.0", "cli-progress": "3.11.2", diff --git a/packages/client/package.json b/packages/client/package.json index 99d97f7143..6a8c0eb80d 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "license": "MPL-2.0", "module": "dist/budibase-client.js", "main": "dist/budibase-client.js", @@ -19,11 +19,11 @@ "dev:builder": "rollup -cw" }, "dependencies": { - "@budibase/bbui": "2.4.27-alpha.6", - "@budibase/frontend-core": "2.4.27-alpha.6", - "@budibase/shared-core": "2.4.27-alpha.6", - "@budibase/string-templates": "2.4.27-alpha.6", - "@budibase/types": "2.4.27-alpha.6", + "@budibase/bbui": "2.4.27-alpha.7", + "@budibase/frontend-core": "2.4.27-alpha.7", + "@budibase/shared-core": "2.4.27-alpha.7", + "@budibase/string-templates": "2.4.27-alpha.7", + "@budibase/types": "2.4.27-alpha.7", "@spectrum-css/button": "^3.0.3", "@spectrum-css/card": "^3.0.3", "@spectrum-css/divider": "^1.0.3", diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json index fed36a34d2..33db134785 100644 --- a/packages/frontend-core/package.json +++ b/packages/frontend-core/package.json @@ -1,13 +1,13 @@ { "name": "@budibase/frontend-core", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase frontend core libraries used in builder and client", "author": "Budibase", "license": "MPL-2.0", "svelte": "src/index.js", "dependencies": { - "@budibase/bbui": "2.4.27-alpha.6", - "@budibase/shared-core": "2.4.27-alpha.6", + "@budibase/bbui": "2.4.27-alpha.7", + "@budibase/shared-core": "2.4.27-alpha.7", "lodash": "^4.17.21", "svelte": "^3.46.2" } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index f15139f6db..5c595972d7 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/sdk", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase Public API SDK", "author": "Budibase", "license": "MPL-2.0", diff --git a/packages/server/package.json b/packages/server/package.json index 99ba9ddaa5..31aa32d181 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase Web Server", "main": "src/index.ts", "repository": { @@ -43,12 +43,12 @@ "license": "GPL-3.0", "dependencies": { "@apidevtools/swagger-parser": "10.0.3", - "@budibase/backend-core": "2.4.27-alpha.6", - "@budibase/client": "2.4.27-alpha.6", + "@budibase/backend-core": "2.4.27-alpha.7", + "@budibase/client": "2.4.27-alpha.7", "@budibase/pro": "2.4.27-alpha.6", - "@budibase/shared-core": "2.4.27-alpha.6", - "@budibase/string-templates": "2.4.27-alpha.6", - "@budibase/types": "2.4.27-alpha.6", + "@budibase/shared-core": "2.4.27-alpha.7", + "@budibase/string-templates": "2.4.27-alpha.7", + "@budibase/types": "2.4.27-alpha.7", "@bull-board/api": "3.7.0", "@bull-board/koa": "3.9.4", "@elastic/elasticsearch": "7.10.0", diff --git a/packages/shared-core/package.json b/packages/shared-core/package.json index e46fb40fdd..7876bb8f6b 100644 --- a/packages/shared-core/package.json +++ b/packages/shared-core/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/shared-core", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Shared data utils", "main": "dist/cjs/src/index.js", "types": "dist/mjs/src/index.d.ts", @@ -20,7 +20,7 @@ "dev:builder": "yarn prebuild && concurrently \"tsc -p tsconfig.build.json --watch\" \"tsc -p tsconfig-cjs.build.json --watch\"" }, "dependencies": { - "@budibase/types": "2.4.27-alpha.6" + "@budibase/types": "2.4.27-alpha.7" }, "devDependencies": { "concurrently": "^7.6.0", diff --git a/packages/string-templates/package.json b/packages/string-templates/package.json index ec22eee8ba..9597596183 100644 --- a/packages/string-templates/package.json +++ b/packages/string-templates/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/string-templates", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Handlebars wrapper for Budibase templating.", "main": "src/index.cjs", "module": "dist/bundle.mjs", diff --git a/packages/types/package.json b/packages/types/package.json index 8d4f5993a4..ee177ec590 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/types", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase types", "main": "dist/cjs/index.js", "types": "dist/mjs/index.d.ts", diff --git a/packages/worker/package.json b/packages/worker/package.json index 81006b35af..a90c6b989b 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/worker", "email": "hi@budibase.com", - "version": "2.4.27-alpha.6", + "version": "2.4.27-alpha.7", "description": "Budibase background service", "main": "src/index.ts", "repository": { @@ -36,10 +36,10 @@ "author": "Budibase", "license": "GPL-3.0", "dependencies": { - "@budibase/backend-core": "2.4.27-alpha.6", + "@budibase/backend-core": "2.4.27-alpha.7", "@budibase/pro": "2.4.27-alpha.6", - "@budibase/string-templates": "2.4.27-alpha.6", - "@budibase/types": "2.4.27-alpha.6", + "@budibase/string-templates": "2.4.27-alpha.7", + "@budibase/types": "2.4.27-alpha.7", "@koa/router": "8.0.8", "@sentry/node": "6.17.7", "@techpass/passport-openidconnect": "0.3.2", From 3dcb4572635450ce17eb3467c01322e37760b7b7 Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Mon, 27 Mar 2023 16:44:02 +0000 Subject: [PATCH 7/8] Update pro version to 2.4.27-alpha.7 --- packages/server/package.json | 2 +- packages/server/yarn.lock | 30 +++++++++++++++--------------- packages/worker/package.json | 2 +- packages/worker/yarn.lock | 30 +++++++++++++++--------------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/server/package.json b/packages/server/package.json index 31aa32d181..09231b0fad 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -45,7 +45,7 @@ "@apidevtools/swagger-parser": "10.0.3", "@budibase/backend-core": "2.4.27-alpha.7", "@budibase/client": "2.4.27-alpha.7", - "@budibase/pro": "2.4.27-alpha.6", + "@budibase/pro": "2.4.27-alpha.7", "@budibase/shared-core": "2.4.27-alpha.7", "@budibase/string-templates": "2.4.27-alpha.7", "@budibase/types": "2.4.27-alpha.7", diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock index 28e1e64c89..c65e9d901a 100644 --- a/packages/server/yarn.lock +++ b/packages/server/yarn.lock @@ -1278,14 +1278,14 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@2.4.27-alpha.6": - version "2.4.27-alpha.6" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.4.27-alpha.6.tgz#8105c400fd0a3fa6264d95e9b99c712e84a07007" - integrity sha512-an+r4AMNhxPUJGxokA/W1PvUsdYih14QcQLfN3Howd0A6h4PZaHpjTC/6xmdDNv0XUcDZ8l8LkAoaW/kMLJG3Q== +"@budibase/backend-core@2.4.27-alpha.7": + version "2.4.27-alpha.7" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.4.27-alpha.7.tgz#6c7d6e6832a1875de845072bc7134722f99dfcd1" + integrity sha512-PjyPMx+6XvcMmY0+rtBSAkqnO0Pj+dy55aw645fNvI9shWsR1fiy/uyNi+sA1JhcqurnE4h/tDsCTjAi1ihAvA== dependencies: "@budibase/nano" "10.1.2" "@budibase/pouchdb-replication-stream" "1.2.10" - "@budibase/types" "2.4.27-alpha.6" + "@budibase/types" "2.4.27-alpha.7" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-cloudfront-sign "2.2.0" @@ -1417,14 +1417,14 @@ pouchdb-promise "^6.0.4" through2 "^2.0.0" -"@budibase/pro@2.4.27-alpha.6": - version "2.4.27-alpha.6" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.4.27-alpha.6.tgz#2184aea5e640a2abf4a8803a4acac0b5516a8b01" - integrity sha512-gAxuZnfEo1z65Zuf8S9g7qDrrJOVkayKw2GbdX6pbZ1dJbKDu6N3WDJjWfkyLFAOLu4Oy1XtOsHX8AobHZ42xQ== +"@budibase/pro@2.4.27-alpha.7": + version "2.4.27-alpha.7" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.4.27-alpha.7.tgz#ad8ab70b4fa7d5e28a2d4363e11127eb0b9670bd" + integrity sha512-Up1If7wsHMqjkZZ2770QCnL+ESChXjjmL7biBeu0QtI/VgnGAWg+/RzWpOzJOYXpGInRKfjITYz1X+PZmT+bGQ== dependencies: - "@budibase/backend-core" "2.4.27-alpha.6" + "@budibase/backend-core" "2.4.27-alpha.7" "@budibase/string-templates" "2.3.20" - "@budibase/types" "2.4.27-alpha.6" + "@budibase/types" "2.4.27-alpha.7" "@koa/router" "8.0.8" bull "4.10.1" joi "17.6.0" @@ -1463,10 +1463,10 @@ lodash "^4.17.20" vm2 "^3.9.4" -"@budibase/types@2.4.27-alpha.6": - version "2.4.27-alpha.6" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.4.27-alpha.6.tgz#9235b86764e4c837bab45779a9596233662de8be" - integrity sha512-4+b3NKiqOndNjmzsgr1mZvt4VFhkRVlyMTss9Iu0T4o9SBW20GhJa6iWkiypqHiA50uGDAzgA2u2n/5m59aMyA== +"@budibase/types@2.4.27-alpha.7": + version "2.4.27-alpha.7" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.4.27-alpha.7.tgz#66966e869d99e51bc2067adc0f955312fc236862" + integrity sha512-4lGc3Idp/+u6CQfv/0GxF2QytYFtATmHBh/faudZk1hhrGFFDRVocnsPjNDYt13PQGdz0VfPBc6zg6hiE3GEhw== "@bull-board/api@3.7.0": version "3.7.0" diff --git a/packages/worker/package.json b/packages/worker/package.json index a90c6b989b..e966fdfde3 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -37,7 +37,7 @@ "license": "GPL-3.0", "dependencies": { "@budibase/backend-core": "2.4.27-alpha.7", - "@budibase/pro": "2.4.27-alpha.6", + "@budibase/pro": "2.4.27-alpha.7", "@budibase/string-templates": "2.4.27-alpha.7", "@budibase/types": "2.4.27-alpha.7", "@koa/router": "8.0.8", diff --git a/packages/worker/yarn.lock b/packages/worker/yarn.lock index 78c15417d2..b5787d2385 100644 --- a/packages/worker/yarn.lock +++ b/packages/worker/yarn.lock @@ -475,14 +475,14 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@2.4.27-alpha.6": - version "2.4.27-alpha.6" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.4.27-alpha.6.tgz#8105c400fd0a3fa6264d95e9b99c712e84a07007" - integrity sha512-an+r4AMNhxPUJGxokA/W1PvUsdYih14QcQLfN3Howd0A6h4PZaHpjTC/6xmdDNv0XUcDZ8l8LkAoaW/kMLJG3Q== +"@budibase/backend-core@2.4.27-alpha.7": + version "2.4.27-alpha.7" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.4.27-alpha.7.tgz#6c7d6e6832a1875de845072bc7134722f99dfcd1" + integrity sha512-PjyPMx+6XvcMmY0+rtBSAkqnO0Pj+dy55aw645fNvI9shWsR1fiy/uyNi+sA1JhcqurnE4h/tDsCTjAi1ihAvA== dependencies: "@budibase/nano" "10.1.2" "@budibase/pouchdb-replication-stream" "1.2.10" - "@budibase/types" "2.4.27-alpha.6" + "@budibase/types" "2.4.27-alpha.7" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-cloudfront-sign "2.2.0" @@ -564,14 +564,14 @@ pouchdb-promise "^6.0.4" through2 "^2.0.0" -"@budibase/pro@2.4.27-alpha.6": - version "2.4.27-alpha.6" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.4.27-alpha.6.tgz#2184aea5e640a2abf4a8803a4acac0b5516a8b01" - integrity sha512-gAxuZnfEo1z65Zuf8S9g7qDrrJOVkayKw2GbdX6pbZ1dJbKDu6N3WDJjWfkyLFAOLu4Oy1XtOsHX8AobHZ42xQ== +"@budibase/pro@2.4.27-alpha.7": + version "2.4.27-alpha.7" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.4.27-alpha.7.tgz#ad8ab70b4fa7d5e28a2d4363e11127eb0b9670bd" + integrity sha512-Up1If7wsHMqjkZZ2770QCnL+ESChXjjmL7biBeu0QtI/VgnGAWg+/RzWpOzJOYXpGInRKfjITYz1X+PZmT+bGQ== dependencies: - "@budibase/backend-core" "2.4.27-alpha.6" + "@budibase/backend-core" "2.4.27-alpha.7" "@budibase/string-templates" "2.3.20" - "@budibase/types" "2.4.27-alpha.6" + "@budibase/types" "2.4.27-alpha.7" "@koa/router" "8.0.8" bull "4.10.1" joi "17.6.0" @@ -592,10 +592,10 @@ lodash "^4.17.20" vm2 "^3.9.4" -"@budibase/types@2.4.27-alpha.6": - version "2.4.27-alpha.6" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.4.27-alpha.6.tgz#9235b86764e4c837bab45779a9596233662de8be" - integrity sha512-4+b3NKiqOndNjmzsgr1mZvt4VFhkRVlyMTss9Iu0T4o9SBW20GhJa6iWkiypqHiA50uGDAzgA2u2n/5m59aMyA== +"@budibase/types@2.4.27-alpha.7": + version "2.4.27-alpha.7" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.4.27-alpha.7.tgz#66966e869d99e51bc2067adc0f955312fc236862" + integrity sha512-4lGc3Idp/+u6CQfv/0GxF2QytYFtATmHBh/faudZk1hhrGFFDRVocnsPjNDYt13PQGdz0VfPBc6zg6hiE3GEhw== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" From 56e1d102fcddcfb56a81419aa6ae3031181ca241 Mon Sep 17 00:00:00 2001 From: Dean Date: Mon, 27 Mar 2023 21:15:09 +0100 Subject: [PATCH 8/8] Added feature flag function for branding to ensure it uses the cached license --- .../src/api/controllers/global/configs.ts | 60 ++++++++++--------- packages/worker/src/utilities/configs.ts | 27 +++++++++ packages/worker/src/utilities/templates.ts | 10 +++- 3 files changed, 69 insertions(+), 28 deletions(-) create mode 100644 packages/worker/src/utilities/configs.ts diff --git a/packages/worker/src/api/controllers/global/configs.ts b/packages/worker/src/api/controllers/global/configs.ts index d77b9c81d5..a84bd173a8 100644 --- a/packages/worker/src/api/controllers/global/configs.ts +++ b/packages/worker/src/api/controllers/global/configs.ts @@ -11,11 +11,11 @@ import { tenancy, } from "@budibase/backend-core" import { checkAnyUserExists } from "../../../utilities/users" +import { getLicensedConfig } from "../../../utilities/configs" import { Config, ConfigType, Ctx, - Feature, GetPublicOIDCConfigResponse, GetPublicSettingsResponse, GoogleInnerConfig, @@ -30,7 +30,6 @@ import { UserCtx, } from "@budibase/types" import * as pro from "@budibase/pro" -import { licensing } from "@budibase/pro" const getEventFns = async (config: Config, existing?: Config) => { const fns = [] @@ -213,6 +212,38 @@ export async function save(ctx: UserCtx) { ctx.throw(400, err) } + // Ignore branding changes if the license does not permit it + // Favicon and Logo Url are excluded. + try { + const brandingEnabled = await pro.features.isBrandingEnabled() + if (existingConfig?.config && !brandingEnabled) { + const { + emailBrandingEnabled, + testimonialsEnabled, + platformTitle, + metaDescription, + loginHeading, + loginButton, + metaImageUrl, + metaTitle, + } = existingConfig.config + + body.config = { + ...body.config, + emailBrandingEnabled, + testimonialsEnabled, + platformTitle, + metaDescription, + loginHeading, + loginButton, + metaImageUrl, + metaTitle, + } + } + } catch (e) { + console.error("There was an issue retrieving the license", e) + } + try { body._id = configs.generateConfigID(type) const response = await configs.save(body) @@ -271,31 +302,6 @@ export async function publicOidc(ctx: Ctx) { } } -export async function getLicensedConfig() { - let licensedConfig: object = {} - const defaults = { - emailBrandingEnabled: true, - testimonialsEnabled: true, - platformTitle: undefined, - metaDescription: undefined, - metaImageUrl: undefined, - metaTitle: undefined, - } - - try { - // License/Feature Checks - const license = await licensing.getLicense() - - if (!license || license?.features.indexOf(Feature.BRANDING) == -1) { - licensedConfig = { ...defaults } - } - } catch (e) { - licensedConfig = { ...defaults } - console.info("Could not retrieve license", e) - } - return licensedConfig -} - export async function publicSettings( ctx: Ctx ) { diff --git a/packages/worker/src/utilities/configs.ts b/packages/worker/src/utilities/configs.ts new file mode 100644 index 0000000000..97420582c7 --- /dev/null +++ b/packages/worker/src/utilities/configs.ts @@ -0,0 +1,27 @@ +import * as pro from "@budibase/pro" + +export async function getLicensedConfig() { + let licensedConfig: object = {} + const defaults = { + emailBrandingEnabled: true, + testimonialsEnabled: true, + platformTitle: undefined, + metaDescription: undefined, + loginHeading: undefined, + loginButton: undefined, + metaImageUrl: undefined, + metaTitle: undefined, + } + + try { + // License/Feature Checks + const enabled = await pro.features.isBrandingEnabled() + if (!enabled) { + licensedConfig = { ...defaults } + } + } catch (e) { + licensedConfig = { ...defaults } + console.info("Could not retrieve license", e) + } + return licensedConfig +} diff --git a/packages/worker/src/utilities/templates.ts b/packages/worker/src/utilities/templates.ts index d311ab7ba6..759d221e51 100644 --- a/packages/worker/src/utilities/templates.ts +++ b/packages/worker/src/utilities/templates.ts @@ -1,10 +1,13 @@ import { tenancy, configs } from "@budibase/backend-core" +import { SettingsInnerConfig } from "@budibase/types" import { InternalTemplateBinding, LOGO_URL, EmailTemplatePurpose, } from "../constants" import { checkSlashesInUrl } from "./index" +import { getLicensedConfig } from "./configs" + const BASE_COMPANY = "Budibase" export async function getSettingsTemplateContext( @@ -26,7 +29,12 @@ export async function getSettingsTemplateContext( [InternalTemplateBinding.CURRENT_YEAR]: new Date().getFullYear(), } - context["enableEmailBranding"] = settings.emailBrandingEnabled === true + try { + const config: SettingsInnerConfig = await getLicensedConfig() + context["enableEmailBranding"] = config?.emailBrandingEnabled || true + } catch (e) { + context["enableEmailBranding"] = true + } // attach purpose specific context switch (purpose) {