Skip to content

Commit c8ee6c4

Browse files
committed
fix: cross-platform docker compose wrapper
Replace the bash-only `$([ -f .env ] && echo --env-file .env)` substitution in the docker scripts with `scripts/docker.mjs`, a small Node wrapper that conditionally passes `--env-file <repo-root>/.env` when the file exists. The substitution form failed on Windows (`cmd.exe` doesn't parse $(...)), which pnpm uses by default when running scripts on native Windows. Also routes `internal-packages/clickhouse/db:migrate` through the same helper so the migrator picks up `COMPOSE_PROJECT_NAME` from `.env` instead of the hardcoded `-p triggerdotdev-docker`, matching the multi-instance workflow.
1 parent 6c39d95 commit c8ee6c4

3 files changed

Lines changed: 32 additions & 5 deletions

File tree

internal-packages/clickhouse/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"typecheck": "tsc --noEmit -p tsconfig.build.json",
2323
"build": "pnpm run clean && tsc -p tsconfig.build.json",
2424
"dev": "tsc --watch -p tsconfig.build.json",
25-
"db:migrate": "docker compose -p triggerdotdev-docker -f ../../docker/docker-compose.yml up clickhouse_migrator --build",
25+
"db:migrate": "node ../../scripts/docker.mjs -f docker/docker-compose.yml up clickhouse_migrator --build",
2626
"db:migrate:down": "GOOSE_COMMAND=down pnpm run db:migrate",
2727
"test": "vitest --sequence.concurrent=false --no-file-parallelism",
2828
"test:coverage": "vitest --sequence.concurrent=false --no-file-parallelism --coverage.enabled"

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
"i:dev": "infisical run -- turbo run dev",
2020
"generate": "turbo run generate",
2121
"lint": "turbo run lint",
22-
"docker": "docker compose $([ -f .env ] && echo '--env-file .env') -f docker/docker-compose.yml up -d --build --remove-orphans",
23-
"docker:stop": "docker compose $([ -f .env ] && echo '--env-file .env') -f docker/docker-compose.yml stop",
24-
"docker:full": "docker compose $([ -f .env ] && echo '--env-file .env') -f docker/docker-compose.yml -f docker/docker-compose.extras.yml up -d --build --remove-orphans",
25-
"docker:full:stop": "docker compose $([ -f .env ] && echo '--env-file .env') -f docker/docker-compose.yml -f docker/docker-compose.extras.yml stop",
22+
"docker": "node scripts/docker.mjs -f docker/docker-compose.yml up -d --build --remove-orphans",
23+
"docker:stop": "node scripts/docker.mjs -f docker/docker-compose.yml stop",
24+
"docker:full": "node scripts/docker.mjs -f docker/docker-compose.yml -f docker/docker-compose.extras.yml up -d --build --remove-orphans",
25+
"docker:full:stop": "node scripts/docker.mjs -f docker/docker-compose.yml -f docker/docker-compose.extras.yml stop",
2626
"dev:docker": "docker compose -p triggerdotdev-dev-docker -f docker/dev-compose.yml up -d --build --remove-orphans",
2727
"dev:docker:build": "docker compose -p triggerdotdev-dev-docker -f docker/dev-compose.yml up -d --build",
2828
"dev:docker:stop": "docker compose -p triggerdotdev-dev-docker -f docker/dev-compose.yml stop",

scripts/docker.mjs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env node
2+
// Cross-platform wrapper for `docker compose` that conditionally passes
3+
// `--env-file <repo-root>/.env` when the file exists. Replaces an earlier
4+
// inline `$([ -f .env ] && echo --env-file .env)` shell substitution that
5+
// only worked in POSIX shells, breaking native Windows `cmd.exe` runs.
6+
//
7+
// Used by the root `pnpm run docker` / `docker:full` scripts and by the
8+
// clickhouse package's `db:migrate` script. Always runs compose with cwd
9+
// set to the repo root, so callers can pass `-f docker/docker-compose.yml`
10+
// from anywhere in the workspace.
11+
import { existsSync } from "node:fs";
12+
import { execFileSync } from "node:child_process";
13+
import { resolve, dirname } from "node:path";
14+
import { fileURLToPath } from "node:url";
15+
16+
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
17+
const envPath = resolve(repoRoot, ".env");
18+
const envArgs = existsSync(envPath) ? ["--env-file", envPath] : [];
19+
20+
try {
21+
execFileSync("docker", ["compose", ...envArgs, ...process.argv.slice(2)], {
22+
stdio: "inherit",
23+
cwd: repoRoot,
24+
});
25+
} catch (err) {
26+
process.exit(err.status ?? 1);
27+
}

0 commit comments

Comments
 (0)