diff --git a/.claude/rules/build-and-runtime.md b/.claude/rules/build-and-runtime.md index 52cb77b3a..c9fd9d390 100644 --- a/.claude/rules/build-and-runtime.md +++ b/.claude/rules/build-and-runtime.md @@ -39,7 +39,7 @@ The CLI name is `photoprism` in production and public docs. Other binary names ( ## Container Image Builds -- **Pin the dev `Dockerfile` `FROM` to a dated `photoprism/develop` tag, never the floating codename.** Use `photoprism/develop:-` (e.g. `photoprism/develop:260510-resolute`), not `photoprism/develop:resolute` / `:latest` / `:ubuntu`. The dated tag pins to a known-good build so a drive-by `docker pull` doesn't silently swap in a fresh base mid-session, and bumping the date in a commit gives developers + reviewers a visible signal that a new base image is available. The `buildx-multi.sh` script publishes both `:` and `:-` on every build — the dated one is the durable pointer. When you bump the base image, also update `Dockerfile`, the host `compose.yaml` (if it references the tag explicitly), and any docs that quote the current dev image. +- **Pin the dev `Dockerfile` `FROM` to a dated `photoprism/develop` tag, never the floating codename.** Use `photoprism/develop:-` (e.g. `photoprism/develop:260520-resolute`), not `photoprism/develop:resolute` / `:latest` / `:ubuntu`. The dated tag pins to a known-good build so a drive-by `docker pull` doesn't silently swap in a fresh base mid-session, and bumping the date in a commit gives developers + reviewers a visible signal that a new base image is available. The `buildx-multi.sh` script publishes both `:` and `:-` on every build — the dated one is the durable pointer. When you bump the base image, also update `Dockerfile`, the host `compose.yaml` (if it references the tag explicitly), and any docs that quote the current dev image. - **Never mix Debian and Ubuntu `apt` repositories in the same image:** - Don't add a Debian source to an Ubuntu base (or vice versa) to install a single missing package — the transitive deps drift, apt's solver pulls newer libraries from the foreign distro, and other build steps in the same `RUN` (e.g. `install-libheif.sh` running `apt-get install libavcodec-dev`) silently link against the wrong soname. - Symptoms surface much later as `dlopen: libfoo.so.N: cannot open shared object file` at image runtime, with the binary referencing a soname that exists only in the foreign distro. diff --git a/Dockerfile b/Dockerfile index 2011bf0bc..8f70eeb1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Ubuntu 26.04 LTS (Resolute Raccoon) -FROM photoprism/develop:260510-resolute +FROM photoprism/develop:260520-resolute # Harden npm usage by default (applies to npm ci / install in dev container) ENV NPM_CONFIG_IGNORE_SCRIPTS=true