+ 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 9389c5bd6..57bd5a964 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 14283aff8..7ec2725a7 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 9f9092b39..3f9cedba4 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.
-
-
-### 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
-```
+
+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.
-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).
-
-
+### [Get started with Budibase](https://budibase.com)
----
-
+
## 🎓 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,21 +121,15 @@ 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
@@ -190,10 +137,6 @@ Budibase is open-source, licensed as [GPL v3](https://www.gnu.org/licenses/gpl-3
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 000000000..f3423763a
Binary files /dev/null and b/docs/budibase-0.2.1.tgz differ
diff --git a/docs/index.yaml b/docs/index.yaml
index b05033047..8aa676920 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 fae161a7d..66b24f4e4 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 01d5a09ef..59363fab5 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 d5f9ebee2..d9f838468 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 fa652ed28..6849d2712 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 bce532016..fcb8278ea 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 563b1b419..1a2825a2b 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 774f7ea10..bd9f6543b 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
-
-resources: {}
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: proxy-service
+ port:
+ number: 10000
+
+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 2221ce353..0e8e6f139 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 fb6306c44..5adf226bc 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 2f15b2f55..47199cff4 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 176db9f49..71126a5b1 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 9c6f4956b..12e5f2381 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 000000000..e99fed0d4
--- /dev/null
+++ b/packages/builder/src/components/common/CodeMirrorEditor.svelte
@@ -0,0 +1,159 @@
+
+
+
+
+{#if label}
+
- {#each filteredColumns as { readableBinding }}
-
{#each filteredHelpers as helper}
-