From 9611fa850cab194096f564d52d5d6c0a1b098cdc Mon Sep 17 00:00:00 2001 From: Gautam Singh <5769869+gautamsi@users.noreply.github.com> Date: Sat, 13 Jul 2024 02:00:47 -0500 Subject: [PATCH 1/4] Added extraCACerts config to help with self signed/private ca cert chain --- packages/cli-v3/src/Containerfile.prod | 2 ++ packages/cli-v3/src/commands/deploy.ts | 11 +++++++++++ packages/cli-v3/src/workers/prod/entry-point.ts | 1 + packages/core/src/v3/schemas/schemas.ts | 1 + packages/core/src/v3/types/config.ts | 9 +++++++++ 5 files changed, 24 insertions(+) diff --git a/packages/cli-v3/src/Containerfile.prod b/packages/cli-v3/src/Containerfile.prod index 44c6da2e9dd..3d506195293 100644 --- a/packages/cli-v3/src/Containerfile.prod +++ b/packages/cli-v3/src/Containerfile.prod @@ -43,12 +43,14 @@ ARG TRIGGER_DEPLOYMENT_ID ARG TRIGGER_DEPLOYMENT_VERSION ARG TRIGGER_CONTENT_HASH ARG TRIGGER_PROJECT_REF +ARG NODE_EXTRA_CA_CERTS ENV TRIGGER_PROJECT_ID=${TRIGGER_PROJECT_ID} \ TRIGGER_DEPLOYMENT_ID=${TRIGGER_DEPLOYMENT_ID} \ TRIGGER_DEPLOYMENT_VERSION=${TRIGGER_DEPLOYMENT_VERSION} \ TRIGGER_CONTENT_HASH=${TRIGGER_CONTENT_HASH} \ TRIGGER_PROJECT_REF=${TRIGGER_PROJECT_REF} \ + NODE_EXTRA_CA_CERTS=${NODE_EXTRA_CA_CERTS} \ NODE_ENV=production USER node diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index a644215ef36..b1bab74e787 100644 --- a/packages/cli-v3/src/commands/deploy.ts +++ b/packages/cli-v3/src/commands/deploy.ts @@ -304,6 +304,7 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { pushImage: options.push, selfHostedRegistry: !!options.registry, noCache: options.noCache, + extraCACerts: resolvedConfig.config.extraCACerts?.replace(/^\./,"/app") ?? "", }); } @@ -330,6 +331,7 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { loadImage: options.loadImage, buildPlatform: options.buildPlatform, noCache: options.noCache, + extraCACerts: resolvedConfig.config.extraCACerts?.replace(/^\./,"/app") ?? "", }, deploymentSpinner ); @@ -779,6 +781,7 @@ type BuildAndPushImageOptions = { loadImage: boolean; buildPlatform: string; noCache: boolean; + extraCACerts: string; }; type BuildAndPushImageResults = @@ -837,6 +840,8 @@ async function buildAndPushImage( `TRIGGER_CONTENT_HASH=${options.contentHash}`, "--build-arg", `TRIGGER_PROJECT_REF=${options.projectRef}`, + "--build-arg", + `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`, "-t", `${options.registryHost}/${options.imageTag}`, ".", @@ -961,6 +966,8 @@ async function buildAndPushSelfHostedImage( `TRIGGER_CONTENT_HASH=${options.contentHash}`, "--build-arg", `TRIGGER_PROJECT_REF=${options.projectRef}`, + "--build-arg", + `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`, "-t", imageRef, ".", // The build context @@ -1821,6 +1828,10 @@ export async function copyAdditionalFiles( tempDir: string ): Promise { const additionalFiles = config.additionalFiles ?? []; + const extraCACerts = config.extraCACerts ?? ''; + if (extraCACerts) { + additionalFiles.push(extraCACerts); + } const noMatches: string[] = []; if (additionalFiles.length === 0) { diff --git a/packages/cli-v3/src/workers/prod/entry-point.ts b/packages/cli-v3/src/workers/prod/entry-point.ts index 023b6dbcb12..305a14932cb 100644 --- a/packages/cli-v3/src/workers/prod/entry-point.ts +++ b/packages/cli-v3/src/workers/prod/entry-point.ts @@ -1485,6 +1485,7 @@ function gatherProcessEnv() { TERM: process.env.TERM, NODE_PATH: process.env.NODE_PATH, HOME: process.env.HOME, + NODE_EXTRA_CA_CERTS: process.env.NODE_EXTRA_CA_CERTS, }; // Filter out undefined values diff --git a/packages/core/src/v3/schemas/schemas.ts b/packages/core/src/v3/schemas/schemas.ts index 82b1a542e1b..69f9cbcaba2 100644 --- a/packages/core/src/v3/schemas/schemas.ts +++ b/packages/core/src/v3/schemas/schemas.ts @@ -206,6 +206,7 @@ export const Config = z.object({ logLevel: z.string().optional(), enableConsoleLogging: z.boolean().optional(), postInstall: z.string().optional(), + extraCACerts: z.string().optional(), }); export type Config = z.infer; diff --git a/packages/core/src/v3/types/config.ts b/packages/core/src/v3/types/config.ts index a81b040738f..74a4ad6e298 100644 --- a/packages/core/src/v3/types/config.ts +++ b/packages/core/src/v3/types/config.ts @@ -82,4 +82,13 @@ export interface ProjectConfig { * @example "prisma generate" */ postInstall?: string; + + /** + * CA Cert file to be added to NODE_EXTRA_CA_CERT environment variable in, useful in use with self signed cert in the trigger.dev environment. + * + * @example "./certs/ca.crt" + * Note: must start with "./" and be relative to the project root. + * + */ + extraCACerts?: string; } From e787a80a629e918ee1bc38bcb1c8dd4713f76d54 Mon Sep 17 00:00:00 2001 From: Gautam Singh <5769869+gautamsi@users.noreply.github.com> Date: Sat, 13 Jul 2024 02:25:29 -0500 Subject: [PATCH 2/4] changeset --- .changeset/nervous-baboons-sin.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/nervous-baboons-sin.md diff --git a/.changeset/nervous-baboons-sin.md b/.changeset/nervous-baboons-sin.md new file mode 100644 index 00000000000..d628163c58d --- /dev/null +++ b/.changeset/nervous-baboons-sin.md @@ -0,0 +1,6 @@ +--- +"trigger.dev": minor +"@trigger.dev/core": minor +--- + +Added config option extraCACerts to ProjectConfig type. This copies the ca file along with additionalFiles and sets NODE_EXTRA_CA_CERTS environment variable in built image as well as running the task. From 8ebbf09fbf84274d18504f4d74ee63a9d6fc6e1c Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:17:54 +0100 Subject: [PATCH 3/4] Update changeset --- .changeset/nervous-baboons-sin.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/nervous-baboons-sin.md b/.changeset/nervous-baboons-sin.md index d628163c58d..e74b7c76d1a 100644 --- a/.changeset/nervous-baboons-sin.md +++ b/.changeset/nervous-baboons-sin.md @@ -1,6 +1,6 @@ --- -"trigger.dev": minor -"@trigger.dev/core": minor +"trigger.dev": patch +"@trigger.dev/core": patch --- Added config option extraCACerts to ProjectConfig type. This copies the ca file along with additionalFiles and sets NODE_EXTRA_CA_CERTS environment variable in built image as well as running the task. From f606d3e072224e2496651e24bfe3e0bfdd30b642 Mon Sep 17 00:00:00 2001 From: Gautam Singh <5769869+gautamsi@users.noreply.github.com> Date: Tue, 16 Jul 2024 21:14:42 -0500 Subject: [PATCH 4/4] resolved pr comments --- packages/cli-v3/src/commands/deploy.ts | 20 +++++++++----------- packages/cli-v3/src/utilities/configFiles.ts | 9 +++++++++ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index b1bab74e787..5be7faf00d5 100644 --- a/packages/cli-v3/src/commands/deploy.ts +++ b/packages/cli-v3/src/commands/deploy.ts @@ -304,7 +304,7 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { pushImage: options.push, selfHostedRegistry: !!options.registry, noCache: options.noCache, - extraCACerts: resolvedConfig.config.extraCACerts?.replace(/^\./,"/app") ?? "", + extraCACerts: resolvedConfig.config.extraCACerts, }); } @@ -331,7 +331,7 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { loadImage: options.loadImage, buildPlatform: options.buildPlatform, noCache: options.noCache, - extraCACerts: resolvedConfig.config.extraCACerts?.replace(/^\./,"/app") ?? "", + extraCACerts: resolvedConfig.config.extraCACerts, }, deploymentSpinner ); @@ -781,7 +781,7 @@ type BuildAndPushImageOptions = { loadImage: boolean; buildPlatform: string; noCache: boolean; - extraCACerts: string; + extraCACerts?: string; }; type BuildAndPushImageResults = @@ -840,8 +840,9 @@ async function buildAndPushImage( `TRIGGER_CONTENT_HASH=${options.contentHash}`, "--build-arg", `TRIGGER_PROJECT_REF=${options.projectRef}`, - "--build-arg", - `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`, + ...(options.extraCACerts + ? ["--build-arg", `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`] + : []), "-t", `${options.registryHost}/${options.imageTag}`, ".", @@ -966,8 +967,9 @@ async function buildAndPushSelfHostedImage( `TRIGGER_CONTENT_HASH=${options.contentHash}`, "--build-arg", `TRIGGER_PROJECT_REF=${options.projectRef}`, - "--build-arg", - `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`, + ...(options.extraCACerts + ? ["--build-arg", `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`] + : []), "-t", imageRef, ".", // The build context @@ -1828,10 +1830,6 @@ export async function copyAdditionalFiles( tempDir: string ): Promise { const additionalFiles = config.additionalFiles ?? []; - const extraCACerts = config.extraCACerts ?? ''; - if (extraCACerts) { - additionalFiles.push(extraCACerts); - } const noMatches: string[] = []; if (additionalFiles.length === 0) { diff --git a/packages/cli-v3/src/utilities/configFiles.ts b/packages/cli-v3/src/utilities/configFiles.ts index cdad244c734..74487689250 100644 --- a/packages/cli-v3/src/utilities/configFiles.ts +++ b/packages/cli-v3/src/utilities/configFiles.ts @@ -247,6 +247,15 @@ export async function resolveConfig(path: string, config: Config): Promise