From 7df2c9c905498ce4b31567d6f4b5688cb0e6be1b Mon Sep 17 00:00:00 2001 From: Brandon Wees Date: Thu, 10 Apr 2025 11:43:35 -0500 Subject: [PATCH] fix: patch-package install in docker build and better postgres patch (#17523) * always patch package when running npm i, install immich CLI outside of directory so post install doesnt run * handles case where query is an object and defined but origin is not. * move patch-package from a dev dependency to a normal dependency. Also copy the patches folder for the docker build to use and patch with * fix Dockerfile * use query.reject instead of throw for queryError * package-lock to reflect the dev dependency change * dont throw the error, just provide an empty string for query.origin if it does not exist * remove npm link and demote patch-package back to a dev dependency * modify patch to add defensive check to catch queries that will fail to parse and reject --- server/Dockerfile | 3 ++- server/package.json | 2 +- server/patches/postgres+3.4.5.patch | 33 ++++++++++++++++++----------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index d7126d12c6..8b611fd42d 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -4,6 +4,7 @@ FROM ghcr.io/immich-app/base-server-dev:202503251114@sha256:10e8973e8603c5729436 RUN apt-get install --no-install-recommends -yqq tini WORKDIR /usr/src/app COPY server/package.json server/package-lock.json ./ +COPY server/patches ./patches RUN npm ci && \ # exiftool-vendored.pl, sharp-linux-x64 and sharp-linux-arm64 are the only ones we need # they're marked as optional dependencies, so we need to copy them manually after pruning @@ -56,7 +57,7 @@ COPY server/resources resources COPY server/package.json server/package-lock.json ./ COPY server/start*.sh ./ COPY "docker/scripts/get-cpus.sh" ./ -RUN npm link && npm install -g @immich/cli && npm cache clean --force +RUN npm install -g @immich/cli && npm cache clean --force COPY LICENSE /licenses/LICENSE.txt COPY LICENSE /LICENSE ENV PATH="${PATH}:/usr/src/app/bin" diff --git a/server/package.json b/server/package.json index 257258234c..f96f3a69a0 100644 --- a/server/package.json +++ b/server/package.json @@ -33,7 +33,7 @@ "sync:open-api": "node ./dist/bin/sync-open-api.js", "sync:sql": "node ./dist/bin/sync-sql.js", "email:dev": "email dev -p 3050 --dir src/emails", - "postinstall": "[ \"$npm_config_global\" != \"true\" ] && patch-package || true" + "postinstall": "patch-package" }, "dependencies": { "@nestjs/bullmq": "^11.0.1", diff --git a/server/patches/postgres+3.4.5.patch b/server/patches/postgres+3.4.5.patch index d879416978..019ef9df78 100644 --- a/server/patches/postgres+3.4.5.patch +++ b/server/patches/postgres+3.4.5.patch @@ -1,39 +1,48 @@ diff --git a/node_modules/postgres/cf/src/connection.js b/node_modules/postgres/cf/src/connection.js -index ee8b1e6..d03b9dd 100644 +index ee8b1e6..acf4566 100644 --- a/node_modules/postgres/cf/src/connection.js +++ b/node_modules/postgres/cf/src/connection.js -@@ -387,6 +387,8 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose +@@ -387,8 +387,10 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose } function queryError(query, err) { -+ if (!query || typeof query !== 'object') throw err ++ if (!query || typeof query !== 'object' || !query.reject) throw err + 'query' in err || 'parameters' in err || Object.defineProperties(err, { - stack: { value: err.stack + query.origin.replace(/.*\n/, '\n'), enumerable: options.debug }, +- stack: { value: err.stack + query.origin.replace(/.*\n/, '\n'), enumerable: options.debug }, ++ stack: { value: err.stack + (query.origin || '').replace(/.*\n/, '\n'), enumerable: options.debug }, query: { value: query.string, enumerable: options.debug }, + parameters: { value: query.parameters, enumerable: options.debug }, + args: { value: query.args, enumerable: options.debug }, diff --git a/node_modules/postgres/cjs/src/connection.js b/node_modules/postgres/cjs/src/connection.js -index f7f58d1..8a37571 100644 +index f7f58d1..b7f2d65 100644 --- a/node_modules/postgres/cjs/src/connection.js +++ b/node_modules/postgres/cjs/src/connection.js -@@ -385,6 +385,8 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose +@@ -385,8 +385,10 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose } function queryError(query, err) { -+ if (!query || typeof query !== 'object') throw err ++ if (!query || typeof query !== 'object' || !query.reject) throw err + 'query' in err || 'parameters' in err || Object.defineProperties(err, { - stack: { value: err.stack + query.origin.replace(/.*\n/, '\n'), enumerable: options.debug }, +- stack: { value: err.stack + query.origin.replace(/.*\n/, '\n'), enumerable: options.debug }, ++ stack: { value: err.stack + (query.origin || '').replace(/.*\n/, '\n'), enumerable: options.debug }, query: { value: query.string, enumerable: options.debug }, + parameters: { value: query.parameters, enumerable: options.debug }, + args: { value: query.args, enumerable: options.debug }, diff --git a/node_modules/postgres/src/connection.js b/node_modules/postgres/src/connection.js -index 97cc97e..58f5298 100644 +index 97cc97e..26f508e 100644 --- a/node_modules/postgres/src/connection.js +++ b/node_modules/postgres/src/connection.js -@@ -385,6 +385,8 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose +@@ -385,8 +385,10 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose } function queryError(query, err) { -+ if (!query || typeof query !== 'object') throw err ++ if (!query || typeof query !== 'object' || !query.reject) throw err + 'query' in err || 'parameters' in err || Object.defineProperties(err, { - stack: { value: err.stack + query.origin.replace(/.*\n/, '\n'), enumerable: options.debug }, +- stack: { value: err.stack + query.origin.replace(/.*\n/, '\n'), enumerable: options.debug }, ++ stack: { value: err.stack + (query.origin || '').replace(/.*\n/, '\n'), enumerable: options.debug }, query: { value: query.string, enumerable: options.debug }, + parameters: { value: query.parameters, enumerable: options.debug }, + args: { value: query.args, enumerable: options.debug },