Skip to content

build: compile the duckvfs backend into the image - #434

Merged
jrosskopf merged 1 commit into
mainfrom
feat/duckvfs-in-image
Sep 1, 2026
Merged

build: compile the duckvfs backend into the image#434
jrosskopf merged 1 commit into
mainfrom
feat/duckvfs-in-image

Conversation

@jrosskopf

@jrosskopf jrosskopf commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

The published image was built --features gemini,s3,gcs, so the duckvfs LaneStore was not in the binary at all. Setting ESCUREL_STORAGE_BACKEND=duckvfs against it fails at boot:

ESCUREL_STORAGE_BACKEND=duckvfs requires the 'duckvfs' cargo feature; this binary was built without it

So the image could not serve a Google Drive lane store, which is the backend's whole reason for existing.

Cost: none

The feature is dep:duckdb, and libduckdb is already linked for escurel-index. No new native dependency, no new system package. The backend was absent for no benefit.

Verified by running the image, not by reading the Dockerfile

  • cargo check -p escurel-server --features gemini,s3,gcs,duckvfs passes — no feature-interaction problem
  • The container boots with ESCUREL_STORAGE_BACKEND=duckvfs and reports healthy, where the old image exits on the feature error
  • The duckdb-gdrive extension is actually fetched inside the container: /tmp/e/.duckdb/extensions/v1.5.5/linux_amd64/gdrive.duckdb_extension, 20 MB, pulled from the community repository on first use

That last check is the one worth keeping. The feature being compiled in only means the backend exists; it still needs egress and a writable $HOME for ~/.duckdb at runtime, and neither is visible from the Dockerfile. A pod whose $HOME is not writable would boot, report healthy, and fail on first use — so the Dockerfile now records both requirements next to the feature list.

Deployment note

Needs ESCUREL_STORAGE_DUCKVFS_EXTENSION_REPO=community (#433). Without it — and without an explicit ..._EXTENSION path — the load is skipped rather than failing, so the store opens cleanly and the first write fails on a missing write_blob.

Dockerfile is in publish-image.yml's paths: filter, so merging republishes :main and a new :<sha>.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

The published image was built `--features gemini,s3,gcs`, so the duckvfs
LaneStore was not in the binary at all. Setting
ESCUREL_STORAGE_BACKEND=duckvfs against it fails at boot with "requires the
'duckvfs' cargo feature; this binary was built without it" — the image simply
could not serve a Google Drive lane store.

It costs nothing to carry. The feature is `dep:duckdb` and libduckdb is
already linked for escurel-index, so this adds no native dependency and no
new system package; the backend was absent for no benefit.

Verified by running the image, not by reading the Dockerfile:

  * `cargo check -p escurel-server --features gemini,s3,gcs,duckvfs` passes,
    so the feature combination has no interaction problem.
  * The container boots with ESCUREL_STORAGE_BACKEND=duckvfs and reports
    healthy, where the old image would have exited on the feature error.
  * The duckdb-gdrive extension is actually FETCHED inside the container:
    /tmp/e/.duckdb/extensions/v1.5.5/linux_amd64/gdrive.duckdb_extension,
    20MB, pulled from the community repository at first use.

That last check is the one worth keeping. The feature being compiled in only
means the backend exists; it still needs egress and a writable $HOME for
~/.duckdb at RUNTIME, and neither is visible from the Dockerfile. A pod whose
$HOME is not writable would boot, report healthy, and fail on first use — so
the Dockerfile now records both requirements next to the feature list.

Needs ESCUREL_STORAGE_DUCKVFS_EXTENSION_REPO=community in the deployment
(escurel#433).
@jrosskopf
jrosskopf merged commit c0deb60 into main Sep 1, 2026
4 checks passed
@jrosskopf
jrosskopf deleted the feat/duckvfs-in-image branch September 1, 2026 16:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant