Skip to content

ci(docker): publish images that can actually use the Qdrant backend - #1556

Merged
wanghy73 merged 1 commit into
MemMachine:speedkickfrom
wanghy73:fix/publish-qdrant-extra
Aug 31, 2026
Merged

wanghy73 merged 1 commit into
MemMachine:speedkickfrom
wanghy73:fix/publish-qdrant-extra

Conversation

@wanghy73

@wanghy73 wanghy73 commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

What

Both the CPU and GPU publish jobs now pass EXTRAS=--extra qdrant to the Docker build.

Why

qdrant-client is an optional extra (packages/server/pyproject.toml:67). #1532 gave the Dockerfile an EXTRAS build arg so a build can include it, but docker-image.yml never passed one — so a published image does not contain the package. The core starts cleanly and then raises ModuleNotFoundError on the first request that uses the event backend, which makes the Qdrant vector store unusable from a published image regardless of configuration.

Unconditional rather than a dispatch input, so a published image can serve either backend and no one has to remember a flag at build time.

Verified

  • uv.lock already carries qdrant-client under marker = "extra == 'qdrant'", so uv sync --frozen --extra qdrant resolves without relocking — otherwise --frozen would fail the build.
  • Parsed the workflow with PyYAML: build-args is exactly ['GPU=…', 'SCM_VERSION=…', 'EXTRAS=--extra qdrant'] for both jobs. The rationale is a YAML comment above the key, not inside the | block scalar, where it would have reached Docker as a literal build arg.
  • The GPU sync line becomes --extra gpu --extra qdrant.

Not verified

No image was built or published from this branch. The workflow is tag-triggered and was not dispatched, so the resulting image has not been run against a Qdrant deployment.

Also note: a workflow_dispatch run passes inputs.tag to metadata-action's semver patterns, so the input needs to be a parseable version — a bare branch name yields no tags and pushes nothing. Unchanged by this PR, but relevant to anyone dispatching it.

qdrant-client is an optional extra (packages/server/pyproject.toml:67).
MemMachine#1532 gave the Dockerfile an EXTRAS build arg so a build can include it,
but the publish workflow never passed one, so every image on Docker Hub
lacks the package: the core starts cleanly and then raises
ModuleNotFoundError on the first request that uses the event backend.
The platform chart can now select that backend, so there is no tag it
can point at.

Both the CPU and GPU builds pass EXTRAS=--extra qdrant unconditionally.
The GPU sync line becomes `--extra gpu --extra qdrant`.

Verified: uv.lock already carries qdrant-client under
`marker = "extra == 'qdrant'"`, so `uv sync --frozen --extra qdrant`
resolves without relocking. Parsed the workflow with PyYAML and confirmed
build-args is exactly ['GPU=...', 'SCM_VERSION=...', 'EXTRAS=--extra qdrant']
for both jobs -- the rationale sits in a YAML comment above the key, not
inside the block scalar, where it would have reached Docker as a literal
build arg.

Not verified: no image was published from this branch. The workflow is
tag-triggered and was not dispatched, so the built image has not been
run against a Qdrant deployment.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Nr9kacmpFVTTfkZRw6esxP
@wanghy73
wanghy73 merged commit 899ace1 into MemMachine:speedkick Aug 31, 2026
35 of 39 checks passed
@wanghy73
wanghy73 deleted the fix/publish-qdrant-extra branch September 2, 2026 06:29
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.

2 participants