From d960fbee12af4451f42a5dd1e450d11e7d7eb375 Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Wed, 26 Feb 2025 18:57:51 -0500 Subject: [PATCH 1/4] don't prune node_modules by default --- core/providers/node/node.go | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/core/providers/node/node.go b/core/providers/node/node.go index 5d1172b..8f3e192 100644 --- a/core/providers/node/node.go +++ b/core/providers/node/node.go @@ -87,16 +87,30 @@ func (p *NodeProvider) Plan(ctx *generate.GenerateContext) error { plan.NewStepInput(miseStep.Name(), plan.InputOptions{ Include: miseStep.GetOutputPaths(), }), - plan.NewStepInput(prune.Name(), plan.InputOptions{ - Include: []string{"/app/node_modules"}, // we only wanted the pruned node_modules - }), - plan.NewStepInput(build.Name(), plan.InputOptions{ - Include: buildIncludeDirs, - Exclude: []string{"node_modules"}, - }), - plan.NewLocalInput("."), } + if p.shouldPrune(ctx) { + // If we are pruning, we want to grab the pruned node_modules + // and ignore the node_modules from the install/build steps + ctx.Deploy.Inputs = append(ctx.Deploy.Inputs, + plan.NewStepInput(prune.Name(), plan.InputOptions{ + Include: []string{"/app/node_modules"}, + }), + plan.NewStepInput(build.Name(), plan.InputOptions{ + Include: buildIncludeDirs, + Exclude: []string{"node_modules"}, + }), + ) + } else { + ctx.Deploy.Inputs = append(ctx.Deploy.Inputs, + plan.NewStepInput(build.Name(), plan.InputOptions{ + Include: buildIncludeDirs, + }), + ) + } + + ctx.Deploy.Inputs = append(ctx.Deploy.Inputs, plan.NewLocalInput(".")) + return nil } @@ -135,8 +149,12 @@ func (p *NodeProvider) Build(ctx *generate.GenerateContext, build *generate.Comm } } +func (p *NodeProvider) shouldPrune(ctx *generate.GenerateContext) bool { + return !ctx.Env.IsConfigVariableTruthy("NO_PRUNE") +} + func (p *NodeProvider) PruneNodeDeps(ctx *generate.GenerateContext, prune *generate.CommandStepBuilder) { - if ctx.Env.IsConfigVariableTruthy("NO_PRUNE") { + if !p.shouldPrune(ctx) { return } From 194f5aed26d10a0221d495cc352b1066d9dcee4c Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Wed, 26 Feb 2025 19:00:03 -0500 Subject: [PATCH 2/4] actually don't prune by default --- core/providers/node/node.go | 2 +- examples/node-npm/test.json | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/providers/node/node.go b/core/providers/node/node.go index 8f3e192..0348e06 100644 --- a/core/providers/node/node.go +++ b/core/providers/node/node.go @@ -150,7 +150,7 @@ func (p *NodeProvider) Build(ctx *generate.GenerateContext, build *generate.Comm } func (p *NodeProvider) shouldPrune(ctx *generate.GenerateContext) bool { - return !ctx.Env.IsConfigVariableTruthy("NO_PRUNE") + return ctx.Env.IsConfigVariableTruthy("PRUNE_DEPS") } func (p *NodeProvider) PruneNodeDeps(ctx *generate.GenerateContext, prune *generate.CommandStepBuilder) { diff --git a/examples/node-npm/test.json b/examples/node-npm/test.json index f089f73..8ab3463 100644 --- a/examples/node-npm/test.json +++ b/examples/node-npm/test.json @@ -1,5 +1,8 @@ [ { - "expectedOutput": "hello from Node v23.5.0" + "expectedOutput": "hello from Node v23.5.0", + "envs": { + "RAILPACK_PRUNE_DEPS": "true" + } } ] From c71a6b3bb784a6c54e211df4cf7e13f420c78893 Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Wed, 26 Feb 2025 19:03:07 -0500 Subject: [PATCH 3/4] update tests --- ...ildPlanForExamples_mise-config_1.snap.json | 23 +++--------------- ...eBuildPlanForExamples_node-bun_1.snap.json | 24 +++---------------- ...dPlanForExamples_node-corepack_1.snap.json | 23 +++--------------- ...BuildPlanForExamples_node-next_1.snap.json | 23 +++--------------- ...orExamples_node-npm-workspaces_1.snap.json | 23 +++--------------- ...eBuildPlanForExamples_node-npm_1.snap.json | 23 +++--------------- ...rExamples_node-pnpm-workspaces_1.snap.json | 23 +++--------------- ...PlanForExamples_node-turborepo_1.snap.json | 23 +++--------------- core/providers/node/node.go | 8 +++---- 9 files changed, 27 insertions(+), 166 deletions(-) diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json index 36ebed3..e5dd09c 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json @@ -26,15 +26,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ "." ], @@ -126,23 +117,15 @@ } }, { - "caches": [ - "npm-install" - ], - "commands": [ - { - "cmd": "npm prune --omit=dev" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json index 7cc312c..c1d9012 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json @@ -25,15 +25,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ "." ], @@ -125,24 +116,15 @@ } }, { - "caches": [ - "bun-install" - ], - "commands": [ - { - "cmd": "sh -c 'rm -rf node_modules \u0026\u0026 bun install --production'", - "customName": "rm -rf node_modules \u0026\u0026 bun install --production" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json index 7af489d..b21c605 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json @@ -25,15 +25,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ ".", "/root/.cache" @@ -137,23 +128,15 @@ } }, { - "caches": [ - "pnpm-install" - ], - "commands": [ - { - "cmd": "pnpm prune --prod" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json index 469a57b..6a4afdd 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json @@ -29,15 +29,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ "." ], @@ -129,23 +120,15 @@ } }, { - "caches": [ - "npm-install" - ], - "commands": [ - { - "cmd": "npm prune --omit=dev" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json index 8f0228f..40f3316 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json @@ -25,15 +25,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ "." ], @@ -133,23 +124,15 @@ } }, { - "caches": [ - "npm-install" - ], - "commands": [ - { - "cmd": "npm prune --omit=dev" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json index 5a1c5d5..65c54b1 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json @@ -25,15 +25,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ "." ], @@ -125,23 +116,15 @@ } }, { - "caches": [ - "npm-install" - ], - "commands": [ - { - "cmd": "npm prune --omit=dev" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json index 544d30b..d567e09 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json @@ -25,15 +25,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ "." ], @@ -137,23 +128,15 @@ } }, { - "caches": [ - "pnpm-install" - ], - "commands": [ - { - "cmd": "pnpm prune --prod" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json index fb51075..0c53315 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json @@ -33,15 +33,6 @@ "step": "packages:mise" }, { - "include": [ - "/app/node_modules" - ], - "step": "prune" - }, - { - "exclude": [ - "node_modules" - ], "include": [ ".", "/root/.cache" @@ -168,23 +159,15 @@ } }, { - "caches": [ - "npm-install" - ], - "commands": [ - { - "cmd": "npm prune --omit=dev" - } - ], "inputs": [ { "step": "install" } ], "name": "prune", - "variables": { - "NPM_CONFIG_PRODUCTION": "true" - } + "secrets": [ + "*" + ] }, { "caches": [ diff --git a/core/providers/node/node.go b/core/providers/node/node.go index 0348e06..ea62a1b 100644 --- a/core/providers/node/node.go +++ b/core/providers/node/node.go @@ -66,7 +66,9 @@ func (p *NodeProvider) Plan(ctx *generate.GenerateContext) error { // Prune prune := ctx.NewCommandStep("prune") prune.AddInput(plan.NewStepInput(install.Name())) - p.PruneNodeDeps(ctx, prune) + if p.shouldPrune(ctx) { + p.PruneNodeDeps(ctx, prune) + } // Build build := ctx.NewCommandStep("build") @@ -154,10 +156,6 @@ func (p *NodeProvider) shouldPrune(ctx *generate.GenerateContext) bool { } func (p *NodeProvider) PruneNodeDeps(ctx *generate.GenerateContext, prune *generate.CommandStepBuilder) { - if !p.shouldPrune(ctx) { - return - } - prune.Variables["NPM_CONFIG_PRODUCTION"] = "true" prune.Secrets = []string{} p.packageManager.PruneDeps(ctx, prune) From 762289873bcf83ae1839eb6f7d076abcf411342f Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Wed, 26 Feb 2025 19:05:16 -0500 Subject: [PATCH 4/4] prune uses no secrets --- .../TestGenerateBuildPlanForExamples_mise-config_1.snap.json | 5 +---- .../TestGenerateBuildPlanForExamples_node-bun_1.snap.json | 5 +---- ...estGenerateBuildPlanForExamples_node-corepack_1.snap.json | 5 +---- .../TestGenerateBuildPlanForExamples_node-next_1.snap.json | 5 +---- ...erateBuildPlanForExamples_node-npm-workspaces_1.snap.json | 5 +---- .../TestGenerateBuildPlanForExamples_node-npm_1.snap.json | 5 +---- ...rateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json | 5 +---- ...stGenerateBuildPlanForExamples_node-turborepo_1.snap.json | 5 +---- core/providers/node/node.go | 1 + 9 files changed, 9 insertions(+), 32 deletions(-) diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json index e5dd09c..c1e49ee 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_mise-config_1.snap.json @@ -122,10 +122,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json index c1d9012..bc4bcd3 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-bun_1.snap.json @@ -121,10 +121,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json index b21c605..c4c4ad8 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-corepack_1.snap.json @@ -133,10 +133,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json index 6a4afdd..f88d8b5 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-next_1.snap.json @@ -125,10 +125,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json index 40f3316..b2219a0 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm-workspaces_1.snap.json @@ -129,10 +129,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json index 65c54b1..2a5d392 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-npm_1.snap.json @@ -121,10 +121,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json index d567e09..deb6704 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-pnpm-workspaces_1.snap.json @@ -133,10 +133,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json index 0c53315..f0d799e 100755 --- a/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json +++ b/core/__snapshots__/TestGenerateBuildPlanForExamples_node-turborepo_1.snap.json @@ -164,10 +164,7 @@ "step": "install" } ], - "name": "prune", - "secrets": [ - "*" - ] + "name": "prune" }, { "caches": [ diff --git a/core/providers/node/node.go b/core/providers/node/node.go index ea62a1b..86969eb 100644 --- a/core/providers/node/node.go +++ b/core/providers/node/node.go @@ -66,6 +66,7 @@ func (p *NodeProvider) Plan(ctx *generate.GenerateContext) error { // Prune prune := ctx.NewCommandStep("prune") prune.AddInput(plan.NewStepInput(install.Name())) + prune.Secrets = []string{} if p.shouldPrune(ctx) { p.PruneNodeDeps(ctx, prune) }