From 97e73b5df1cc49e8eee16d4d8adfcbacc10201b1 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 28 Oct 2022 13:06:00 +0800 Subject: [PATCH 01/10] feat(nocodb): add waitForStreamClose to pluginUtils --- packages/nocodb/src/lib/utils/pluginUtils.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/nocodb/src/lib/utils/pluginUtils.ts diff --git a/packages/nocodb/src/lib/utils/pluginUtils.ts b/packages/nocodb/src/lib/utils/pluginUtils.ts new file mode 100644 index 0000000000..8df3d425dc --- /dev/null +++ b/packages/nocodb/src/lib/utils/pluginUtils.ts @@ -0,0 +1,12 @@ +import fs from 'fs'; + +export async function waitForStreamClose( + stream: fs.WriteStream +): Promise { + stream.end(); + return new Promise((resolve) => { + stream.once('finish', () => { + resolve(); + }); + }); +} From 3c0936ad6b51d34ec1ea5b51e07ace9a538b8db9 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 28 Oct 2022 13:06:20 +0800 Subject: [PATCH 02/10] fix(nocodb): apply waitForStreamClose --- packages/nocodb/src/lib/plugins/backblaze/Backblaze.ts | 4 ++-- packages/nocodb/src/lib/plugins/gcs/Gcs.ts | 4 ++-- packages/nocodb/src/lib/plugins/linode/LinodeObjectStorage.ts | 4 ++-- packages/nocodb/src/lib/plugins/mino/Minio.ts | 4 ++-- packages/nocodb/src/lib/plugins/ovhCloud/OvhCloud.ts | 4 ++-- packages/nocodb/src/lib/plugins/s3/S3.ts | 4 ++-- .../nocodb/src/lib/plugins/scaleway/ScalewayObjectStorage.ts | 3 ++- packages/nocodb/src/lib/plugins/spaces/Spaces.ts | 4 ++-- packages/nocodb/src/lib/plugins/upcloud/UpoCloud.ts | 4 ++-- packages/nocodb/src/lib/plugins/vultr/Vultr.ts | 4 ++-- 10 files changed, 20 insertions(+), 19 deletions(-) diff --git a/packages/nocodb/src/lib/plugins/backblaze/Backblaze.ts b/packages/nocodb/src/lib/plugins/backblaze/Backblaze.ts index 16a757d081..d8f8fbeef2 100644 --- a/packages/nocodb/src/lib/plugins/backblaze/Backblaze.ts +++ b/packages/nocodb/src/lib/plugins/backblaze/Backblaze.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class Backblaze implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -121,7 +121,7 @@ export default class Backblaze implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/gcs/Gcs.ts b/packages/nocodb/src/lib/plugins/gcs/Gcs.ts index ccb99e81b5..ed4e602c1a 100644 --- a/packages/nocodb/src/lib/plugins/gcs/Gcs.ts +++ b/packages/nocodb/src/lib/plugins/gcs/Gcs.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import { Storage, StorageOptions } from '@google-cloud/storage'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class Gcs implements IStorageAdapterV2 { private storageClient: Storage; @@ -87,7 +87,7 @@ export default class Gcs implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/linode/LinodeObjectStorage.ts b/packages/nocodb/src/lib/plugins/linode/LinodeObjectStorage.ts index 616709fbf2..a2f4672074 100644 --- a/packages/nocodb/src/lib/plugins/linode/LinodeObjectStorage.ts +++ b/packages/nocodb/src/lib/plugins/linode/LinodeObjectStorage.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class LinodeObjectStorage implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -111,7 +111,7 @@ export default class LinodeObjectStorage implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/mino/Minio.ts b/packages/nocodb/src/lib/plugins/mino/Minio.ts index 1a2765ff6b..5cea82c9e8 100644 --- a/packages/nocodb/src/lib/plugins/mino/Minio.ts +++ b/packages/nocodb/src/lib/plugins/mino/Minio.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import { Client as MinioClient } from 'minio'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class Minio implements IStorageAdapterV2 { private minioClient: MinioClient; @@ -75,7 +75,7 @@ export default class Minio implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/ovhCloud/OvhCloud.ts b/packages/nocodb/src/lib/plugins/ovhCloud/OvhCloud.ts index b374ff43e8..e4e973e391 100644 --- a/packages/nocodb/src/lib/plugins/ovhCloud/OvhCloud.ts +++ b/packages/nocodb/src/lib/plugins/ovhCloud/OvhCloud.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class OvhCloud implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -111,7 +111,7 @@ export default class OvhCloud implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/s3/S3.ts b/packages/nocodb/src/lib/plugins/s3/S3.ts index 3d3e91b164..d01bc98551 100644 --- a/packages/nocodb/src/lib/plugins/s3/S3.ts +++ b/packages/nocodb/src/lib/plugins/s3/S3.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class S3 implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -114,7 +114,7 @@ export default class S3 implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/scaleway/ScalewayObjectStorage.ts b/packages/nocodb/src/lib/plugins/scaleway/ScalewayObjectStorage.ts index 79803afc75..4b21d5c1c3 100644 --- a/packages/nocodb/src/lib/plugins/scaleway/ScalewayObjectStorage.ts +++ b/packages/nocodb/src/lib/plugins/scaleway/ScalewayObjectStorage.ts @@ -3,6 +3,7 @@ import fs from 'fs'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import AWS from 'aws-sdk'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class ScalewayObjectStorage implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -30,7 +31,7 @@ export default class ScalewayObjectStorage implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/spaces/Spaces.ts b/packages/nocodb/src/lib/plugins/spaces/Spaces.ts index dcb2e1a9de..54624cabf9 100644 --- a/packages/nocodb/src/lib/plugins/spaces/Spaces.ts +++ b/packages/nocodb/src/lib/plugins/spaces/Spaces.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class Spaces implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -119,7 +119,7 @@ export default class Spaces implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/upcloud/UpoCloud.ts b/packages/nocodb/src/lib/plugins/upcloud/UpoCloud.ts index 0186a16bbc..32ed516349 100644 --- a/packages/nocodb/src/lib/plugins/upcloud/UpoCloud.ts +++ b/packages/nocodb/src/lib/plugins/upcloud/UpoCloud.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class UpoCloud implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -109,7 +109,7 @@ export default class UpoCloud implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', diff --git a/packages/nocodb/src/lib/plugins/vultr/Vultr.ts b/packages/nocodb/src/lib/plugins/vultr/Vultr.ts index 84e1a4cbbe..ddd1b9f51c 100644 --- a/packages/nocodb/src/lib/plugins/vultr/Vultr.ts +++ b/packages/nocodb/src/lib/plugins/vultr/Vultr.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; - import AWS from 'aws-sdk'; import { IStorageAdapterV2, XcFile } from 'nc-plugin'; import request from 'request'; +import { waitForStreamClose } from '../../utils/pluginUtils'; export default class Vultr implements IStorageAdapterV2 { private s3Client: AWS.S3; @@ -111,7 +111,7 @@ export default class Vultr implements IStorageAdapterV2 { try { const tempFile = path.join(process.cwd(), 'temp.txt'); const createStream = fs.createWriteStream(tempFile); - createStream.end(); + await waitForStreamClose(createStream); await this.fileCreate('nc-test-file.txt', { path: tempFile, mimetype: '', From 48bdf248b60e6407567fb81a96b79b37b54bd154 Mon Sep 17 00:00:00 2001 From: mertmit Date: Sat, 29 Oct 2022 00:21:36 +0300 Subject: [PATCH 03/10] fix: ssl mode mapping Signed-off-by: mertmit --- packages/nc-gui/pages/index/index/create-external.vue | 3 +++ packages/nc-gui/utils/projectCreateUtils.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/nc-gui/pages/index/index/create-external.vue b/packages/nc-gui/pages/index/index/create-external.vue index a85c220457..d45dddecde 100644 --- a/packages/nc-gui/pages/index/index/create-external.vue +++ b/packages/nc-gui/pages/index/index/create-external.vue @@ -113,6 +113,9 @@ const onSSLModeChange = ((mode: SSLUsage) => { delete connection.ssl break case SSLUsage.Allowed: + connection.ssl = 'no-verify' + break + case SSLUsage.Preferred: connection.ssl = 'true' break default: diff --git a/packages/nc-gui/utils/projectCreateUtils.ts b/packages/nc-gui/utils/projectCreateUtils.ts index ac66ced32d..94133d5bbd 100644 --- a/packages/nc-gui/utils/projectCreateUtils.ts +++ b/packages/nc-gui/utils/projectCreateUtils.ts @@ -21,7 +21,7 @@ export interface DefaultConnection { user: string password: string port: number | string - ssl?: Record | 'true' + ssl?: Record | 'no-verify' | 'true' } export interface SQLiteConnection { From f269649efd730592f86ce62f7f8f921f90c65fef Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Sun, 30 Oct 2022 12:56:26 +0800 Subject: [PATCH 04/10] fix(nocodb): handle type in round function in postgres --- .../lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts index 3dad58ef9c..f24ec33598 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/pg.ts @@ -9,7 +9,6 @@ const pg = { MIN: 'least', MAX: 'greatest', CEILING: 'ceil', - ROUND: 'round', POWER: 'pow', SQRT: 'sqrt', SEARCH: (args: MapFnArgs) => { @@ -35,6 +34,13 @@ const pg = { .raw(`CAST(${fn(pt.arguments[0])} as DOUBLE PRECISION)${colAlias}`) .wrap('(', ')'); }, + ROUND: ({ fn, knex, pt, colAlias }: MapFnArgs) => { + return knex.raw( + `ROUND((${fn(pt.arguments[0])})::numeric, ${ + pt?.arguments[1] ? fn(pt.arguments[1]) : 0 + }) ${colAlias}` + ); + }, DATEADD: ({ fn, knex, pt, colAlias }: MapFnArgs) => { return knex.raw( `${fn(pt.arguments[0])} + (${fn(pt.arguments[1])} || From 04a7fbd5251d8a47862ad531d1a993f4ab585ec7 Mon Sep 17 00:00:00 2001 From: redhoyasa Date: Mon, 31 Oct 2022 11:07:05 +0700 Subject: [PATCH 05/10] feat(gallery): skip empty value to be displayed in the gallery view --- .../nc-gui/components/smartsheet/Gallery.vue | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/Gallery.vue b/packages/nc-gui/components/smartsheet/Gallery.vue index 40fa673ad2..5934d87695 100644 --- a/packages/nc-gui/components/smartsheet/Gallery.vue +++ b/packages/nc-gui/components/smartsheet/Gallery.vue @@ -203,38 +203,36 @@ watch(view, async (nextView) => { -
-
-
- +
+
+
+
+ - + +
-
-
-
+
+
- +
From 1fff7634af3c64b0d3d6d550543aa7dd2991d3aa Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 31 Oct 2022 15:24:45 +0800 Subject: [PATCH 06/10] feat(nocodb): catch error and put steam.end inside promise --- packages/nocodb/src/lib/utils/pluginUtils.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/nocodb/src/lib/utils/pluginUtils.ts b/packages/nocodb/src/lib/utils/pluginUtils.ts index 8df3d425dc..d3b8b662a1 100644 --- a/packages/nocodb/src/lib/utils/pluginUtils.ts +++ b/packages/nocodb/src/lib/utils/pluginUtils.ts @@ -3,10 +3,14 @@ import fs from 'fs'; export async function waitForStreamClose( stream: fs.WriteStream ): Promise { - stream.end(); - return new Promise((resolve) => { - stream.once('finish', () => { - resolve(); - }); + return new Promise((resolve, reject) => { + stream + .once('finish', () => { + resolve(); + }) + .once('error', () => { + reject(); + }); + stream.end(); }); } From fba63b5f2ac9b24ce7cc4cfd2cd6d04a6713478a Mon Sep 17 00:00:00 2001 From: redhoyasa Date: Mon, 31 Oct 2022 16:06:13 +0700 Subject: [PATCH 07/10] remove unused lines --- .../nc-gui/components/smartsheet/Gallery.vue | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/Gallery.vue b/packages/nc-gui/components/smartsheet/Gallery.vue index 5934d87695..cb305b9922 100644 --- a/packages/nc-gui/components/smartsheet/Gallery.vue +++ b/packages/nc-gui/components/smartsheet/Gallery.vue @@ -214,24 +214,20 @@ watch(view, async (nextView) => {
-
+ - +
From df9721b1b838acebe9d8b32e443f764ec8997e27 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 31 Oct 2022 22:59:55 +0800 Subject: [PATCH 08/10] feat(nocodb): add err to reject --- packages/nocodb/src/lib/utils/pluginUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/utils/pluginUtils.ts b/packages/nocodb/src/lib/utils/pluginUtils.ts index d3b8b662a1..e329b628e7 100644 --- a/packages/nocodb/src/lib/utils/pluginUtils.ts +++ b/packages/nocodb/src/lib/utils/pluginUtils.ts @@ -8,8 +8,8 @@ export async function waitForStreamClose( .once('finish', () => { resolve(); }) - .once('error', () => { - reject(); + .once('error', (err) => { + reject(err); }); stream.end(); }); From 81bdd16a84567247ea96d1d31c1443e51c677c60 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Mon, 31 Oct 2022 21:30:04 +0530 Subject: [PATCH 09/10] docs: accessing CI-CD screenshots --- .../content/en/engineering/testing.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/noco-docs/content/en/engineering/testing.md b/packages/noco-docs/content/en/engineering/testing.md index 678af8d15b..8f7236cdfc 100644 --- a/packages/noco-docs/content/en/engineering/testing.md +++ b/packages/noco-docs/content/en/engineering/testing.md @@ -322,4 +322,24 @@ npm run cypress:open # run test script # - quickTest.js -``` \ No newline at end of file +``` + +## Accessing CI-CD CY Screenshots + +1. On Jobs link, click on `Summary` + + +![Screenshot 2022-10-31 at 9 25 23 PM](https://user-images.githubusercontent.com/86527202/199052696-af0bf066-d82f-487a-b487-602f55594fd7.png) + + +2. Click on `Artifacts` + + +![Screenshot 2022-10-31 at 9 26 01 PM](https://user-images.githubusercontent.com/86527202/199052712-04508921-32b1-4926-8291-396c804f7c3b.png) + + +3. Download logs for desired suite + + +![Screenshot 2022-10-31 at 9 26 34 PM](https://user-images.githubusercontent.com/86527202/199052727-9aebbdd1-749e-4bda-ab00-3cdd0e3f48fe.png) + From 597c98a32b26d31e925b051079479aab6fc51504 Mon Sep 17 00:00:00 2001 From: navi Date: Tue, 1 Nov 2022 06:16:55 +0000 Subject: [PATCH 10/10] New translations en.json (Chinese Simplified) --- packages/nc-gui/lang/zh-Hans.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/nc-gui/lang/zh-Hans.json b/packages/nc-gui/lang/zh-Hans.json index de6e3ed112..7d1e4571da 100644 --- a/packages/nc-gui/lang/zh-Hans.json +++ b/packages/nc-gui/lang/zh-Hans.json @@ -106,10 +106,10 @@ "commenter": "评论者", "viewer": "浏览者" }, - "sqlVIew": "SQL View" + "sqlVIew": "SQL 视图" }, "datatype": { - "ID": "ID", + "ID": "编号", "ForeignKey": "外键", "SingleLineText": "单行文本", "LongText": "长文本", @@ -189,7 +189,7 @@ "resetPassword": "重置密码", "teamAndSettings": "团队和设置", "apiDocs": "API 文档", - "importFromAirtable": "Import From Airtable", + "importFromAirtable": "从 Airtable 导入", "generateToken": "Generate Token", "APIsAndSupport": "APIs & Support", "helpCenter": "Help center",