diff --git a/charts/budibase/templates/app-service-deployment.yaml b/charts/budibase/templates/app-service-deployment.yaml
index f72d1aef03..d71ee6e178 100644
--- a/charts/budibase/templates/app-service-deployment.yaml
+++ b/charts/budibase/templates/app-service-deployment.yaml
@@ -79,7 +79,11 @@ spec:
- name: MINIO_URL
value: {{ .Values.services.objectStore.url }}
- name: PLUGIN_BUCKET_NAME
- value: {{ .Values.services.objectStore.pluginBucketName | default "plugins" | quote }}
+ value: {{ .Values.services.objectStore.pluginBucketName | quote }}
+ - name: APPS_BUCKET_NAME
+ value: {{ .Values.services.objectStore.appsBucketName | quote }}
+ - name: GLOBAL_CLOUD_BUCKET_NAME
+ value: {{ .Values.services.objectStore.globalBucketName | quote }}
- name: PORT
value: {{ .Values.services.apps.port | quote }}
{{ if .Values.services.worker.publicApiRateLimitPerSecond }}
diff --git a/charts/budibase/templates/worker-service-deployment.yaml b/charts/budibase/templates/worker-service-deployment.yaml
index b1c6110d95..ffcda1ab72 100644
--- a/charts/budibase/templates/worker-service-deployment.yaml
+++ b/charts/budibase/templates/worker-service-deployment.yaml
@@ -78,7 +78,11 @@ spec:
- name: MINIO_URL
value: {{ .Values.services.objectStore.url }}
- name: PLUGIN_BUCKET_NAME
- value: {{ .Values.services.objectStore.pluginBucketName | default "plugins" | quote }}
+ value: {{ .Values.services.objectStore.pluginBucketName | quote }}
+ - name: APPS_BUCKET_NAME
+ value: {{ .Values.services.objectStore.appsBucketName | quote }}
+ - name: GLOBAL_CLOUD_BUCKET_NAME
+ value: {{ .Values.services.objectStore.globalBucketName | quote }}
- name: PORT
value: {{ .Values.services.worker.port | quote }}
- name: MULTI_TENANCY
diff --git a/hosting/proxy/80-listen-on-ipv6-by-default.sh b/hosting/proxy/80-listen-on-ipv6-by-default.sh
new file mode 100644
index 0000000000..1d62732ea1
--- /dev/null
+++ b/hosting/proxy/80-listen-on-ipv6-by-default.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+ME=$(basename $0)
+NGINX_CONF_FILE="/etc/nginx/nginx.conf"
+DEFAULT_CONF_FILE="/etc/nginx/conf.d/default.conf"
+
+# check if we have ipv6 available
+if [ ! -f "/proc/net/if_inet6" ]; then
+ # ipv6 not available so delete lines from nginx conf
+ if [ -f "$NGINX_CONF_FILE" ]; then
+ sed -i '/listen \[::\]/d' $NGINX_CONF_FILE
+ fi
+ if [ -f "$DEFAULT_CONF_FILE" ]; then
+ sed -i '/listen \[::\]/d' $DEFAULT_CONF_FILE
+ fi
+ echo "$ME: info: ipv6 not available so delete lines from nginx conf"
+else
+ echo "$ME: info: ipv6 is available so no need to delete lines from nginx conf"
+fi
+
+exit 0
\ No newline at end of file
diff --git a/hosting/proxy/Dockerfile b/hosting/proxy/Dockerfile
index 5fd0dc7d11..68e8134750 100644
--- a/hosting/proxy/Dockerfile
+++ b/hosting/proxy/Dockerfile
@@ -5,7 +5,12 @@ FROM nginx:latest
# override the output dir to output directly to /etc/nginx instead of /etc/nginx/conf.d
ENV NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx
COPY .generated-nginx.prod.conf /etc/nginx/templates/nginx.conf.template
-COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
+
+# IPv6 removal needs to happen after envsubst
+RUN rm -rf /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
+COPY 80-listen-on-ipv6-by-default.sh /docker-entrypoint.d/80-listen-on-ipv6-by-default.sh
+RUN chmod +x /docker-entrypoint.d/80-listen-on-ipv6-by-default.sh
+
# Error handling
COPY error.html /usr/share/nginx/html/error.html
diff --git a/hosting/single/runner.sh b/hosting/single/runner.sh
index 6770d27ee0..a95c21a98f 100644
--- a/hosting/single/runner.sh
+++ b/hosting/single/runner.sh
@@ -18,6 +18,7 @@ declare -a DOCKER_VARS=("APP_PORT" "APPS_URL" "ARCHITECTURE" "BUDIBASE_ENVIRONME
[[ -z "${WORKER_URL}" ]] && export WORKER_URL=http://localhost:4002
[[ -z "${APPS_URL}" ]] && export APPS_URL=http://localhost:4001
# export CUSTOM_DOMAIN=budi001.custom.com
+
# Azure App Service customisations
if [[ "${TARGETBUILD}" = "aas" ]]; then
DATA_DIR=/home
@@ -27,6 +28,13 @@ else
DATA_DIR=${DATA_DIR:-/data}
fi
+# Mount NFS or GCP Filestore if env vars exist for it
+if [[ -z ${FILESHARE_IP} && -z ${FILESHARE_NAME} ]]; then
+ echo "Mount file share ${FILESHARE_IP}:/${FILESHARE_NAME} to ${DATA_DIR}"
+ mount -o nolock ${FILESHARE_IP}:/${FILESHARE_NAME} ${DATA_DIR}
+ echo "Mounting completed."
+fi
+
if [ -f "${DATA_DIR}/.env" ]; then
# Read in the .env file and export the variables
for LINE in $(cat ${DATA_DIR}/.env); do export $LINE; done
diff --git a/lerna.json b/lerna.json
index 46f9ab99b5..249ae6885e 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "2.0.30-alpha.17",
+ "version": "2.0.34-alpha.1",
"npmClient": "yarn",
"packages": [
"packages/*"
diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json
index e87c5ce602..6d9ea76a66 100644
--- a/packages/backend-core/package.json
+++ b/packages/backend-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/backend-core",
- "version": "2.0.30-alpha.17",
+ "version": "2.0.34-alpha.1",
"description": "Budibase backend core libraries used in server and worker",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
@@ -20,7 +20,7 @@
"test:watch": "jest --watchAll"
},
"dependencies": {
- "@budibase/types": "2.0.30-alpha.17",
+ "@budibase/types": "2.0.34-alpha.1",
"@shopify/jest-koa-mocks": "5.0.1",
"@techpass/passport-openidconnect": "0.3.2",
"aws-sdk": "2.1030.0",
diff --git a/packages/backend-core/src/redis/redlock.ts b/packages/backend-core/src/redis/redlock.ts
index abb13b2534..586302c9b1 100644
--- a/packages/backend-core/src/redis/redlock.ts
+++ b/packages/backend-core/src/redis/redlock.ts
@@ -55,7 +55,12 @@ export const doWithLock = async (opts: LockOptions, task: any) => {
let lock
try {
// aquire lock
- let name: string = `${tenancy.getTenantId()}_${opts.name}`
+ let name: string
+ if (opts.systemLock) {
+ name = opts.name
+ } else {
+ name = `${tenancy.getTenantId()}_${opts.name}`
+ }
if (opts.nameSuffix) {
name = name + `_${opts.nameSuffix}`
}
diff --git a/packages/bbui/package.json b/packages/bbui/package.json
index f36b8363a5..8deaa4aaa8 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.0.30-alpha.17",
+ "version": "2.0.34-alpha.1",
"license": "MPL-2.0",
"svelte": "src/index.js",
"module": "dist/bbui.es.js",
@@ -38,7 +38,7 @@
],
"dependencies": {
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
- "@budibase/string-templates": "2.0.30-alpha.17",
+ "@budibase/string-templates": "2.0.34-alpha.1",
"@spectrum-css/actionbutton": "^1.0.1",
"@spectrum-css/actiongroup": "^1.0.1",
"@spectrum-css/avatar": "^3.0.2",
diff --git a/packages/builder/package.json b/packages/builder/package.json
index a44773b11f..9bd800e205 100644
--- a/packages/builder/package.json
+++ b/packages/builder/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/builder",
- "version": "2.0.30-alpha.17",
+ "version": "2.0.34-alpha.1",
"license": "GPL-3.0",
"private": true,
"scripts": {
@@ -71,10 +71,10 @@
}
},
"dependencies": {
- "@budibase/bbui": "2.0.30-alpha.17",
- "@budibase/client": "2.0.30-alpha.17",
- "@budibase/frontend-core": "2.0.30-alpha.17",
- "@budibase/string-templates": "2.0.30-alpha.17",
+ "@budibase/bbui": "2.0.34-alpha.1",
+ "@budibase/client": "2.0.34-alpha.1",
+ "@budibase/frontend-core": "2.0.34-alpha.1",
+ "@budibase/string-templates": "2.0.34-alpha.1",
"@sentry/browser": "5.19.1",
"@spectrum-css/page": "^3.0.1",
"@spectrum-css/vars": "^3.0.1",
diff --git a/packages/builder/src/components/backend/DataTable/Table.svelte b/packages/builder/src/components/backend/DataTable/Table.svelte
index 85b271dee8..adc35a333d 100644
--- a/packages/builder/src/components/backend/DataTable/Table.svelte
+++ b/packages/builder/src/components/backend/DataTable/Table.svelte
@@ -8,6 +8,7 @@
import CreateEditRow from "./modals/CreateEditRow.svelte"
import CreateEditUser from "./modals/CreateEditUser.svelte"
import CreateEditColumn from "./modals/CreateEditColumn.svelte"
+ import { cloneDeep } from "lodash/fp"
import {
TableNames,
UNEDITABLE_USER_FIELDS,
@@ -110,7 +111,7 @@
}
const editColumn = field => {
- editableColumn = schema?.[field]
+ editableColumn = cloneDeep(schema?.[field])
if (editableColumn) {
editColumnModal.show()
}
diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte
index b7249ad60c..dce6df6d0d 100644
--- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte
+++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte
@@ -488,7 +488,7 @@
]}
getOptionLabel={option => option.label}
getOptionValue={option => option.value}
- tooltip="Dynamic formula are calculated when retrieved, but cannot be filtered,
+ tooltip="Dynamic formula are calculated when retrieved, but cannot be filtered or sorted by,
while static formula are calculated when the row is saved."
/>
{/if}
diff --git a/packages/builder/src/components/design/settings/componentSettings.js b/packages/builder/src/components/design/settings/componentSettings.js
index c3b81968f4..441993fe1c 100644
--- a/packages/builder/src/components/design/settings/componentSettings.js
+++ b/packages/builder/src/components/design/settings/componentSettings.js
@@ -7,6 +7,7 @@ import TableSelect from "./controls/TableSelect.svelte"
import ColorPicker from "./controls/ColorPicker.svelte"
import { IconSelect } from "./controls/IconSelect"
import FieldSelect from "./controls/FieldSelect.svelte"
+import SortableFieldSelect from "./controls/SortableFieldSelect.svelte"
import MultiFieldSelect from "./controls/MultiFieldSelect.svelte"
import SearchFieldSelect from "./controls/SearchFieldSelect.svelte"
import SchemaSelect from "./controls/SchemaSelect.svelte"
@@ -41,6 +42,7 @@ const componentMap = {
filter: FilterEditor,
url: URLSelect,
columns: ColumnEditor,
+ "field/sortable": SortableFieldSelect,
"field/string": FormFieldSelect,
"field/number": FormFieldSelect,
"field/options": FormFieldSelect,
diff --git a/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte b/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte
new file mode 100644
index 0000000000..21ed68ce68
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte
@@ -0,0 +1,47 @@
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/manage/plugins/index.svelte b/packages/builder/src/pages/builder/portal/manage/plugins/index.svelte
index 84722c27be..b9b84307a8 100644
--- a/packages/builder/src/pages/builder/portal/manage/plugins/index.svelte
+++ b/packages/builder/src/pages/builder/portal/manage/plugins/index.svelte
@@ -55,7 +55,7 @@
Add plugin
- {#if filteredPlugins?.length}
+ {#if $plugins?.length}