chore: use package version in container name

This commit is contained in:
Arseniy Klempner 2025-10-20 10:38:13 -07:00
parent 9e34309316
commit 161d094c8c
No known key found for this signature in database
GPG Key ID: 51653F18863BD24B
10 changed files with 80 additions and 27 deletions

View File

@ -37,7 +37,7 @@ services:
nwaku-1:
<<: *nwaku-base
container_name: waku-local-node-1
container_name: ${COMPOSE_PROJECT_NAME:-waku-run-0-0-1}-node-1
networks:
default:
ipv4_address: 172.20.0.10
@ -84,7 +84,7 @@ services:
nwaku-2:
<<: *nwaku-base
container_name: waku-local-node-2
container_name: ${COMPOSE_PROJECT_NAME:-waku-run-0-0-1}-node-2
networks:
default:
ipv4_address: 172.20.0.11
@ -136,7 +136,7 @@ volumes:
networks:
default:
name: waku-local-network
name: ${COMPOSE_PROJECT_NAME:-waku-run-0-0-1}-network
ipam:
config:
- subnet: 172.20.0.0/16

View File

@ -35,9 +35,9 @@
"build:web": "esbuild web/index.ts --bundle --format=esm --platform=browser --outdir=dist/web && cp web/index.html dist/web/index.html",
"prepublishOnly": "npm run build",
"start": "tsx scripts/start.ts",
"stop": "docker compose down",
"stop": "tsx scripts/stop.ts",
"restart": "npm run stop && npm run start",
"logs": "docker compose logs -f",
"logs": "tsx scripts/logs.ts",
"info": "tsx scripts/info.ts",
"test": "if [ \"$CI\" = \"true\" ]; then echo 'Skipping tests in CI'; exit 0; fi && NODE_ENV=test node ./src/run-tests.js \"tests/basic.spec.ts\"",
"test:browser": "if [ \"$CI\" = \"true\" ]; then echo 'Skipping browser tests in CI'; exit 0; fi && npm run build:web && npx playwright test --reporter=line",

View File

