From 6ed62a9a3d9d5b9dabb1cfd55db96cb7a9212a73 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Fri, 31 Jul 2026 11:47:55 +0200 Subject: [PATCH] fix(cli): enforce node engine version on start --- docs/docs/features/command-line-interface.md | 2 +- packages/cli/bin/immich | 12 +++++++++++- packages/cli/package.json | 5 +++-- pnpm-lock.yaml | 3 +++ 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/docs/features/command-line-interface.md b/docs/docs/features/command-line-interface.md index c3eab1605fee5..965db81b07020 100644 --- a/docs/docs/features/command-line-interface.md +++ b/docs/docs/features/command-line-interface.md @@ -15,7 +15,7 @@ If you are looking to import your Google Photos takeout, we recommend this commu ## Requirements -- Node.js 20 or above +- Node.js 22 or above - Npm If you can't install node/npm, there is also a Docker version available below. diff --git a/packages/cli/bin/immich b/packages/cli/bin/immich index 924fff1230b60..280b3c021b346 100755 --- a/packages/cli/bin/immich +++ b/packages/cli/bin/immich @@ -1,2 +1,12 @@ #!/usr/bin/env node -import '../dist/index.js'; +import { createRequire } from 'node:module'; +import semver from 'semver'; + +const { engines } = createRequire(import.meta.url)('../package.json'); + +if (!semver.satisfies(process.version, engines.node, { includePrerelease: true })) { + console.error(`The Immich CLI requires Node.js ${engines.node}, but you are running ${process.version}.`); + process.exit(1); +} + +await import('../dist/index.js'); diff --git a/packages/cli/package.json b/packages/cli/package.json index 9540cefd4cba6..c80dc6fb1bfc8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -59,13 +59,14 @@ "check": "tsc --noEmit" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "dependencies": { "chokidar": "^4.0.3", "fast-glob": "^3.3.2", "fastq": "^1.17.1", "lodash-es": "^4.17.21", - "micromatch": "^4.0.8" + "micromatch": "^4.0.8", + "semver": "^7.8.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4d3e4246a51a..63ed0b364f373 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,6 +219,9 @@ importers: micromatch: specifier: ^4.0.8 version: 4.0.8 + semver: + specifier: ^7.8.1 + version: 7.8.5 devDependencies: '@eslint/js': specifier: ^10.0.0