diff --git a/.all-contributorsrc b/.all-contributorsrc index 9841a9047..a0fc11c43 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -103,6 +103,33 @@ "contributions": [ "code" ] + }, + { + "login": "victoriasloan", + "name": "victoriasloan", + "avatar_url": "https://avatars.githubusercontent.com/u/9913651?v=4", + "profile": "https://github.com/victoriasloan", + "contributions": [ + "code" + ] + }, + { + "login": "yashank09", + "name": "yashank09", + "avatar_url": "https://avatars.githubusercontent.com/u/37672190?v=4", + "profile": "https://github.com/yashank09", + "contributions": [ + "code" + ] + }, + { + "login": "SOVLOOKUP", + "name": "SOVLOOKUP", + "avatar_url": "https://avatars.githubusercontent.com/u/53158137?v=4", + "profile": "https://github.com/SOVLOOKUP", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/.github/workflows/budibase_ci.yml b/.github/workflows/budibase_ci.yml index e03768a42..bd10833f9 100644 --- a/.github/workflows/budibase_ci.yml +++ b/.github/workflows/budibase_ci.yml @@ -34,3 +34,14 @@ jobs: CI: true name: Budibase CI - run: yarn test:e2e:ci + + - name: Build and Push Staging Docker Image + # Only run on push + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + run: | + docker login -u $DOCKER_USER -p $DOCKER_PASSWORD + yarn build:docker:staging + env: + DOCKER_USER: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} + diff --git a/README.md b/README.md index 2cc352607..7aa5146b9 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,10 @@ Watch "releases" of this repo to get notified of major updates, and give the sta

+### 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/master/CONTRIBUTING.md#troubleshooting) to clear down your environment. @@ -107,6 +111,8 @@ Budibase wants to make sure anyone can use the tools we develop and we know a lo Currently, you can host your apps using Docker or Digital Ocean. The documentation for self-hosting can be found [here](https://docs.budibase.com/self-hosting/introduction-to-self-hosting). +[![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/droplets/new?onboarding_origin=marketplace&i=09038e&fleetUuid=bb04f9c8-1de8-4687-b2ae-1d5177a0535b&appId=77729671&type=applications&size=s-4vcpu-8gb®ion=nyc1&refcode=0caaa6085a82&image=budibase-20-04) + ## 🎓 Learning Budibase @@ -154,6 +160,7 @@ If you have a question or would like to talk with other Budibase users, please h ![Discord Shield](https://discordapp.com/api/guilds/733030666647765003/widget.png?style=shield) + ## Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): @@ -174,6 +181,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
pngwn

💻 ⚠️
HugoLd

💻 +
victoriasloan

💻 +
yashank09

💻 +
SOVLOOKUP

💻 diff --git a/hosting/scripts/linux/release-to-docker-hub.sh b/hosting/scripts/linux/release-to-docker-hub.sh index b1921916e..1661fed9f 100755 --- a/hosting/scripts/linux/release-to-docker-hub.sh +++ b/hosting/scripts/linux/release-to-docker-hub.sh @@ -1,9 +1,15 @@ #!/bin/bash + +tag=$1 +tag=${tag:-latest} + pushd ../../build docker-compose build --force app-service docker-compose build --force worker-service -docker tag build_app-service budibase/budibase-apps:latest + +docker tag build_app-service budibase/budibase-apps:$tag +docker tag build_worker-service budibase/budibase-worker:$tag + docker push budibase/budibase-apps -docker tag build_worker-service budibase/budibase-worker:latest docker push budibase/budibase-worker popd diff --git a/hosting/update.sh b/hosting/update.sh new file mode 100644 index 000000000..3ccd5e59d --- /dev/null +++ b/hosting/update.sh @@ -0,0 +1 @@ +docker-compose --env-file hosting.properties pull && ./start.sh diff --git a/package.json b/package.json index 37efca51b..037e9c4b1 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "format": "prettier --write \"{,!(node_modules)/**/}*.{js,jsx,svelte}\"", "test:e2e": "lerna run cy:test", "test:e2e:ci": "lerna run cy:ci", - "build:docker": "cd hosting/scripts/linux/ && ./release-to-docker-hub.sh && cd -" + "build:docker": "cd hosting/scripts/linux/ && ./release-to-docker-hub.sh && cd -", + "build:docker:staging": "cd hosting/scripts/linux/ && ./release-to-docker-hub.sh staging && cd -" } } diff --git a/packages/builder/package.json b/packages/builder/package.json index 440215d65..f8a2f6b60 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -74,6 +74,7 @@ "codemirror": "^5.59.0", "d3-selection": "^1.4.1", "deepmerge": "^4.2.2", + "downloadjs": "^1.4.7", "fast-sort": "^2.2.0", "lodash": "^4.17.13", "posthog-js": "1.4.5", diff --git a/packages/builder/src/analytics.js b/packages/builder/src/analytics.js index f59d71ac3..c68f228c1 100644 --- a/packages/builder/src/analytics.js +++ b/packages/builder/src/analytics.js @@ -106,6 +106,16 @@ function highlightFeedbackIcon() { return isFeedbackTimeElapsed(firstRunStr) } +// Opt In/Out +const ifAnalyticsEnabled = func => () => { + if (analyticsEnabled && process.env.POSTHOG_TOKEN) { + return func() + } +} +const disabled = () => posthog.has_opted_out_capturing() +const optIn = () => posthog.opt_in_capturing() +const optOut = () => posthog.opt_out_capturing() + export default { activate, identify, @@ -115,4 +125,7 @@ export default { requestFeedbackOnDeploy, submitFeedback, highlightFeedbackIcon, + disabled: ifAnalyticsEnabled(disabled), + optIn: ifAnalyticsEnabled(optIn), + optOut: ifAnalyticsEnabled(optOut), } diff --git a/packages/builder/src/builderStore/dataBinding.js b/packages/builder/src/builderStore/dataBinding.js index 022e78c63..679a77ca2 100644 --- a/packages/builder/src/builderStore/dataBinding.js +++ b/packages/builder/src/builderStore/dataBinding.js @@ -2,6 +2,7 @@ import { cloneDeep } from "lodash/fp" import { get } from "svelte/store" import { backendUiStore, store } from "builderStore" import { findAllMatchingComponents, findComponentPath } from "./storeUtils" +import { TableNames } from "../constants" // Regex to match all instances of template strings const CAPTURE_VAR_INSIDE_TEMPLATE = /{{([^}]+)}}/g @@ -114,6 +115,37 @@ export const getContextBindings = (rootComponent, componentId) => { }) }) }) + + // Add logged in user bindings + const tables = get(backendUiStore).tables + const userTable = tables.find(table => table._id === TableNames.USERS) + const schema = { + ...userTable.schema, + _id: { type: "string" }, + _rev: { type: "string" }, + } + const keys = Object.keys(schema).sort() + keys.forEach(key => { + const fieldSchema = schema[key] + // Replace certain bindings with a new property to help display components + let runtimeBoundKey = key + if (fieldSchema.type === "link") { + runtimeBoundKey = `${key}_count` + } else if (fieldSchema.type === "attachment") { + runtimeBoundKey = `${key}_first` + } + + contextBindings.push({ + type: "context", + runtimeBinding: `user.${runtimeBoundKey}`, + readableBinding: `Current User.${key}`, + fieldSchema, + providerId: "user", + tableId: TableNames.USERS, + field: key, + }) + }) + return contextBindings } diff --git a/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte b/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte index 8855fb689..50e734687 100644 --- a/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte +++ b/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte @@ -43,6 +43,7 @@ {#if selectedRole} - + {/if} +
Analytics
+

+ If you would like to send analytics that help us make budibase better, + please let us know below. +

+ diff --git a/packages/builder/src/pages/[application]/deploy/index.svelte b/packages/builder/src/pages/[application]/deploy/index.svelte index c1f081f57..d7e75e9a8 100644 --- a/packages/builder/src/pages/[application]/deploy/index.svelte +++ b/packages/builder/src/pages/[application]/deploy/index.svelte @@ -17,6 +17,18 @@ $: appId = $store.appId async function deployApp() { + // Must have cloud or self host API key to deploy + if (!$hostingStore.hostingInfo?.selfHostKey) { + const response = await api.get(`/api/keys/`) + const userKeys = await response.json() + if (!userKeys.budibase) { + notifier.danger( + "No budibase API Keys configured. You must set either a self hosted or cloud API key to deploy your budibase app." + ) + } + return + } + const DEPLOY_URL = `/api/deploy` try { diff --git a/packages/builder/src/pages/index.svelte b/packages/builder/src/pages/index.svelte index fcf0f5af5..5aa99be35 100644 --- a/packages/builder/src/pages/index.svelte +++ b/packages/builder/src/pages/index.svelte @@ -1,9 +1,10 @@
Welcome to the Budibase Beta - +
+ + + +