Pulp Engine Document Rendering
Get started
Release v0.44.2

Pulp Engine v0.44.2 — Release Notes

Patch release. Fixes a Prisma query-engine binary mismatch that caused Postgres mode to crash-loop on startup in all published GHCR images (v0.43.0–v0.44.1). File mode was unaffected and is not changed in this release.


What changed

Fix: Prisma binary target for Debian Bookworm / OpenSSL 3.0.x runtime (apps/api/src/prisma/schema.prisma)

Symptom: When running the published Docker image with STORAGE_MODE=postgres, the application crash-looped immediately after migrations completed with a PrismaClientInitializationError. The error was present in every published image from v0.43.0 through v0.44.1. File mode was not affected because it does not use Prisma.

Root cause: The published images contained only the libquery_engine-debian-openssl-1.1.x.so.node Prisma query engine binary. The runtime base image (node:22-slim, Debian Bookworm) links against OpenSSL 3.0.x. Prisma cannot load the 1.1.x engine binary in a 3.0.x environment, so the process exits before it can serve any requests.

Without an explicit binaryTargets declaration, the Prisma client generator resolves the binary target as native at generate time. Depending on the builder environment and any pre-existing cached binaries, native did not reliably resolve to debian-openssl-3.0.x for the runtime image, producing the mismatched artifact.

Fix: Add debian-openssl-3.0.x to binaryTargets in the Prisma schema generator block:

generator client {
  provider      = "prisma-client-js"
  binaryTargets = ["native", "debian-openssl-3.0.x"]
}

The Dockerfile builder stage runs prisma generate twice — once in the full workspace build and once inside the pnpm deploy bundle — so both passes now embed the correct OpenSSL 3.0.x engine binary for the Bookworm runtime.

SQL Server: Unaffected by this Prisma binary/runtime issue. The SQL Server storage adapter uses the raw mssql npm package with parameterized SQL; it does not use Prisma.


Validation

  • pnpm db:generate — Prisma schema accepted, debian-openssl-3.0.x target downloaded
  • pnpm version:check — all four package.json files at 0.44.2, release notes present
  • pnpm lint — 0 errors
  • pnpm build — clean

Docker artifact proof (required for this release — defect was artifact-level):

# Build local RC image
docker build \
  --build-arg VERSION=v0.44.2 \
  --build-arg GIT_SHA=$(git rev-parse HEAD) \
  --build-arg APP_VERSION=0.44.2 \
  -t pulp-engine:v0.44.2-rc .

# Confirm the 3.0.x engine binary is present in the artifact
docker run --rm pulp-engine:v0.44.2-rc \
  find /app/node_modules/.prisma/client -name "*.node" -o -name "libquery_engine*"
# Expected: libquery_engine-debian-openssl-3.0.x.so.node is listed

# Postgres smoke test — directly re-tests the failure mode
docker network create pulp-engine-rc
docker run -d --name pg-test --network pulp-engine-rc \
  -e POSTGRES_DB=pulp-engine -e POSTGRES_USER=pulp-engine -e POSTGRES_PASSWORD=pulp-engine \
  postgres:16-alpine
docker run --rm --network pulp-engine-rc \
  -e DATABASE_URL="postgresql://pulp-engine:pulp-engine@pg-test:5432/pulp-engine?schema=public" \
  --entrypoint /app/node_modules/.bin/prisma pulp-engine:v0.44.2-rc \
  migrate deploy --schema /app/src/prisma/schema.prisma
docker run -d --name pulp-engine-rc --network pulp-engine-rc -p 3000:3000 \
  -e STORAGE_MODE=postgres \
  -e DATABASE_URL="postgresql://pulp-engine:pulp-engine@pg-test:5432/pulp-engine?schema=public" \
  -e API_KEY_ADMIN=test-key \
  pulp-engine:v0.44.2-rc
# (allow ~15s for startup)
curl -sf http://localhost:3000/health/ready && echo "READY"
docker rm -f pulp-engine-rc pg-test && docker network rm pulp-engine-rc

App must reach READY without crash-looping.


Upgrade

No breaking changes. No env var changes. No schema changes. Drop-in replacement for v0.44.0 and v0.44.1.

docker pull ghcr.io/OWNER/pulp-engine:v0.44.2

Operators running Postgres mode on any published image before this release should upgrade immediately. File-mode operators are not affected but may upgrade at their convenience.