diff --git a/packages/server/src/api/controllers/query/index.ts b/packages/server/src/api/controllers/query/index.ts index f68656086c..fd4842ea75 100644 --- a/packages/server/src/api/controllers/query/index.ts +++ b/packages/server/src/api/controllers/query/index.ts @@ -147,6 +147,7 @@ export async function preview(ctx: any) { parameters, transformer, queryId, + // have to pass down to the thread runner - can't put into context now environmentVariables: envVars, ctx: { user: ctx.user, @@ -233,6 +234,7 @@ async function execute( parameters: enrichedParameters, transformer: query.transformer, queryId: ctx.params.queryId, + // have to pass down to the thread runner - can't put into context now environmentVariables: envVars, ctx: { user: ctx.user, diff --git a/packages/server/src/definitions/automations.ts b/packages/server/src/definitions/automations.ts index d4168c020f..79cbe6e4ac 100644 --- a/packages/server/src/definitions/automations.ts +++ b/packages/server/src/definitions/automations.ts @@ -24,6 +24,7 @@ export interface TriggerOutput { export interface AutomationContext extends AutomationResults { steps: any[] + env?: Record trigger: any } diff --git a/packages/server/src/sdk/app/datasources/datasources.ts b/packages/server/src/sdk/app/datasources/datasources.ts index 3d257650d4..10f9ac889c 100644 --- a/packages/server/src/sdk/app/datasources/datasources.ts +++ b/packages/server/src/sdk/app/datasources/datasources.ts @@ -10,7 +10,7 @@ async function enrichDatasourceWithValues(datasource: Datasource) { const processed = processObjectSync(cloned, env) return { datasource: processed as Datasource, - envVars: env.env as Record, + envVars: env as Record, } } diff --git a/packages/server/src/sdk/app/queries/queries.ts b/packages/server/src/sdk/app/queries/queries.ts index c35b525b2b..ca74eb44b5 100644 --- a/packages/server/src/sdk/app/queries/queries.ts +++ b/packages/server/src/sdk/app/queries/queries.ts @@ -10,7 +10,7 @@ export async function enrichContext( return enrichedQuery } const env = await getEnvironmentVariables() - const parameters = { ...inputs, ...env } + const parameters = { ...inputs, env } // enrich the fields with dynamic parameters for (let key of Object.keys(fields)) { if (fields[key] == null) { diff --git a/packages/server/src/sdk/utils/index.ts b/packages/server/src/sdk/utils/index.ts index 0870eb32d4..03599412a6 100644 --- a/packages/server/src/sdk/utils/index.ts +++ b/packages/server/src/sdk/utils/index.ts @@ -12,5 +12,5 @@ export async function getEnvironmentVariables() { envVars = await environmentVariables.fetchValues(appEnv) } - return { env: envVars } + return envVars } diff --git a/packages/server/src/threads/automation.ts b/packages/server/src/threads/automation.ts index 44951869f4..9355c89794 100644 --- a/packages/server/src/threads/automation.ts +++ b/packages/server/src/threads/automation.ts @@ -16,7 +16,6 @@ import { storeLog } from "../automations/logging" import { Automation, AutomationStep, AutomationStatus } from "@budibase/types" import { LoopStep, - LoopStepType, LoopInput, TriggerOutput, AutomationContext, @@ -26,6 +25,7 @@ import { WorkerCallback } from "./definitions" import { context, logging } from "@budibase/backend-core" import { processObject } from "@budibase/string-templates" import { cloneDeep } from "lodash/fp" +import * as sdkUtils from "../sdk/utils" import env from "../environment" const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId @@ -221,6 +221,8 @@ class Orchestrator { } async execute() { + // this will retrieve from context created at start of thread + this._context.env = await sdkUtils.getEnvironmentVariables() let automation = this._automation let stopped = false let loopStep: AutomationStep | undefined = undefined @@ -474,7 +476,11 @@ export const removeStalled = async (job: Job) => { throw new Error("Unable to execute, event doesn't contain app ID.") } await context.doInAppContext(appId, async () => { - const automationOrchestrator = new Orchestrator(job) - await automationOrchestrator.stopCron("stalled") + const envVars = await sdkUtils.getEnvironmentVariables() + // put into automation thread for whole context + await context.doInEnvironmentContext(envVars, async () => { + const automationOrchestrator = new Orchestrator(job) + await automationOrchestrator.stopCron("stalled") + }) }) }