diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 07df3bd427..b3b2b01316 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -71,3 +71,57 @@ jobs:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}
BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }}
+
+ - name: Configure AWS Credentials
+ uses: aws-actions/configure-aws-credentials@v1
+ with:
+ aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws-region: eu-west-1
+
+ - name: Tag and release Proxy service docker image
+ run: |
+ docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
+ yarn build:docker:proxy:preprod
+ docker tag proxy-service budibase/proxy:$PREPROD_TAG
+ docker push budibase/proxy:$PREPROD_TAG
+ env:
+ DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
+ DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }}
+ PREPROD_TAG: k8s-preprod
+
+ - name: Pull values.yaml from budibase-infra
+ run: |
+ curl -H "Authorization: token ${{ secrets.GH_PERSONAL_TOKEN }}" \
+ -H 'Accept: application/vnd.github.v3.raw' \
+ -o values.preprod.yaml \
+ -L https://api.github.com/repos/budibase/budibase-infra/contents/kubernetes/budibase-preprod/values.yaml
+ wc -l values.preprod.yaml
+
+ - name: Deploy to Preprod Environment
+ uses: glopezep/helm@v1.7.1
+ with:
+ release: budibase-preprod
+ namespace: budibase
+ chart: charts/budibase
+ token: ${{ github.token }}
+ helm: helm3
+ values: |
+ globals:
+ appVersion: ${{ steps.previoustag.outputs.tag }}
+ ingress:
+ enabled: true
+ nginx: true
+ value-files: >-
+ [
+ "values.preprod.yaml"
+ ]
+ env:
+ KUBECONFIG_FILE: '${{ secrets.PREPROD_KUBECONFIG }}'
+
+ - name: Discord Webhook Action
+ uses: tsickert/discord-webhook@v4.0.0
+ with:
+ webhook-url: ${{ secrets.PROD_DEPLOY_WEBHOOK_URL }}
+ content: "Preprod Deployment Complete: ${{ steps.previoustag.outputs.tag }} deployed to Budibase Pre-prod."
+ embed-title: ${{ steps.previoustag.outputs.tag }}
diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte
index ef0a61646e..0829b85a90 100644
--- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte
+++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte
@@ -48,10 +48,6 @@
$automationStore.selectedAutomation?.automation?.definition?.steps.length +
1
- $: hasCompletedInputs = Object.keys(
- block.schema?.inputs?.properties || {}
- ).every(x => block?.inputs[x])
-
$: loopingSelected =
$automationStore.selectedAutomation?.automation.definition.steps.find(
x => x.blockToLoop === block.id
@@ -290,13 +286,7 @@
- actionModal.show()}
- disabled={!hasCompletedInputs}
- hoverable
- name="AddCircle"
- size="S"
-/>
+ actionModal.show()} hoverable name="AddCircle" size="S" />
{#if isTrigger ? totalBlocks > 1 : blockIdx !== totalBlocks - 2}
{/if}
diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
index 856ab5f31a..4333e4a2e5 100644
--- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
@@ -25,11 +25,11 @@
import QueryParamSelector from "./QueryParamSelector.svelte"
import CronBuilder from "./CronBuilder.svelte"
import Editor from "components/integration/QueryEditor.svelte"
- import { debounce } from "lodash"
import ModalBindableInput from "components/common/bindings/ModalBindableInput.svelte"
import FilterDrawer from "components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterDrawer.svelte"
import { LuceneUtils } from "@budibase/frontend-core"
import { getSchemaForTable } from "builderStore/dataBinding"
+ import { Utils } from "@budibase/frontend-core"
export let block
export let testData
@@ -54,7 +54,7 @@
$: schema = getSchemaForTable(tableId, { searchableSchema: true }).schema
$: schemaFields = Object.values(schema || {})
- const onChange = debounce(async function (e, key) {
+ const onChange = Utils.sequential(async (e, key) => {
try {
if (isTestModal) {
// Special case for webhook, as it requires a body, but the schema already brings back the body's contents
@@ -82,7 +82,7 @@
} catch (error) {
notifications.error("Error saving automation")
}
- }, 800)
+ })
function getAvailableBindings(block, automation) {
if (!block || !automation) {
@@ -226,6 +226,7 @@
on:change={e => onChange(e, key)}
{bindings}
fillWidth
+ updateOnChange={false}
/>
{:else}
onChange(e, key)}
{bindings}
allowJS={false}
+ updateOnChange={false}
/>
{/if}
{:else if value.customType === "query"}
@@ -310,6 +312,7 @@
type={value.customType}
on:change={e => onChange(e, key)}
{bindings}
+ updateOnChange={false}
/>
{:else}
@@ -321,6 +324,7 @@
value={inputData[key]}
on:change={e => onChange(e, key)}
{bindings}
+ updateOnChange={false}
/>
{/if}
diff --git a/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte b/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte
index 971a9cc51b..f91cd62bed 100644
--- a/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte
@@ -43,6 +43,11 @@
}
const coerce = (value, type) => {
+ const re = new RegExp(/{{([^{].*?)}}/g)
+ if (re.test(value)) {
+ return value
+ }
+
if (type === "boolean") {
if (typeof value === "boolean") {
return value
@@ -120,6 +125,7 @@
{bindings}
fillWidth={true}
allowJS={true}
+ updateOnChange={false}
/>
{/if}
{:else if !rowControl}
@@ -137,6 +143,7 @@
{bindings}
fillWidth={true}
allowJS={true}
+ updateOnChange={false}
/>
{/if}
{/if}
diff --git a/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte b/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte
index 2a51e8d200..f66df3a9b1 100644
--- a/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte
@@ -60,5 +60,6 @@
{bindings}
fillWidth={true}
allowJS={true}
+ updateOnChange={false}
/>
{/if}
diff --git a/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte b/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte
index 71b10a3569..cb80072694 100644
--- a/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/SchemaSetup.svelte
@@ -30,6 +30,10 @@
label: "DateTime",
value: "datetime",
},
+ {
+ label: "Array",
+ value: "array",
+ },
]
function addField() {
@@ -70,6 +74,7 @@
secondary
placeholder="Enter field name"
on:change={fieldNameChanged(field.name)}
+ updateOnChange={false}
/>