diff --git a/.github/workflows/budibase_ci.yml b/.github/workflows/budibase_ci.yml index 1bc1915a71..2e22e76ac6 100644 --- a/.github/workflows/budibase_ci.yml +++ b/.github/workflows/budibase_ci.yml @@ -108,7 +108,7 @@ jobs: - name: Pull testcontainers images run: | docker pull testcontainers/ryuk:0.5.1 & - docker pull budibase/couchdb:v3.2.1-sqs & + docker pull budibase/couchdb:v3.3.3 & docker pull redis & wait $(jobs -p) @@ -162,17 +162,23 @@ jobs: node-version: 20.x cache: yarn + - name: Load dotenv + id: dotenv + uses: falti/dotenv-action@v1.1.3 + with: + path: ./packages/server/datasource-sha.env + - name: Pull testcontainers images run: | - docker pull mcr.microsoft.com/mssql/server:2022-CU13-ubuntu-22.04 & - docker pull mysql:8.3 & - docker pull postgres:16.1-bullseye & - docker pull mongo:7.0-jammy & - docker pull mariadb:lts & - docker pull testcontainers/ryuk:0.5.1 & - docker pull budibase/couchdb:v3.2.1-sqs & + docker pull mcr.microsoft.com/mssql/server@${{ steps.dotenv.outputs.MSSQL_SHA }} & + docker pull mysql@${{ steps.dotenv.outputs.MYSQL_SHA }} & + docker pull postgres@${{ steps.dotenv.outputs.POSTGRES_SHA }} & + docker pull mongo@${{ steps.dotenv.outputs.MONGODB_SHA }} & + docker pull mariadb@${{ steps.dotenv.outputs.MARIADB_SHA }} & docker pull minio/minio & docker pull redis & + docker pull testcontainers/ryuk:0.5.1 & + docker pull budibase/couchdb:v3.3.3 & wait $(jobs -p) diff --git a/globalSetup.ts b/globalSetup.ts index dd1454b6e1..aa1cb00fe1 100644 --- a/globalSetup.ts +++ b/globalSetup.ts @@ -46,7 +46,7 @@ export default async function setup() { await killContainers(containers) try { - const couchdb = new GenericContainer("budibase/couchdb:v3.2.1-sqs") + const couchdb = new GenericContainer("budibase/couchdb:v3.3.3") .withExposedPorts(5984, 4984) .withEnvironment({ COUCHDB_PASSWORD: "budibase", diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte index 8a9d1e59ea..677ee79981 100644 --- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte +++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte @@ -58,6 +58,7 @@ AutomationEventType, AutomationStepType, AutomationActionStepId, + AutomationCustomIOType, } from "@budibase/types" import { FIELDS } from "constants/backend" import PropField from "./PropField.svelte" @@ -394,7 +395,9 @@ */ const onRowTriggerUpdate = async update => { if ( - ["tableId", "filters", "meta"].some(key => Object.hasOwn(update, key)) + ["tableId", AutomationCustomIOType.FILTERS, "meta"].some(key => + Object.hasOwn(update, key) + ) ) { try { let updatedAutomation @@ -744,7 +747,11 @@ for (let [key, field] of properties) { // need to look for the builder definition (keyed separately, see saveFilters) const defKey = `${key}-def` - if (field.customType === "filters" && inputs?.[defKey]) { + if ( + (field.customType === AutomationCustomIOType.FILTERS || + field.customType === AutomationCustomIOType.TRIGGER_FILTER) && + inputs?.[defKey] + ) { filters = inputs[defKey] break } @@ -846,7 +853,7 @@ - {#if value.customType === "trigger_filter"} + {#if value.customType === AutomationCustomIOType.TRIGGER_FILTER} @@ -977,7 +984,7 @@ {/if} - {:else if value.customType === "filters" || value.customType === "trigger_filter"} + {:else if value.customType === AutomationCustomIOType.FILTERS || value.customType === AutomationCustomIOType.TRIGGER_FILTER} {filters.length > 0 ? "Update Filter" diff --git a/packages/server/datasource-sha.env b/packages/server/datasource-sha.env new file mode 100644 index 0000000000..9b935ed8eb --- /dev/null +++ b/packages/server/datasource-sha.env @@ -0,0 +1,5 @@ +MSSQL_SHA=sha256:c4369c38385eba011c10906dc8892425831275bb035d5ce69656da8e29de50d8 +MYSQL_SHA=sha256:9de9d54fecee6253130e65154b930978b1fcc336bcc86dfd06e89b72a2588ebe +POSTGRES_SHA=sha256:bd0d8e485d1aca439d39e5ea99b931160bd28d862e74c786f7508e9d0053090e +MONGODB_SHA=sha256:afa36bca12295b5f9dae68a493c706113922bdab520e901bd5d6c9d7247a1d8d +MARIADB_SHA=sha256:e59ba8783bf7bc02a4779f103bb0d8751ac0e10f9471089709608377eded7aa8 diff --git a/packages/server/src/automations/triggerInfo/rowSaved.ts b/packages/server/src/automations/triggerInfo/rowSaved.ts index a178e2c7e8..d128934dcc 100644 --- a/packages/server/src/automations/triggerInfo/rowSaved.ts +++ b/packages/server/src/automations/triggerInfo/rowSaved.ts @@ -25,7 +25,7 @@ export const definition: AutomationTriggerSchema = { }, filters: { type: AutomationIOType.OBJECT, - customType: AutomationCustomIOType.FILTERS, + customType: AutomationCustomIOType.TRIGGER_FILTER, title: "Filtering", }, }, diff --git a/packages/server/src/integrations/tests/utils/images.ts b/packages/server/src/integrations/tests/utils/images.ts new file mode 100644 index 0000000000..8c2bb9b220 --- /dev/null +++ b/packages/server/src/integrations/tests/utils/images.ts @@ -0,0 +1,13 @@ +import dotenv from "dotenv" +import { join } from "path" + +const path = join(__dirname, "..", "..", "..", "..", "datasource-sha.env") +dotenv.config({ + path, +}) + +export const MSSQL_IMAGE = `mcr.microsoft.com/mssql/server@${process.env.MSSQL_SHA}` +export const MYSQL_IMAGE = `mysql@${process.env.MYSQL_SHA}` +export const POSTGRES_IMAGE = `postgres@${process.env.POSTGRES_SHA}` +export const MONGODB_IMAGE = `mongo@${process.env.MONGODB_SHA}` +export const MARIADB_IMAGE = `mariadb@${process.env.MARIADB_SHA}` diff --git a/packages/server/src/integrations/tests/utils/index.ts b/packages/server/src/integrations/tests/utils/index.ts index b888f1adc1..8e317d9099 100644 --- a/packages/server/src/integrations/tests/utils/index.ts +++ b/packages/server/src/integrations/tests/utils/index.ts @@ -1,3 +1,4 @@ +import "./images" import { Datasource, SourceName } from "@budibase/types" import * as postgres from "./postgres" import * as mongodb from "./mongodb" @@ -67,7 +68,11 @@ export async function knexClient(ds: Datasource) { export async function startContainer(container: GenericContainer) { const imageName = (container as any).imageName.string as string - const key = imageName.replaceAll("/", "-").replaceAll(":", "-") + let key: string = imageName + if (imageName.includes("@sha256")) { + key = imageName.split("@")[0] + } + key = key.replaceAll("/", "-").replaceAll(":", "-") container = container .withReuse() diff --git a/packages/server/src/integrations/tests/utils/mariadb.ts b/packages/server/src/integrations/tests/utils/mariadb.ts index 3a90b554ee..529ac0b76b 100644 --- a/packages/server/src/integrations/tests/utils/mariadb.ts +++ b/packages/server/src/integrations/tests/utils/mariadb.ts @@ -4,6 +4,7 @@ import { AbstractWaitStrategy } from "testcontainers/build/wait-strategies/wait- import { generator, testContainerUtils } from "@budibase/backend-core/tests" import { startContainer } from "." import { knexClient } from "./mysql" +import { MARIADB_IMAGE } from "./images" let ports: Promise @@ -27,7 +28,7 @@ class MariaDBWaitStrategy extends AbstractWaitStrategy { export async function getDatasource(): Promise { if (!ports) { ports = startContainer( - new GenericContainer("mariadb:lts") + new GenericContainer(MARIADB_IMAGE) .withExposedPorts(3306) .withEnvironment({ MARIADB_ROOT_PASSWORD: "password" }) .withWaitStrategy(new MariaDBWaitStrategy()) diff --git a/packages/server/src/integrations/tests/utils/mongodb.ts b/packages/server/src/integrations/tests/utils/mongodb.ts index 0bdbb2808c..a62d895042 100644 --- a/packages/server/src/integrations/tests/utils/mongodb.ts +++ b/packages/server/src/integrations/tests/utils/mongodb.ts @@ -2,13 +2,14 @@ import { generator, testContainerUtils } from "@budibase/backend-core/tests" import { Datasource, SourceName } from "@budibase/types" import { GenericContainer, Wait } from "testcontainers" import { startContainer } from "." +import { MONGODB_IMAGE } from "./images" let ports: Promise export async function getDatasource(): Promise { if (!ports) { ports = startContainer( - new GenericContainer("mongo:7.0-jammy") + new GenericContainer(MONGODB_IMAGE) .withExposedPorts(27017) .withEnvironment({ MONGO_INITDB_ROOT_USERNAME: "mongo", diff --git a/packages/server/src/integrations/tests/utils/mssql.ts b/packages/server/src/integrations/tests/utils/mssql.ts index ed94477814..709ebb9439 100644 --- a/packages/server/src/integrations/tests/utils/mssql.ts +++ b/packages/server/src/integrations/tests/utils/mssql.ts @@ -3,15 +3,14 @@ import { GenericContainer, Wait } from "testcontainers" import { generator, testContainerUtils } from "@budibase/backend-core/tests" import { startContainer } from "." import knex from "knex" +import { MSSQL_IMAGE } from "./images" let ports: Promise export async function getDatasource(): Promise { if (!ports) { ports = startContainer( - new GenericContainer( - "mcr.microsoft.com/mssql/server:2022-CU13-ubuntu-22.04" - ) + new GenericContainer(MSSQL_IMAGE) .withExposedPorts(1433) .withEnvironment({ ACCEPT_EULA: "Y", diff --git a/packages/server/src/integrations/tests/utils/mysql.ts b/packages/server/src/integrations/tests/utils/mysql.ts index c35be0689e..68e591837b 100644 --- a/packages/server/src/integrations/tests/utils/mysql.ts +++ b/packages/server/src/integrations/tests/utils/mysql.ts @@ -4,6 +4,7 @@ import { AbstractWaitStrategy } from "testcontainers/build/wait-strategies/wait- import { generator, testContainerUtils } from "@budibase/backend-core/tests" import { startContainer } from "." import knex from "knex" +import { MYSQL_IMAGE } from "./images" let ports: Promise @@ -30,7 +31,7 @@ class MySQLWaitStrategy extends AbstractWaitStrategy { export async function getDatasource(): Promise { if (!ports) { ports = startContainer( - new GenericContainer("mysql:8.3") + new GenericContainer(MYSQL_IMAGE) .withExposedPorts(3306) .withEnvironment({ MYSQL_ROOT_PASSWORD: "password" }) .withWaitStrategy(new MySQLWaitStrategy().withStartupTimeout(10000)) diff --git a/packages/server/src/integrations/tests/utils/postgres.ts b/packages/server/src/integrations/tests/utils/postgres.ts index 74f5722737..bf8d76e39d 100644 --- a/packages/server/src/integrations/tests/utils/postgres.ts +++ b/packages/server/src/integrations/tests/utils/postgres.ts @@ -3,13 +3,14 @@ import { GenericContainer, Wait } from "testcontainers" import { generator, testContainerUtils } from "@budibase/backend-core/tests" import { startContainer } from "." import knex from "knex" +import { POSTGRES_IMAGE } from "./images" let ports: Promise export async function getDatasource(): Promise { if (!ports) { ports = startContainer( - new GenericContainer("postgres:16.1-bullseye") + new GenericContainer(POSTGRES_IMAGE) .withExposedPorts(5432) .withEnvironment({ POSTGRES_PASSWORD: "password" }) .withWaitStrategy(