+ Current Handlebars syntax is invalid, please check the guide + here + for more details. +
+ {/if} +- Current Handlebars syntax is invalid, please check the guide - here - for more details. -
- {/if} +diff --git a/.github/workflows/release-develop.yml b/.github/workflows/release-develop.yml index 9389c5bd66..57bd5a9640 100644 --- a/.github/workflows/release-develop.yml +++ b/.github/workflows/release-develop.yml @@ -9,7 +9,6 @@ env: POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }} INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }} POSTHOG_URL: ${{ secrets.POSTHOG_URL }} - SENTRY_DSN: ${{ secrets.SENTRY_DSN_SELF_HOST }} jobs: release: diff --git a/.github/workflows/release-selfhost.yml b/.github/workflows/release-selfhost.yml index 14283aff8f..7ec2725a7f 100644 --- a/.github/workflows/release-selfhost.yml +++ b/.github/workflows/release-selfhost.yml @@ -7,7 +7,6 @@ env: POSTHOG_TOKEN: ${{ secrets.POSTHOG_TOKEN }} INTERCOM_TOKEN: ${{ secrets.INTERCOM_TOKEN }} POSTHOG_URL: ${{ secrets.POSTHOG_URL }} - SENTRY_DSN: ${{ secrets.SENTRY_DSN_SELF_HOST }} jobs: release: diff --git a/README.md b/README.md index 9f9092b399..3f9cedba4f 100644 --- a/README.md +++ b/README.md @@ -8,18 +8,19 @@
- Budibase is an open-source low-code platform, helping developers and IT professionals build, automate, and ship internal tools on their own infrastructure in minutes. + Budibase is an open source low-code platform, and the easiest way to build internal tools that improve productivity.
- +
@@ -65,68 +66,25 @@
- **Admin paradise.** Budibase is made to scale. With Budibase, you can self-host on your own infrastructure and globally manage users, onboarding, SMTP, apps, groups, theming and more. You can also provide users/groups with an app portal and disseminate user-management to the group manager.
-
- Current Handlebars syntax is invalid, please check the guide
- here
- for more details.
-
+ Current Handlebars syntax is invalid, please check the guide
+ here
+ for more details.
+
-
----
-
-
+
## 🏁 Get started
-Currently there are two ways to get started with Budibase; Digital Ocean, and Docker.
+
+
+
+Deploy Budibase self-Hosted in your existing infrastructure, using Docker, Kubernetes, and Digital Ocean.
+Or use Budibase Cloud if you don't need to self-host, and would like to get started quickly.
+
+### [Get started with Budibase](https://budibase.com)
+
+
-### Get started with Digital Ocean
-The easiest and quickest way to get started, is to use Digital Ocean:
-1-click Digital Ocean deploy
-
-
-
-
-
-
-### Get started with Docker
-To get started, you must have docker and docker compose installed on your machine.
-Once you have Docker installed, the process takes 5 minutes, with these four steps:
-
-1. Install the Budibase CLI.
-
-```
-$ npm i -g @budibase/cli
-```
-
-
-2. Setup Budibase (select where to store Budibase, and the port to run it on)
-
-```
-budi hosting --init
-```
-
-
-3. Run Budibase
-
-```
-budi hosting --start
-```
-
-
-4. Create your admin user
-
-Enter the email and password for the new admin user.
-
-Done! You are now ready to build powerful internal tools in minutes. For additional information on how to get started and learn Budibase, visit our [docs](https://docs.budibase.com/getting-started).
-
-
-
----
-
-
-
## 🎓 Learning Budibase
The Budibase documentation [lives here](https://docs.budibase.com).
----
@@ -134,22 +92,17 @@ The Budibase documentation [lives here](https://docs.budibase.com).
If you have a question or would like to talk with other Budibase users and join our community, please hop over to [Github discussions](https://github.com/Budibase/budibase/discussions)
-
+
-
-
----
-
-
## ❗ Code of conduct
Budibase is dedicated to providing a welcoming, diverse, and harrassment-free experience for everyone. We expect everyone in the Budibase community to abide by our [**Code of Conduct**](https://github.com/Budibase/budibase/blob/HEAD/.github/CODE_OF_CONDUCT.md). Please read it.
----
-
+
+
## 🙌 Contributing to Budibase
@@ -168,32 +121,22 @@ Budibase is a monorepo managed by lerna. Lerna manages the building and publishi
- [packages/server](https://github.com/Budibase/budibase/tree/HEAD/packages/server) - The budibase server. This Koa app is responsible for serving the JS for the builder and budibase apps, as well as providing the API for interaction with the database and file system.
For more information, see [CONTRIBUTING.md](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md)
-
-
----
+
## 📝 License
Budibase is open-source, licensed as [GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html). The client and component libraries are licensed as [MPL](https://directory.fsf.org/wiki/License:MPL-2.0) - so the apps that you build can be licensed however you like.
+
----
-
-
-
-
## ⭐ Stargazers over time
[![Stargazers over time](https://starchart.cc/Budibase/budibase.svg)](https://starchart.cc/Budibase/budibase)
If you are having issues between updates of the builder, please use the guide [here](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md#troubleshooting) to clear down your environment.
-
-
----
-
## Contributors ✨
diff --git a/docs/budibase-0.2.1.tgz b/docs/budibase-0.2.1.tgz
new file mode 100644
index 0000000000..f3423763a5
Binary files /dev/null and b/docs/budibase-0.2.1.tgz differ
diff --git a/docs/index.yaml b/docs/index.yaml
index b050330477..8aa6769207 100644
--- a/docs/index.yaml
+++ b/docs/index.yaml
@@ -3,7 +3,7 @@ entries:
budibase:
- apiVersion: v2
appVersion: 0.9.163
- created: "2021-10-12T21:58:00.515555+01:00"
+ created: "2021-10-18T16:25:04.374924613+01:00"
dependencies:
- condition: services.couchdb.enabled
name: couchdb
@@ -13,7 +13,35 @@ entries:
name: ingress-nginx
repository: https://github.com/kubernetes/ingress-nginx
version: 3.35.0
- description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes.
+ description: Budibase is an open source low-code platform, helping thousands of
+ teams build apps for their workplace in minutes.
+ digest: ebac6d8631cc38b266c3689508b5123f5afc395f23bdb02738be26c7cae0b0b5
+ keywords:
+ - low-code
+ - database
+ - cluster
+ name: budibase
+ sources:
+ - https://github.com/Budibase/budibase
+ - https://budibase.com
+ type: application
+ urls:
+ - https://budibase.github.io/budibase/budibase-0.2.1.tgz
+ version: 0.2.1
+ - apiVersion: v2
+ appVersion: 0.9.163
+ created: "2021-10-18T16:25:04.36936805+01:00"
+ dependencies:
+ - condition: services.couchdb.enabled
+ name: couchdb
+ repository: https://apache.github.io/couchdb-helm
+ version: 3.3.4
+ - condition: ingress.nginx
+ name: ingress-nginx
+ repository: https://github.com/kubernetes/ingress-nginx
+ version: 3.35.0
+ description: Budibase is an open source low-code platform, helping thousands of
+ teams build apps for their workplace in minutes.
digest: f369536c0eac1f6959d51e8ce6d74a87a7a9df29ae84fb9cbed0a273ab77429b
keywords:
- low-code
@@ -29,7 +57,7 @@ entries:
version: 0.2.0
- apiVersion: v2
appVersion: 0.9.56
- created: "2021-10-12T21:58:00.512062+01:00"
+ created: "2021-10-18T16:25:04.36360616+01:00"
dependencies:
- condition: services.couchdb.enabled
name: couchdb
@@ -38,7 +66,8 @@ entries:
- name: ingress-nginx
repository: https://github.com/kubernetes/ingress-nginx
version: 3.35.0
- description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes.
+ description: Budibase is an open source low-code platform, helping thousands of
+ teams build apps for their workplace in minutes.
digest: 8dc4f2ed4d98cad5adf25936aefea680042d3e4e17832f846b961fd8708ad192
keywords:
- low-code
@@ -54,7 +83,7 @@ entries:
version: 0.1.1
- apiVersion: v2
appVersion: 0.9.56
- created: "2021-10-12T21:58:00.507257+01:00"
+ created: "2021-10-18T16:25:04.354504201+01:00"
dependencies:
- condition: services.couchdb.enabled
name: couchdb
@@ -63,7 +92,8 @@ entries:
- name: ingress-nginx
repository: https://github.com/kubernetes/ingress-nginx
version: 3.35.0
- description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes.
+ description: Budibase is an open source low-code platform, helping thousands of
+ teams build apps for their workplace in minutes.
digest: 08031b0803cce0eff64472e569d454d9176119c8207aa9873a9c95ee66cc7d3f
keywords:
- low-code
@@ -77,4 +107,4 @@ entries:
urls:
- https://budibase.github.io/budibase/budibase-0.1.0.tgz
version: 0.1.0
-generated: "2021-10-12T21:58:00.503447+01:00"
+generated: "2021-10-18T16:25:04.346266269+01:00"
diff --git a/hosting/docker-compose.yaml b/hosting/docker-compose.yaml
index fae161a7d5..66b24f4e49 100644
--- a/hosting/docker-compose.yaml
+++ b/hosting/docker-compose.yaml
@@ -21,7 +21,7 @@ services:
PORT: 4002
JWT_SECRET: ${JWT_SECRET}
LOG_LEVEL: info
- SENTRY_DSN: https://cc54bb0358fd4300ae97ef2273fbaf9f@o420233.ingest.sentry.io/6007553
+ SENTRY_DSN: https://a34ae347621946bf8acded18e5b7d4b8@o420233.ingest.sentry.io/5338131
ENABLE_ANALYTICS: "true"
REDIS_URL: redis-service:6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
@@ -48,10 +48,10 @@ services:
COUCH_DB_USERNAME: ${COUCH_DB_USER}
COUCH_DB_PASSWORD: ${COUCH_DB_PASSWORD}
COUCH_DB_URL: http://${COUCH_DB_USER}:${COUCH_DB_PASSWORD}@couchdb-service:5984
+ SENTRY_DSN: https://a34ae347621946bf8acded18e5b7d4b8@o420233.ingest.sentry.io/5338131
INTERNAL_API_KEY: ${INTERNAL_API_KEY}
REDIS_URL: redis-service:6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
- ACCOUNT_PORTAL_URL: https://portal.budi.live
volumes:
- ./logs:/logs
depends_on:
diff --git a/hosting/envoy.dev.yaml.hbs b/hosting/envoy.dev.yaml.hbs
index 01d5a09efa..59363fab5e 100644
--- a/hosting/envoy.dev.yaml.hbs
+++ b/hosting/envoy.dev.yaml.hbs
@@ -41,6 +41,7 @@ static_resources:
- match: { prefix: "/api/" }
route:
cluster: server-dev
+ timeout: 120s
- match: { prefix: "/app_" }
route:
diff --git a/hosting/envoy.yaml b/hosting/envoy.yaml
index d5f9ebee28..d9f8384688 100644
--- a/hosting/envoy.yaml
+++ b/hosting/envoy.yaml
@@ -58,6 +58,7 @@ static_resources:
- match: { prefix: "/api/" }
route:
cluster: app-service
+ timeout: 120s
- match: { prefix: "/worker/" }
route:
diff --git a/hosting/kubernetes/budibase/Chart.yaml b/hosting/kubernetes/budibase/Chart.yaml
index fa652ed28f..6849d2712c 100644
--- a/hosting/kubernetes/budibase/Chart.yaml
+++ b/hosting/kubernetes/budibase/Chart.yaml
@@ -22,7 +22,7 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
-version: 0.2.0
+version: 0.2.1
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
diff --git a/hosting/kubernetes/budibase/templates/app-service-deployment.yaml b/hosting/kubernetes/budibase/templates/app-service-deployment.yaml
index bce532016a..fcb8278ea5 100644
--- a/hosting/kubernetes/budibase/templates/app-service-deployment.yaml
+++ b/hosting/kubernetes/budibase/templates/app-service-deployment.yaml
@@ -73,11 +73,15 @@ spec:
name: {{ template "budibase.fullname" . }}
key: objectStoreSecret
- name: MINIO_URL
+ {{ if .Values.services.objectStore.url }}
value: {{ .Values.services.objectStore.url }}
+ {{ else }}
+ value: http://minio-service:{{ .Values.services.objectStore.port }}
+ {{ end }}
- name: PORT
value: {{ .Values.services.apps.port | quote }}
- name: MULTI_TENANCY
- value: "1"
+ value: {{ .Values.globals.multiTenancy | quote }}
- name: REDIS_PASSWORD
value: {{ .Values.services.redis.password }}
- name: REDIS_URL
diff --git a/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml b/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml
index 563b1b4193..1a2825a2b5 100644
--- a/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml
+++ b/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml
@@ -70,11 +70,15 @@ spec:
name: {{ template "budibase.fullname" . }}
key: objectStoreSecret
- name: MINIO_URL
+ {{ if .Values.services.objectStore.url }}
value: {{ .Values.services.objectStore.url }}
+ {{ else }}
+ value: http://minio-service:{{ .Values.services.objectStore.port }}
+ {{ end }}
- name: PORT
value: {{ .Values.services.worker.port | quote }}
- name: MULTI_TENANCY
- value: "1"
+ value: {{ .Values.globals.multiTenancy | quote }}
- name: REDIS_PASSWORD
value: {{ .Values.services.redis.password | quote }}
- name: REDIS_URL
@@ -85,6 +89,8 @@ spec:
{{ end }}
- name: SELF_HOSTED
value: {{ .Values.globals.selfHosted | quote }}
+ - name: SENTRY_DSN
+ value: {{ .Values.globals.sentryDSN }}
- name: ACCOUNT_PORTAL_URL
value: {{ .Values.globals.accountPortalUrl | quote }}
- name: ACCOUNT_PORTAL_API_KEY
diff --git a/hosting/kubernetes/budibase/values.yaml b/hosting/kubernetes/budibase/values.yaml
index 774f7ea102..bd9f6543b3 100644
--- a/hosting/kubernetes/budibase/values.yaml
+++ b/hosting/kubernetes/budibase/values.yaml
@@ -24,10 +24,12 @@ serviceAccount:
podAnnotations: {}
-podSecurityContext: {}
+podSecurityContext:
+ {}
# fsGroup: 2000
-securityContext: {}
+securityContext:
+ {}
# capabilities:
# drop:
# - ALL
@@ -42,23 +44,24 @@ service:
ingress:
enabled: false
aws: false
- nginx: true
- certificateArn: ""
+ nginx: true
+ certificateArn: ""
className: ""
- annotations:
+ annotations:
kubernetes.io/ingress.class: nginx
hosts:
- host: # change if using custom domain
paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: proxy-service
- port:
- number: 10000
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: proxy-service
+ port:
+ number: 10000
-resources: {}
+resources:
+ {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
@@ -89,10 +92,11 @@ globals:
sentryDSN: ""
posthogToken: ""
logLevel: info
- selfHosted: ""
- accountPortalUrl: ""
+ selfHosted: "1" # set to 0 for budibase cloud environment, set to 1 for self-hosted setup
+ multiTenancy: "0" # set to 0 to disable multiple orgs, set to 1 to enable multiple orgs
+ accountPortalUrl: ""
accountPortalApiKey: ""
- cookieDomain: ""
+ cookieDomain: ""
platformUrl: ""
createSecrets: true # creates an internal API key, JWT secrets and redis password for you
@@ -128,7 +132,7 @@ services:
# password: "" # only change if pointing to existing couch server
port: 5984
storage: 100Mi
-
+
redis:
enabled: true # disable if using external redis
port: 6379
@@ -136,7 +140,7 @@ services:
url: "" # only change if pointing to existing redis cluster and enabled: false
password: "budibase" # recommended to override if using built-in redis
storage: 100Mi
-
+
objectStore:
minio: true
browser: true
@@ -147,4 +151,3 @@ services:
region: "" # AWS_REGION if using S3 or existing minio secret
url: "" # only change if pointing to existing minio cluster and minio: false
storage: 100Mi
-
diff --git a/lerna.json b/lerna.json
index 2221ce3534..0e8e6f1390 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "0.9.167-alpha.2",
+ "version": "0.9.169-alpha.10",
"npmClient": "yarn",
"packages": [
"packages/*"
diff --git a/packages/auth/package.json b/packages/auth/package.json
index fb6306c442..5adf226bc6 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/auth",
- "version": "0.9.167-alpha.2",
+ "version": "0.9.169-alpha.10",
"description": "Authentication middlewares for budibase builder and apps",
"main": "src/index.js",
"author": "Budibase",
diff --git a/packages/bbui/package.json b/packages/bbui/package.json
index 2f15b2f551..47199cff4b 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": "0.9.167-alpha.2",
+ "version": "0.9.169-alpha.10",
"license": "AGPL-3.0",
"svelte": "src/index.js",
"module": "dist/bbui.es.js",
diff --git a/packages/bbui/src/Form/Core/DatePicker.svelte b/packages/bbui/src/Form/Core/DatePicker.svelte
index 176db9f497..71126a5b13 100644
--- a/packages/bbui/src/Form/Core/DatePicker.svelte
+++ b/packages/bbui/src/Form/Core/DatePicker.svelte
@@ -31,7 +31,11 @@
const handleChange = event => {
const [dates] = event.detail
- dispatch("change", dates[0])
+ let newValue = dates[0]
+ if (newValue) {
+ newValue = newValue.toISOString()
+ }
+ dispatch("change", newValue)
}
const clearDateOnBackspace = event => {
@@ -57,11 +61,38 @@
const els = document.querySelectorAll(`#${flatpickrId} input`)
els.forEach(el => el.blur())
}
+
+ const parseDate = val => {
+ if (!val) {
+ return null
+ }
+ let date
+ if (val instanceof Date) {
+ // Use real date obj if already parsed
+ date = val
+ } else if (isNaN(val)) {
+ // Treat as date string of some sort
+ date = new Date(val)
+ } else {
+ // Treat as numerical timestamp
+ date = new Date(parseInt(val))
+ }
+ const time = date.getTime()
+ if (isNaN(time)) {
+ return null
+ }
+ // By rounding to the nearest second we avoid locking up in an endless
+ // loop in the builder, caused by potentially enriching {{ now }} to every
+ // millisecond.
+ return new Date(Math.floor(time / 1000) * 1000)
+ }
+
+ $: console.log(value)
field.type === schema.type
)
+
const label = path == null ? column : `${path}.0.${column}`
// only supply a description for relationship paths
const description =
diff --git a/packages/builder/src/components/backend/DataTable/modals/FilterModal.svelte b/packages/builder/src/components/backend/DataTable/modals/FilterModal.svelte
index 9c6f4956b0..12e5f23814 100644
--- a/packages/builder/src/components/backend/DataTable/modals/FilterModal.svelte
+++ b/packages/builder/src/components/backend/DataTable/modals/FilterModal.svelte
@@ -82,34 +82,30 @@
function isMultipleChoice(field) {
return (
- (viewTable.schema[field].constraints &&
- viewTable.schema[field].constraints.inclusion &&
- viewTable.schema[field].constraints.inclusion.length) ||
- viewTable.schema[field].type === "boolean"
+ viewTable.schema[field]?.constraints?.inclusion?.length ||
+ viewTable.schema[field]?.type === "boolean"
)
}
function fieldOptions(field) {
- return viewTable.schema[field].type === "options"
- ? viewTable.schema[field].constraints.inclusion
+ return viewTable.schema[field]?.type === "options"
+ ? viewTable.schema[field]?.constraints.inclusion
: [true, false]
}
function isDate(field) {
- return viewTable.schema[field].type === "datetime"
+ return viewTable.schema[field]?.type === "datetime"
}
function isNumber(field) {
- return viewTable.schema[field].type === "number"
+ return viewTable.schema[field]?.type === "number"
}
const fieldChanged = filter => ev => {
- // reset if type changed
- if (
- filter.key &&
- ev.detail &&
- viewTable.schema[filter.key].type !== viewTable.schema[ev.detail].type
- ) {
+ // Reset if type changed
+ const oldType = viewTable.schema[filter.key]?.type
+ const newType = viewTable.schema[ev.detail]?.type
+ if (filter.key && ev.detail && oldType !== newType) {
filter.value = ""
}
}
diff --git a/packages/builder/src/components/common/CodeMirrorEditor.svelte b/packages/builder/src/components/common/CodeMirrorEditor.svelte
new file mode 100644
index 0000000000..e99fed0d41
--- /dev/null
+++ b/packages/builder/src/components/common/CodeMirrorEditor.svelte
@@ -0,0 +1,159 @@
+
+
+
+
+{#if label}
+
- {#each filteredColumns as { readableBinding }}
-
{#each filteredHelpers as helper}
-