veryfront 0.1.96 → 0.1.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/deno.js +1 -1
- package/esm/src/jobs/runtime-env.d.ts +5 -0
- package/esm/src/jobs/runtime-env.d.ts.map +1 -0
- package/esm/src/jobs/runtime-env.js +101 -0
- package/esm/src/rendering/page-rendering.d.ts +8 -0
- package/esm/src/rendering/page-rendering.d.ts.map +1 -1
- package/esm/src/rendering/page-rendering.js +29 -18
- package/esm/src/task/runner.d.ts.map +1 -1
- package/esm/src/task/runner.js +2 -6
- package/esm/src/utils/version.d.ts +1 -1
- package/esm/src/utils/version.js +1 -1
- package/esm/src/workflow/executor/workflow-executor.d.ts.map +1 -1
- package/esm/src/workflow/executor/workflow-executor.js +7 -1
- package/esm/src/workflow/types.d.ts +1 -0
- package/esm/src/workflow/types.d.ts.map +1 -1
- package/esm/src/workflow/worker/dynamic-job-entrypoint.d.ts.map +1 -1
- package/esm/src/workflow/worker/dynamic-job-entrypoint.js +18 -1
- package/esm/src/workflow/worker/job-entrypoint.d.ts.map +1 -1
- package/esm/src/workflow/worker/job-entrypoint.js +18 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/jobs/runtime-env.ts +132 -0
- package/src/src/rendering/page-rendering.ts +64 -39
- package/src/src/task/runner.ts +2 -8
- package/src/src/utils/version.ts +1 -1
- package/src/src/workflow/executor/workflow-executor.ts +7 -1
- package/src/src/workflow/types.ts +1 -0
- package/src/src/workflow/worker/dynamic-job-entrypoint.ts +19 -1
- package/src/src/workflow/worker/job-entrypoint.ts +19 -1
package/esm/deno.js
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
|
|
2
|
+
export declare function readInjectedProjectEnv(allEnv: Record<string, string>): Record<string, string>;
|
|
3
|
+
export declare function buildTaskContextEnv(allEnv: Record<string, string>, envAllowlist?: string[]): Record<string, string>;
|
|
4
|
+
export declare function mergeInjectedWorkflowEnv(existingEnv: Record<string, string> | undefined, allEnv: Record<string, string>): Record<string, string> | undefined;
|
|
5
|
+
//# sourceMappingURL=runtime-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-env.d.ts","sourceRoot":"","sources":["../../../src/src/jobs/runtime-env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAyDhE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BxB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOpC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { logger as baseLogger } from "../utils/index.js";
|
|
2
|
+
const logger = baseLogger.component("job-runtime-env");
|
|
3
|
+
export const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
|
|
4
|
+
const UNSAFE_INJECTED_ENV_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
5
|
+
const HIDDEN_TASK_CONTEXT_ENV_KEYS = new Set([
|
|
6
|
+
"VERYFRONT_API_TOKEN",
|
|
7
|
+
"VERYFRONT_API_URL",
|
|
8
|
+
"VERYFRONT_PROJECT_API_URL",
|
|
9
|
+
"VERYFRONT_API_BASE_URL",
|
|
10
|
+
"VERYFRONT_PROJECT_ID",
|
|
11
|
+
"VERYFRONT_PROJECT_SLUG",
|
|
12
|
+
"VERYFRONT_BRANCH_REF",
|
|
13
|
+
"VERYFRONT_API_USER",
|
|
14
|
+
"VERYFRONT_API_PASS",
|
|
15
|
+
"VERYFRONT_JOB_RESULT_PATH",
|
|
16
|
+
INJECTED_TASK_ENV_JSON,
|
|
17
|
+
]);
|
|
18
|
+
const DISALLOWED_INJECTED_ENV_KEYS = new Set([
|
|
19
|
+
"VERYFRONT_API_TOKEN",
|
|
20
|
+
"VERYFRONT_API_URL",
|
|
21
|
+
"VERYFRONT_PROJECT_API_URL",
|
|
22
|
+
"VERYFRONT_API_BASE_URL",
|
|
23
|
+
"VERYFRONT_PROJECT_ID",
|
|
24
|
+
"VERYFRONT_PROJECT_SLUG",
|
|
25
|
+
"VERYFRONT_BRANCH_REF",
|
|
26
|
+
"VERYFRONT_API_USER",
|
|
27
|
+
"VERYFRONT_API_PASS",
|
|
28
|
+
"VERYFRONT_JOB_RESULT_PATH",
|
|
29
|
+
INJECTED_TASK_ENV_JSON,
|
|
30
|
+
]);
|
|
31
|
+
function isHiddenTaskContextEnvKey(key) {
|
|
32
|
+
return key.startsWith("TENANT_") || HIDDEN_TASK_CONTEXT_ENV_KEYS.has(key);
|
|
33
|
+
}
|
|
34
|
+
function isDisallowedInjectedEnvKey(key) {
|
|
35
|
+
return key.startsWith("TENANT_") || DISALLOWED_INJECTED_ENV_KEYS.has(key);
|
|
36
|
+
}
|
|
37
|
+
function filterExistingProjectEnv(env) {
|
|
38
|
+
const filtered = {};
|
|
39
|
+
for (const [key, value] of Object.entries(env ?? {})) {
|
|
40
|
+
if (UNSAFE_INJECTED_ENV_KEYS.has(key) ||
|
|
41
|
+
isDisallowedInjectedEnvKey(key) ||
|
|
42
|
+
typeof value !== "string") {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
filtered[key] = value;
|
|
46
|
+
}
|
|
47
|
+
return filtered;
|
|
48
|
+
}
|
|
49
|
+
export function readInjectedProjectEnv(allEnv) {
|
|
50
|
+
const raw = allEnv[INJECTED_TASK_ENV_JSON];
|
|
51
|
+
if (!raw) {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(raw);
|
|
56
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
const injectedEnv = Object.create(null);
|
|
60
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
61
|
+
if (UNSAFE_INJECTED_ENV_KEYS.has(key) ||
|
|
62
|
+
isDisallowedInjectedEnvKey(key) ||
|
|
63
|
+
typeof value !== "string") {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
injectedEnv[key] = value;
|
|
67
|
+
}
|
|
68
|
+
return injectedEnv;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
logger.warn(`Ignoring invalid ${INJECTED_TASK_ENV_JSON}`);
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function buildTaskContextEnv(allEnv, envAllowlist) {
|
|
76
|
+
const allowlistedEnvKeys = envAllowlist ? new Set(envAllowlist) : null;
|
|
77
|
+
const env = {};
|
|
78
|
+
for (const [key, value] of Object.entries(allEnv)) {
|
|
79
|
+
if (isHiddenTaskContextEnvKey(key)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
env[key] = value;
|
|
86
|
+
}
|
|
87
|
+
for (const [key, value] of Object.entries(readInjectedProjectEnv(allEnv))) {
|
|
88
|
+
if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
env[key] = value;
|
|
92
|
+
}
|
|
93
|
+
return env;
|
|
94
|
+
}
|
|
95
|
+
export function mergeInjectedWorkflowEnv(existingEnv, allEnv) {
|
|
96
|
+
const mergedEnv = {
|
|
97
|
+
...filterExistingProjectEnv(existingEnv),
|
|
98
|
+
...readInjectedProjectEnv(allEnv),
|
|
99
|
+
};
|
|
100
|
+
return Object.keys(mergedEnv).length > 0 ? mergedEnv : undefined;
|
|
101
|
+
}
|
|
@@ -6,6 +6,14 @@ interface MDXPageResult {
|
|
|
6
6
|
pageBundle: PageBundle;
|
|
7
7
|
collectedMetadata: Record<string, unknown>;
|
|
8
8
|
}
|
|
9
|
+
interface PreparedMDXPageBundles {
|
|
10
|
+
pageBundle: PageBundle;
|
|
11
|
+
serverModuleCode: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function prepareMDXPageBundles(pageInfo: EntityInfo, projectDir: string, options?: {
|
|
14
|
+
precompiledModule?: string;
|
|
15
|
+
studioEmbed?: boolean;
|
|
16
|
+
}): Promise<PreparedMDXPageBundles>;
|
|
9
17
|
export declare function handleMDXPage(pageInfo: EntityInfo, slug: string, projectDir: string, mergedComponents: MDXComponents, _compileMDX: (content: string, frontmatter?: Record<string, unknown>, filePath?: string) => Promise<MdxBundle>, adapter: RuntimeAdapter, options?: {
|
|
10
18
|
params?: Record<string, string | string[]>;
|
|
11
19
|
precompiledModule?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,UAAU,sBAAsB;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,sBAAsB,CAAC,CA4CjC;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,CAgFxB"}
|
|
@@ -5,28 +5,39 @@ import { getProjectReact } from "../react/index.js";
|
|
|
5
5
|
import { compileContent } from "../transforms/mdx/compiler/index.js";
|
|
6
6
|
import { ensureError, getErrorMessage } from "../errors/veryfront-error.js";
|
|
7
7
|
import { withSpan } from "../observability/tracing/otlp-setup.js";
|
|
8
|
+
export async function prepareMDXPageBundles(pageInfo, projectDir, options) {
|
|
9
|
+
const { frontmatter, content, path } = pageInfo.entity;
|
|
10
|
+
const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
|
|
11
|
+
const ssrBundle = await compileContent("development", projectDir, content, fmArg, path, "server", undefined, options?.studioEmbed);
|
|
12
|
+
const pageBundle = ssrBundle;
|
|
13
|
+
if (options?.precompiledModule) {
|
|
14
|
+
pageBundle.clientModuleCode = options.precompiledModule;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const browserBundle = await compileContent("development", projectDir, content, fmArg, path, "browser", undefined, options?.studioEmbed);
|
|
18
|
+
pageBundle.clientModuleCode = browserBundle.compiledCode;
|
|
19
|
+
}
|
|
20
|
+
const clientModuleCode = pageBundle.clientModuleCode;
|
|
21
|
+
if (!clientModuleCode) {
|
|
22
|
+
throw RENDER_ERROR.create({
|
|
23
|
+
detail: "MDX compilation produced no client module code",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
pageBundle,
|
|
28
|
+
serverModuleCode: ssrBundle.compiledCode,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
8
31
|
export function handleMDXPage(pageInfo, slug, projectDir, mergedComponents, _compileMDX, adapter, options) {
|
|
9
32
|
return withSpan("rendering.handleMDXPage", async () => {
|
|
10
|
-
const { frontmatter,
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
33
|
+
const { frontmatter, path } = pageInfo.entity;
|
|
34
|
+
const { pageBundle, serverModuleCode } = await prepareMDXPageBundles(pageInfo, projectDir, {
|
|
35
|
+
precompiledModule: options?.precompiledModule,
|
|
36
|
+
studioEmbed: options?.studioEmbed,
|
|
37
|
+
});
|
|
14
38
|
let collectedMetadata = {};
|
|
15
39
|
try {
|
|
16
|
-
|
|
17
|
-
pageBundle.clientModuleCode = options.precompiledModule;
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
const browserBundle = await compileContent("development", projectDir, content, fmArg, path, "browser", undefined, options?.studioEmbed);
|
|
21
|
-
pageBundle.clientModuleCode = browserBundle.compiledCode;
|
|
22
|
-
}
|
|
23
|
-
const clientModuleCode = pageBundle.clientModuleCode;
|
|
24
|
-
if (!clientModuleCode) {
|
|
25
|
-
throw RENDER_ERROR.create({
|
|
26
|
-
detail: "MDX compilation produced no client module code",
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
const mod = (await mdxRenderer.loadModuleESM(clientModuleCode, adapter, options?.projectId, projectDir, options?.projectSlug, options?.contentSourceId));
|
|
40
|
+
const mod = (await mdxRenderer.loadModuleESM(serverModuleCode, adapter, options?.projectId, projectDir, options?.projectSlug, options?.contentSourceId));
|
|
30
41
|
const MDXComp = mod.MDXContent || mod.default;
|
|
31
42
|
if (!MDXComp) {
|
|
32
43
|
throw RENDER_ERROR.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/src/task/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/src/task/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,IAAI,EAAE,cAAc,CAAC;IAErB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAkC7E"}
|
package/esm/src/task/runner.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { logger as baseLogger } from "../utils/index.js";
|
|
8
8
|
import { env as getProcessEnv } from "../platform/compat/process.js";
|
|
9
|
+
import { buildTaskContextEnv } from "../jobs/runtime-env.js";
|
|
9
10
|
const logger = baseLogger.component("task-runner");
|
|
10
11
|
/**
|
|
11
12
|
* Run a task with the given options
|
|
@@ -17,12 +18,7 @@ export async function runTask(options) {
|
|
|
17
18
|
logger.info(`Running task "${task.id}" (${task.name})`);
|
|
18
19
|
}
|
|
19
20
|
const allEnv = getProcessEnv();
|
|
20
|
-
const env = envAllowlist
|
|
21
|
-
? Object.fromEntries(envAllowlist.flatMap((k) => {
|
|
22
|
-
const value = allEnv[k];
|
|
23
|
-
return value === undefined ? [] : [[k, value]];
|
|
24
|
-
}))
|
|
25
|
-
: { ...allEnv };
|
|
21
|
+
const env = buildTaskContextEnv(allEnv, envAllowlist);
|
|
26
22
|
const ctx = {
|
|
27
23
|
env,
|
|
28
24
|
config,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.97";
|
|
2
2
|
export declare function normalizeVeryfrontVersion(version: string | undefined): string | undefined;
|
|
3
3
|
export declare function resolveRuntimeVersion(options?: {
|
|
4
4
|
veryfrontVersion?: string;
|
package/esm/src/utils/version.js
CHANGED
|
@@ -2,7 +2,7 @@ import denoConfig from "../../deno.js";
|
|
|
2
2
|
import { getEnv } from "../platform/compat/process.js";
|
|
3
3
|
// Keep in sync with deno.json version.
|
|
4
4
|
// scripts/release.ts updates this constant during releases.
|
|
5
|
-
export const VERSION = "0.1.
|
|
5
|
+
export const VERSION = "0.1.97";
|
|
6
6
|
export function normalizeVeryfrontVersion(version) {
|
|
7
7
|
if (!version)
|
|
8
8
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/executor/workflow-executor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAKV,kBAAkB,EAElB,WAAW,EACX,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/executor/workflow-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ import { INVALID_ARGUMENT, ORCHESTRATION_ERROR, RESOURCE_NOT_FOUND, TIMEOUT_ERRO
|
|
|
10
10
|
import { generateId, parseDuration } from "../types.js";
|
|
11
11
|
import { hasLockSupport } from "../backends/types.js";
|
|
12
12
|
import { getCurrentRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
13
|
+
import { env as getProcessEnv } from "../../platform/compat/process.js";
|
|
14
|
+
import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
|
|
13
15
|
import { DAGExecutor } from "./dag-executor.js";
|
|
14
16
|
import { CheckpointManager } from "./checkpoint-manager.js";
|
|
15
17
|
import { runWithWorkflowTenant, StepExecutor } from "./step-executor.js";
|
|
@@ -113,6 +115,7 @@ export class WorkflowExecutor {
|
|
|
113
115
|
releaseId: requestCtx.releaseId ?? null,
|
|
114
116
|
}
|
|
115
117
|
: undefined;
|
|
118
|
+
const injectedProjectEnv = mergeInjectedWorkflowEnv(undefined, getProcessEnv());
|
|
116
119
|
const run = {
|
|
117
120
|
id: options?.runId ?? generateId("run"),
|
|
118
121
|
workflowId,
|
|
@@ -121,7 +124,10 @@ export class WorkflowExecutor {
|
|
|
121
124
|
input,
|
|
122
125
|
nodeStates: {},
|
|
123
126
|
currentNodes: [],
|
|
124
|
-
context: {
|
|
127
|
+
context: {
|
|
128
|
+
input,
|
|
129
|
+
...(injectedProjectEnv ? { env: injectedProjectEnv } : {}),
|
|
130
|
+
},
|
|
125
131
|
checkpoints: [],
|
|
126
132
|
pendingApprovals: [],
|
|
127
133
|
createdAt: new Date(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/workflow/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/workflow/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/dynamic-job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"dynamic-job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/dynamic-job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiLjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iCAAiC;IAChD,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAchC"}
|
|
@@ -26,9 +26,11 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
28
28
|
import { getEnv } from "../../platform/compat/process.js";
|
|
29
|
+
import { env as getProcessEnv } from "../../platform/compat/process.js";
|
|
29
30
|
import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
30
31
|
import { enhanceAdapterWithFS } from "../../platform/adapters/fs/integration.js";
|
|
31
32
|
import { denoAdapter } from "../../platform/adapters/runtime/deno/index.js";
|
|
33
|
+
import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
|
|
32
34
|
import { discoverWorkflows } from "../discovery/index.js";
|
|
33
35
|
import { WorkflowExecutor } from "../executor/workflow-executor.js";
|
|
34
36
|
const logger = baseLogger.component("dynamic-job");
|
|
@@ -83,11 +85,26 @@ export async function runDynamicWorkflowJob(config) {
|
|
|
83
85
|
}
|
|
84
86
|
try {
|
|
85
87
|
// Fetch the workflow run
|
|
86
|
-
|
|
88
|
+
let run = await backend.getRun(runId);
|
|
87
89
|
if (!run) {
|
|
88
90
|
logger.error(`Workflow run not found: ${runId}`);
|
|
89
91
|
return DYNAMIC_EXIT_CODES.NOT_FOUND;
|
|
90
92
|
}
|
|
93
|
+
const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
|
|
94
|
+
if (injectedEnv) {
|
|
95
|
+
const currentEnv = run.context.env;
|
|
96
|
+
const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
|
|
97
|
+
const nextSerialized = JSON.stringify(injectedEnv);
|
|
98
|
+
if (currentSerialized !== nextSerialized) {
|
|
99
|
+
await backend.updateRun(runId, {
|
|
100
|
+
context: {
|
|
101
|
+
...run.context,
|
|
102
|
+
env: injectedEnv,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
run = (await backend.getRun(runId)) ?? run;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
91
108
|
// Get tenant context (from env or from stored run)
|
|
92
109
|
const tenant = getTenantFromEnv() ?? run._tenant;
|
|
93
110
|
if (!tenant) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAI7E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAsBX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmHjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAErD,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CA0BhC"}
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
23
23
|
import { getEnv } from "../../platform/compat/process.js";
|
|
24
|
+
import { env as getProcessEnv } from "../../platform/compat/process.js";
|
|
24
25
|
import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
26
|
+
import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
|
|
25
27
|
const logger = baseLogger.component("workflow-job");
|
|
26
28
|
/**
|
|
27
29
|
* Exit codes for the job
|
|
@@ -89,11 +91,26 @@ export async function runWorkflowJob(config) {
|
|
|
89
91
|
}
|
|
90
92
|
try {
|
|
91
93
|
// Fetch the workflow run
|
|
92
|
-
|
|
94
|
+
let run = await backend.getRun(runId);
|
|
93
95
|
if (!run) {
|
|
94
96
|
logger.error(`Workflow run not found: ${runId}`);
|
|
95
97
|
return EXIT_CODES.NOT_FOUND;
|
|
96
98
|
}
|
|
99
|
+
const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
|
|
100
|
+
if (injectedEnv) {
|
|
101
|
+
const currentEnv = run.context.env;
|
|
102
|
+
const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
|
|
103
|
+
const nextSerialized = JSON.stringify(injectedEnv);
|
|
104
|
+
if (currentSerialized !== nextSerialized) {
|
|
105
|
+
await backend.updateRun(runId, {
|
|
106
|
+
context: {
|
|
107
|
+
...run.context,
|
|
108
|
+
env: injectedEnv,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
run = (await backend.getRun(runId)) ?? run;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
97
114
|
// Get tenant context (from env or from stored run)
|
|
98
115
|
const tenant = getTenantFromEnv() ?? run._tenant;
|
|
99
116
|
if (debug) {
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { logger as baseLogger } from "../utils/index.js";
|
|
2
|
+
|
|
3
|
+
const logger = baseLogger.component("job-runtime-env");
|
|
4
|
+
|
|
5
|
+
export const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
|
|
6
|
+
|
|
7
|
+
const UNSAFE_INJECTED_ENV_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
8
|
+
|
|
9
|
+
const HIDDEN_TASK_CONTEXT_ENV_KEYS = new Set([
|
|
10
|
+
"VERYFRONT_API_TOKEN",
|
|
11
|
+
"VERYFRONT_API_URL",
|
|
12
|
+
"VERYFRONT_PROJECT_API_URL",
|
|
13
|
+
"VERYFRONT_API_BASE_URL",
|
|
14
|
+
"VERYFRONT_PROJECT_ID",
|
|
15
|
+
"VERYFRONT_PROJECT_SLUG",
|
|
16
|
+
"VERYFRONT_BRANCH_REF",
|
|
17
|
+
"VERYFRONT_API_USER",
|
|
18
|
+
"VERYFRONT_API_PASS",
|
|
19
|
+
"VERYFRONT_JOB_RESULT_PATH",
|
|
20
|
+
INJECTED_TASK_ENV_JSON,
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
const DISALLOWED_INJECTED_ENV_KEYS = new Set([
|
|
24
|
+
"VERYFRONT_API_TOKEN",
|
|
25
|
+
"VERYFRONT_API_URL",
|
|
26
|
+
"VERYFRONT_PROJECT_API_URL",
|
|
27
|
+
"VERYFRONT_API_BASE_URL",
|
|
28
|
+
"VERYFRONT_PROJECT_ID",
|
|
29
|
+
"VERYFRONT_PROJECT_SLUG",
|
|
30
|
+
"VERYFRONT_BRANCH_REF",
|
|
31
|
+
"VERYFRONT_API_USER",
|
|
32
|
+
"VERYFRONT_API_PASS",
|
|
33
|
+
"VERYFRONT_JOB_RESULT_PATH",
|
|
34
|
+
INJECTED_TASK_ENV_JSON,
|
|
35
|
+
]);
|
|
36
|
+
|
|
37
|
+
function isHiddenTaskContextEnvKey(key: string): boolean {
|
|
38
|
+
return key.startsWith("TENANT_") || HIDDEN_TASK_CONTEXT_ENV_KEYS.has(key);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function isDisallowedInjectedEnvKey(key: string): boolean {
|
|
42
|
+
return key.startsWith("TENANT_") || DISALLOWED_INJECTED_ENV_KEYS.has(key);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function filterExistingProjectEnv(
|
|
46
|
+
env: Record<string, string> | undefined,
|
|
47
|
+
): Record<string, string> {
|
|
48
|
+
const filtered: Record<string, string> = {};
|
|
49
|
+
for (const [key, value] of Object.entries(env ?? {})) {
|
|
50
|
+
if (
|
|
51
|
+
UNSAFE_INJECTED_ENV_KEYS.has(key) ||
|
|
52
|
+
isDisallowedInjectedEnvKey(key) ||
|
|
53
|
+
typeof value !== "string"
|
|
54
|
+
) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
filtered[key] = value;
|
|
58
|
+
}
|
|
59
|
+
return filtered;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function readInjectedProjectEnv(
|
|
63
|
+
allEnv: Record<string, string>,
|
|
64
|
+
): Record<string, string> {
|
|
65
|
+
const raw = allEnv[INJECTED_TASK_ENV_JSON];
|
|
66
|
+
if (!raw) {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
const parsed = JSON.parse(raw);
|
|
72
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const injectedEnv = Object.create(null) as Record<string, string>;
|
|
77
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
78
|
+
if (
|
|
79
|
+
UNSAFE_INJECTED_ENV_KEYS.has(key) ||
|
|
80
|
+
isDisallowedInjectedEnvKey(key) ||
|
|
81
|
+
typeof value !== "string"
|
|
82
|
+
) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
injectedEnv[key] = value;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return injectedEnv;
|
|
89
|
+
} catch {
|
|
90
|
+
logger.warn(`Ignoring invalid ${INJECTED_TASK_ENV_JSON}`);
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function buildTaskContextEnv(
|
|
96
|
+
allEnv: Record<string, string>,
|
|
97
|
+
envAllowlist?: string[],
|
|
98
|
+
): Record<string, string> {
|
|
99
|
+
const allowlistedEnvKeys = envAllowlist ? new Set(envAllowlist) : null;
|
|
100
|
+
const env: Record<string, string> = {};
|
|
101
|
+
|
|
102
|
+
for (const [key, value] of Object.entries(allEnv)) {
|
|
103
|
+
if (isHiddenTaskContextEnvKey(key)) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
env[key] = value;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
for (const [key, value] of Object.entries(readInjectedProjectEnv(allEnv))) {
|
|
113
|
+
if (allowlistedEnvKeys && !allowlistedEnvKeys.has(key)) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
env[key] = value;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return env;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function mergeInjectedWorkflowEnv(
|
|
123
|
+
existingEnv: Record<string, string> | undefined,
|
|
124
|
+
allEnv: Record<string, string>,
|
|
125
|
+
): Record<string, string> | undefined {
|
|
126
|
+
const mergedEnv = {
|
|
127
|
+
...filterExistingProjectEnv(existingEnv),
|
|
128
|
+
...readInjectedProjectEnv(allEnv),
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
return Object.keys(mergedEnv).length > 0 ? mergedEnv : undefined;
|
|
132
|
+
}
|
|
@@ -15,6 +15,64 @@ interface MDXPageResult {
|
|
|
15
15
|
collectedMetadata: Record<string, unknown>;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
interface PreparedMDXPageBundles {
|
|
19
|
+
pageBundle: PageBundle;
|
|
20
|
+
serverModuleCode: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function prepareMDXPageBundles(
|
|
24
|
+
pageInfo: EntityInfo,
|
|
25
|
+
projectDir: string,
|
|
26
|
+
options?: {
|
|
27
|
+
precompiledModule?: string;
|
|
28
|
+
studioEmbed?: boolean;
|
|
29
|
+
},
|
|
30
|
+
): Promise<PreparedMDXPageBundles> {
|
|
31
|
+
const { frontmatter, content, path } = pageInfo.entity;
|
|
32
|
+
const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
|
|
33
|
+
|
|
34
|
+
const ssrBundle = await compileContent(
|
|
35
|
+
"development",
|
|
36
|
+
projectDir,
|
|
37
|
+
content,
|
|
38
|
+
fmArg,
|
|
39
|
+
path,
|
|
40
|
+
"server",
|
|
41
|
+
undefined,
|
|
42
|
+
options?.studioEmbed,
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const pageBundle = ssrBundle as PageBundle;
|
|
46
|
+
|
|
47
|
+
if (options?.precompiledModule) {
|
|
48
|
+
pageBundle.clientModuleCode = options.precompiledModule;
|
|
49
|
+
} else {
|
|
50
|
+
const browserBundle = await compileContent(
|
|
51
|
+
"development",
|
|
52
|
+
projectDir,
|
|
53
|
+
content,
|
|
54
|
+
fmArg,
|
|
55
|
+
path,
|
|
56
|
+
"browser",
|
|
57
|
+
undefined,
|
|
58
|
+
options?.studioEmbed,
|
|
59
|
+
);
|
|
60
|
+
pageBundle.clientModuleCode = browserBundle.compiledCode;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const clientModuleCode = pageBundle.clientModuleCode;
|
|
64
|
+
if (!clientModuleCode) {
|
|
65
|
+
throw RENDER_ERROR.create({
|
|
66
|
+
detail: "MDX compilation produced no client module code",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
pageBundle,
|
|
72
|
+
serverModuleCode: ssrBundle.compiledCode,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
18
76
|
export function handleMDXPage(
|
|
19
77
|
pageInfo: EntityInfo,
|
|
20
78
|
slug: string,
|
|
@@ -42,49 +100,16 @@ export function handleMDXPage(
|
|
|
42
100
|
return withSpan(
|
|
43
101
|
"rendering.handleMDXPage",
|
|
44
102
|
async () => {
|
|
45
|
-
const { frontmatter,
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
projectDir,
|
|
51
|
-
content,
|
|
52
|
-
fmArg,
|
|
53
|
-
path,
|
|
54
|
-
"server",
|
|
55
|
-
undefined,
|
|
56
|
-
options?.studioEmbed,
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const pageBundle = ssrBundle as PageBundle;
|
|
103
|
+
const { frontmatter, path } = pageInfo.entity;
|
|
104
|
+
const { pageBundle, serverModuleCode } = await prepareMDXPageBundles(pageInfo, projectDir, {
|
|
105
|
+
precompiledModule: options?.precompiledModule,
|
|
106
|
+
studioEmbed: options?.studioEmbed,
|
|
107
|
+
});
|
|
60
108
|
let collectedMetadata: Record<string, unknown> = {};
|
|
61
109
|
|
|
62
110
|
try {
|
|
63
|
-
if (options?.precompiledModule) {
|
|
64
|
-
pageBundle.clientModuleCode = options.precompiledModule;
|
|
65
|
-
} else {
|
|
66
|
-
const browserBundle = await compileContent(
|
|
67
|
-
"development",
|
|
68
|
-
projectDir,
|
|
69
|
-
content,
|
|
70
|
-
fmArg,
|
|
71
|
-
path,
|
|
72
|
-
"browser",
|
|
73
|
-
undefined,
|
|
74
|
-
options?.studioEmbed,
|
|
75
|
-
);
|
|
76
|
-
pageBundle.clientModuleCode = browserBundle.compiledCode;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const clientModuleCode = pageBundle.clientModuleCode;
|
|
80
|
-
if (!clientModuleCode) {
|
|
81
|
-
throw RENDER_ERROR.create({
|
|
82
|
-
detail: "MDX compilation produced no client module code",
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
111
|
const mod = (await mdxRenderer.loadModuleESM(
|
|
87
|
-
|
|
112
|
+
serverModuleCode,
|
|
88
113
|
adapter,
|
|
89
114
|
options?.projectId,
|
|
90
115
|
projectDir,
|
package/src/src/task/runner.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { logger as baseLogger } from "../utils/index.js";
|
|
9
9
|
import { env as getProcessEnv } from "../platform/compat/process.js";
|
|
10
|
+
import { buildTaskContextEnv } from "../jobs/runtime-env.js";
|
|
10
11
|
import type { DiscoveredTask } from "./discovery.js";
|
|
11
12
|
import type { TaskContext } from "./types.js";
|
|
12
13
|
|
|
@@ -61,14 +62,7 @@ export async function runTask(options: RunTaskOptions): Promise<TaskRunResult> {
|
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
const allEnv = getProcessEnv();
|
|
64
|
-
const env
|
|
65
|
-
? Object.fromEntries(
|
|
66
|
-
envAllowlist.flatMap((k) => {
|
|
67
|
-
const value = allEnv[k];
|
|
68
|
-
return value === undefined ? [] : [[k, value] as const];
|
|
69
|
-
}),
|
|
70
|
-
)
|
|
71
|
-
: { ...allEnv };
|
|
65
|
+
const env = buildTaskContextEnv(allEnv, envAllowlist);
|
|
72
66
|
|
|
73
67
|
const ctx: TaskContext = {
|
|
74
68
|
env,
|
package/src/src/utils/version.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { getEnv } from "../platform/compat/process.js";
|
|
|
3
3
|
|
|
4
4
|
// Keep in sync with deno.json version.
|
|
5
5
|
// scripts/release.ts updates this constant during releases.
|
|
6
|
-
export const VERSION = "0.1.
|
|
6
|
+
export const VERSION = "0.1.97";
|
|
7
7
|
|
|
8
8
|
export function normalizeVeryfrontVersion(version: string | undefined): string | undefined {
|
|
9
9
|
if (!version) return undefined;
|
|
@@ -27,6 +27,8 @@ import type {
|
|
|
27
27
|
import { generateId, parseDuration } from "../types.js";
|
|
28
28
|
import { hasLockSupport, type WorkflowBackend } from "../backends/types.js";
|
|
29
29
|
import { getCurrentRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
30
|
+
import { env as getProcessEnv } from "../../platform/compat/process.js";
|
|
31
|
+
import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
|
|
30
32
|
import { DAGExecutor } from "./dag-executor.js";
|
|
31
33
|
import { CheckpointManager } from "./checkpoint-manager.js";
|
|
32
34
|
import { runWithWorkflowTenant, StepExecutor, type StepExecutorConfig } from "./step-executor.js";
|
|
@@ -196,6 +198,7 @@ export class WorkflowExecutor {
|
|
|
196
198
|
releaseId: requestCtx.releaseId ?? null,
|
|
197
199
|
}
|
|
198
200
|
: undefined;
|
|
201
|
+
const injectedProjectEnv = mergeInjectedWorkflowEnv(undefined, getProcessEnv());
|
|
199
202
|
|
|
200
203
|
const run: WorkflowRun<TInput, TOutput> = {
|
|
201
204
|
id: options?.runId ?? generateId("run"),
|
|
@@ -205,7 +208,10 @@ export class WorkflowExecutor {
|
|
|
205
208
|
input,
|
|
206
209
|
nodeStates: {},
|
|
207
210
|
currentNodes: [],
|
|
208
|
-
context: {
|
|
211
|
+
context: {
|
|
212
|
+
input,
|
|
213
|
+
...(injectedProjectEnv ? { env: injectedProjectEnv } : {}),
|
|
214
|
+
},
|
|
209
215
|
checkpoints: [],
|
|
210
216
|
pendingApprovals: [],
|
|
211
217
|
createdAt: new Date(),
|
|
@@ -27,9 +27,11 @@
|
|
|
27
27
|
|
|
28
28
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
29
29
|
import { getEnv } from "../../platform/compat/process.js";
|
|
30
|
+
import { env as getProcessEnv } from "../../platform/compat/process.js";
|
|
30
31
|
import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
31
32
|
import { enhanceAdapterWithFS } from "../../platform/adapters/fs/integration.js";
|
|
32
33
|
import { denoAdapter } from "../../platform/adapters/runtime/deno/index.js";
|
|
34
|
+
import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
|
|
33
35
|
import { discoverWorkflows } from "../discovery/index.js";
|
|
34
36
|
import type { VeryfrontConfig } from "../../config/index.js";
|
|
35
37
|
import type { WorkflowBackend } from "../backends/types.js";
|
|
@@ -109,12 +111,28 @@ export async function runDynamicWorkflowJob(
|
|
|
109
111
|
|
|
110
112
|
try {
|
|
111
113
|
// Fetch the workflow run
|
|
112
|
-
|
|
114
|
+
let run = await backend.getRun(runId);
|
|
113
115
|
if (!run) {
|
|
114
116
|
logger.error(`Workflow run not found: ${runId}`);
|
|
115
117
|
return DYNAMIC_EXIT_CODES.NOT_FOUND;
|
|
116
118
|
}
|
|
117
119
|
|
|
120
|
+
const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
|
|
121
|
+
if (injectedEnv) {
|
|
122
|
+
const currentEnv = run.context.env;
|
|
123
|
+
const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
|
|
124
|
+
const nextSerialized = JSON.stringify(injectedEnv);
|
|
125
|
+
if (currentSerialized !== nextSerialized) {
|
|
126
|
+
await backend.updateRun(runId, {
|
|
127
|
+
context: {
|
|
128
|
+
...run.context,
|
|
129
|
+
env: injectedEnv,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
run = (await backend.getRun(runId)) ?? run;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
118
136
|
// Get tenant context (from env or from stored run)
|
|
119
137
|
const tenant = getTenantFromEnv() ?? run._tenant;
|
|
120
138
|
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
|
|
23
23
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
24
24
|
import { getEnv } from "../../platform/compat/process.js";
|
|
25
|
+
import { env as getProcessEnv } from "../../platform/compat/process.js";
|
|
25
26
|
import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
27
|
+
import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
|
|
26
28
|
import type { WorkflowBackend } from "../backends/types.js";
|
|
27
29
|
import type { WorkflowExecutor } from "../executor/workflow-executor.js";
|
|
28
30
|
import type { CapturedTenantContext, WorkflowDefinition } from "../types.js";
|
|
@@ -116,12 +118,28 @@ export async function runWorkflowJob(config: JobEntrypointConfig): Promise<numbe
|
|
|
116
118
|
|
|
117
119
|
try {
|
|
118
120
|
// Fetch the workflow run
|
|
119
|
-
|
|
121
|
+
let run = await backend.getRun(runId);
|
|
120
122
|
if (!run) {
|
|
121
123
|
logger.error(`Workflow run not found: ${runId}`);
|
|
122
124
|
return EXIT_CODES.NOT_FOUND;
|
|
123
125
|
}
|
|
124
126
|
|
|
127
|
+
const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
|
|
128
|
+
if (injectedEnv) {
|
|
129
|
+
const currentEnv = run.context.env;
|
|
130
|
+
const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
|
|
131
|
+
const nextSerialized = JSON.stringify(injectedEnv);
|
|
132
|
+
if (currentSerialized !== nextSerialized) {
|
|
133
|
+
await backend.updateRun(runId, {
|
|
134
|
+
context: {
|
|
135
|
+
...run.context,
|
|
136
|
+
env: injectedEnv,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
run = (await backend.getRun(runId)) ?? run;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
125
143
|
// Get tenant context (from env or from stored run)
|
|
126
144
|
const tenant = getTenantFromEnv() ?? run._tenant;
|
|
127
145
|
|