@ -5,6 +5,7 @@ import { dirname, join } from "path";
import { fileURLToPath } from "url";
import { NODE1_PEER_ID, NODE2_PEER_ID } from "../src/constants.js";
import { getProjectName } from "../src/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@ -33,10 +34,15 @@ const colors: Colors = {
try {
// Check if containers are running
const output: string = execSync("docker compose ps --quiet", {
cwd: packageRoot,
encoding: "utf-8"
}).trim();
const projectName = getProjectName(packageRoot);
const output: string = execSync(
`docker compose --project-name ${projectName} ps --quiet`,
{
cwd: packageRoot,
encoding: "utf-8",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
}
).trim();
if (!output) {
process.stdout.write(

View File

@ -4,6 +4,8 @@ import { execSync } from "child_process";
import { dirname, join } from "path";
import { fileURLToPath } from "url";
import { getProjectName } from "../src/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// In development: scripts are in packages/run/scripts
@ -13,9 +15,11 @@ const packageRoot = __dirname.includes("dist")
: join(__dirname, "..");
try {
execSync("docker compose logs -f", {
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} logs -f`, {
cwd: packageRoot,
stdio: "inherit"
stdio: "inherit",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
} catch (error: unknown) {
const err = error as { message?: string };

View File

@ -5,6 +5,7 @@ import { dirname, join } from "path";
import { fileURLToPath } from "url";
import { NODE1_PEER_ID, NODE2_PEER_ID } from "../src/constants.js";
import { getProjectName } from "../src/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@ -100,10 +101,12 @@ try {
checkAndPullImages();
// Start docker compose from package root
execSync("docker compose up -d", {
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} up -d`, {
cwd: packageRoot,
stdio: ["ignore", "ignore", "pipe"],
encoding: "utf-8"
encoding: "utf-8",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
// Wait for nodes to be ready

View File

@ -4,6 +4,8 @@ import { execSync } from "child_process";
import { dirname, join } from "path";
import { fileURLToPath } from "url";
import { getProjectName } from "../src/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// In development: scripts are in packages/run/scripts
@ -13,9 +15,11 @@ const packageRoot = __dirname.includes("dist")
: join(__dirname, "..");
try {
execSync("docker compose down", {
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} down`, {
cwd: packageRoot,
stdio: "inherit"
stdio: "inherit",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
} catch (error: unknown) {
const err = error as { message?: string };

View File

@ -7,6 +7,7 @@ import { fileURLToPath } from "url";
import { Protocols } from "@waku/sdk";
import { WakuTestClient } from "../src/test-client.js";
import { getProjectName } from "../src/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@ -38,10 +39,15 @@ async function main(): Promise<void> {
try {
// Check if containers are running
const output: string = execSync("docker compose ps --quiet", {
cwd: packageRoot,
encoding: "utf-8"
}).trim();
const projectName = getProjectName(packageRoot);
const output: string = execSync(
`docker compose --project-name ${projectName} ps --quiet`,
{
cwd: packageRoot,
encoding: "utf-8",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
}
).trim();
if (!output) {
process.stderr.write(

11
packages/run/src/utils.ts Normal file
View File

@ -0,0 +1,11 @@
import { readFileSync } from "fs";
import { join } from "path";
export function getProjectName(packageRoot: string): string {
const packageJsonPath = join(packageRoot, "package.json");
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
// Docker Compose project names must consist only of lowercase alphanumeric characters, hyphens, and underscores
const name = packageJson.name.replace("@", "").replace("/", "-");
const version = packageJson.version.replace(/\./g, "-");
return `${name}-${version}`;
}

View File

@ -1,9 +1,16 @@
import { execSync } from "child_process";
import { dirname, join } from "path";
import { fileURLToPath } from "url";
import { Protocols } from "@waku/sdk";
import { expect } from "chai";
import { WakuTestClient } from "../src/test-client.js";
import { getProjectName } from "../src/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const packageRoot = join(__dirname, "..");
describe("Waku Run - Basic Test", function () {
this.timeout(90000);
@ -12,8 +19,11 @@ describe("Waku Run - Basic Test", function () {
before(async function () {
// Step 1: Start the nodes
execSync("docker compose up -d", {
stdio: "inherit"
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} up -d`, {
cwd: packageRoot,
stdio: "inherit",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
// Wait for nodes to be ready
@ -65,8 +75,11 @@ describe("Waku Run - Basic Test", function () {
if (client) {
await client.stop();
}
execSync("docker compose down", {
stdio: "inherit"
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} down`, {
cwd: packageRoot,
stdio: "inherit",
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
});

View File

@ -5,11 +5,13 @@ import { fileURLToPath } from "url";
import { Browser, chromium, expect, Page, test } from "@playwright/test";
import { NODE1_PEER_ID, NODE2_PEER_ID } from "../src/constants.js";
import { getProjectName } from "../src/utils.js";
import { startTestServer, stopTestServer } from "./test-server.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const packageRoot = join(__dirname, "..");
test.describe.configure({ mode: "serial" });
@ -24,9 +26,11 @@ test.describe("Waku Run - Browser Test", () => {
await startTestServer(testPort);
// Start docker compose
execSync("docker compose up -d", {
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} up -d`, {
stdio: "inherit",
cwd: join(__dirname, "..")
cwd: packageRoot,
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
// Wait for nodes to be ready
@ -100,9 +104,11 @@ test.describe("Waku Run - Browser Test", () => {
await browser.close();
}
execSync("docker compose down", {
const projectName = getProjectName(packageRoot);
execSync(`docker compose --project-name ${projectName} down`, {
stdio: "inherit",
cwd: join(__dirname, "..")
cwd: packageRoot,
env: { ...process.env, COMPOSE_PROJECT_NAME: projectName }
});
await stopTestServer();