From c73cb58ec3c1387cb6511815adb20a66b4a2001e Mon Sep 17 00:00:00 2001 From: Ahmad Kaouk <56095276+ahmadkaouk@users.noreply.github.com> Date: Thu, 19 Jun 2025 02:01:22 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20add=20Bun=20version=20check?= =?UTF-8?q?=20to=20CLI=20dependencies=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add version validation to ensure Bun 1.2+ is used for consistent behavior across development environments. --- test/README.md | 2 +- test/cli/handlers/common/checks.ts | 28 ++++++++++++++++++++++++++++ test/cli/handlers/common/consts.ts | 5 +++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/test/README.md b/test/README.md index 2ee8a46c..faa37183 100644 --- a/test/README.md +++ b/test/README.md @@ -12,7 +12,7 @@ ## Pre-requisites - [Kurtosis](https://docs.kurtosis.com/install): For launching test networks -- [Bun](https://bun.sh/): TypeScript runtime and package manager +- [Bun](https://bun.sh/) v1.2 or higher: TypeScript runtime and package manager - [Docker](https://www.docker.com/): For container management ##### MacOS diff --git a/test/cli/handlers/common/checks.ts b/test/cli/handlers/common/checks.ts index 0976f5c7..d1952dac 100644 --- a/test/cli/handlers/common/checks.ts +++ b/test/cli/handlers/common/checks.ts @@ -2,6 +2,7 @@ import { $ } from "bun"; import invariant from "tiny-invariant"; import { logger, printDivider, printHeader } from "utils"; import type { DeployOptions } from "../deploy"; +import { MIN_BUN_VERSION } from "./consts"; import type { LaunchedNetwork } from "./launchedNetwork"; // ===== Checks ===== @@ -15,6 +16,15 @@ export const checkBaseDependencies = async (): Promise => { logger.success("Kurtosis CLI found"); + if (!(await checkBunVersion())) { + logger.error( + `Bun version must be ${MIN_BUN_VERSION.major}.${MIN_BUN_VERSION.minor} or higher: https://bun.sh/docs/installation#upgrading` + ); + throw Error("❌ Bun version is too old."); + } + + logger.success("Bun is installed and up to date"); + if (!(await checkDockerRunning())) { logger.error("Is Docker Running? Unable to make connection to docker daemon"); throw Error("❌ Error connecting to Docker"); @@ -72,6 +82,24 @@ export const deploymentChecks = async ( printDivider(); }; +const checkBunVersion = async (): Promise => { + const bunVersion = Bun.version; + const [major, minor] = bunVersion.split(".").map(Number); + + // Check if version meets minimum requirements + const isVersionValid = + major > MIN_BUN_VERSION.major || + (major === MIN_BUN_VERSION.major && minor >= MIN_BUN_VERSION.minor); + + if (!isVersionValid) { + logger.debug(`Bun version: ${bunVersion} (too old)`); + return false; + } + + logger.debug(`Bun version: ${bunVersion}`); + return true; +}; + const checkKurtosisInstalled = async (): Promise => { const { exitCode, stderr, stdout } = await $`kurtosis version`.nothrow().quiet(); if (exitCode !== 0) { diff --git a/test/cli/handlers/common/consts.ts b/test/cli/handlers/common/consts.ts index 29f32146..9a11b874 100644 --- a/test/cli/handlers/common/consts.ts +++ b/test/cli/handlers/common/consts.ts @@ -42,3 +42,8 @@ export const BASE_SERVICES = [ "el-2-reth-lodestar", "dora" ]; + +/** + * Minimum required Bun version + */ +export const MIN_BUN_VERSION = { major: 1, minor: 2 };