fix[railpack]: env parsing and update railpack to v0.0.66

Improve environment variable parsing to handle values containing equals
signs by extracting a dedicated parseEnvironmentKeyValuePair function
and updating Railpack secret formatting.
This commit is contained in:
Torsten Dittmann
2025-06-01 21:59:17 +02:00
parent 2619cb49d1
commit 9535276fe6
3 changed files with 26 additions and 12 deletions

View File

@@ -56,7 +56,7 @@ RUN curl -sSL https://nixpacks.com/install.sh -o install.sh \
&& pnpm install -g tsx && pnpm install -g tsx
# Install Railpack # Install Railpack
ARG RAILPACK_VERSION=0.0.64 ARG RAILPACK_VERSION=0.0.66
RUN curl -sSL https://railpack.com/install.sh | bash RUN curl -sSL https://railpack.com/install.sh | bash
# Install buildpacks # Install buildpacks

View File

@@ -2,7 +2,10 @@ import { createHash } from "node:crypto";
import type { WriteStream } from "node:fs"; import type { WriteStream } from "node:fs";
import { nanoid } from "nanoid"; import { nanoid } from "nanoid";
import type { ApplicationNested } from "."; import type { ApplicationNested } from ".";
import { prepareEnvironmentVariables } from "../docker/utils"; import {
parseEnvironmentKeyValuePair,
prepareEnvironmentVariables,
} from "../docker/utils";
import { getBuildAppDirectory } from "../filesystem/directory"; import { getBuildAppDirectory } from "../filesystem/directory";
import { execAsync } from "../process/execAsync"; import { execAsync } from "../process/execAsync";
import { spawnAsync } from "../process/spawnAsync"; import { spawnAsync } from "../process/spawnAsync";
@@ -81,10 +84,10 @@ export const buildRailpack = async (
// Add secrets properly formatted // Add secrets properly formatted
const env: { [key: string]: string } = {}; const env: { [key: string]: string } = {};
for (const envVar of envVariables) { for (const pair of envVariables) {
const [key, value] = envVar.split("="); const [key, value] = parseEnvironmentKeyValuePair(pair);
if (key && value) { if (key && value.length > 0) {
buildArgs.push("--secret", `id=${key},env='${key}'`); buildArgs.push("--secret", `id=${key},env=${key}`);
env[key] = value; env[key] = value;
} }
} }
@@ -161,11 +164,11 @@ export const getRailpackCommand = (
// Add secrets properly formatted // Add secrets properly formatted
const exportEnvs = []; const exportEnvs = [];
for (const envVar of envVariables) { for (const pair of envVariables) {
const [key, value] = envVar.split("="); const [key, value] = parseEnvironmentKeyValuePair(pair);
if (key && value) { if (key && value.length > 0) {
buildArgs.push("--secret", `id=${key},env='${key}'`); buildArgs.push("--secret", `id=${key},env=${key}`);
exportEnvs.push(`export ${key}=${value}`); exportEnvs.push(`export ${key}='${value}'`);
} }
} }

View File

@@ -279,6 +279,17 @@ export const prepareEnvironmentVariables = (
return resolvedVars; return resolvedVars;
}; };
export const parseEnvironmentKeyValuePair = (
pair: string,
): [string, string] => {
const [key, ...valueParts] = pair.split("=");
if (!key || !valueParts.length) {
throw new Error(`Invalid environment variable pair: ${pair}`);
}
return [key, valueParts.join("")];
};
export const getEnviromentVariablesObject = ( export const getEnviromentVariablesObject = (
input: string | null, input: string | null,
projectEnv?: string | null, projectEnv?: string | null,
@@ -288,7 +299,7 @@ export const getEnviromentVariablesObject = (
const jsonObject: Record<string, string> = {}; const jsonObject: Record<string, string> = {};
for (const pair of envs) { for (const pair of envs) {
const [key, value] = pair.split("="); const [key, value] = parseEnvironmentKeyValuePair(pair);
if (key && value) { if (key && value) {
jsonObject[key] = value; jsonObject[key] = value;
} }