Ship weed-vector in release assets and Docker images (#12322)

* ci(release): publish weed-vector binaries

Tagged releases now carry weed-vector_linux_{amd64,arm64}.tar.gz, static
musl builds made the same way as weed-worker's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK

* docker: carry weed-vector in the image

The image takes a pre-built weed-vector the way it takes weed-worker, or an
empty placeholder where none was built. `vector` runs it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK

* ci(docker): build weed-vector for the images

The container workflows cross-compile weed-vector for amd64 and arm64
beside weed-worker and place it in the Docker context.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK

* install.sh: add the vector component

`--component vector` installs weed-vector from a release, and `all` adds it
when the release carries one, as it does for the worker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK

* ci(docker): skip weed-vector for source refs that predate it

The manual latest-image rebuild accepts any source_ref; one without the
engine's server crate now builds its image without weed-vector instead of
failing the Rust job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK

* docker: have the vector engine listen beyond loopback

weed-vector listens on 127.0.0.1 by default, which a gateway in another
container cannot reach. `vector` now adds --listen 0.0.0.0:8090 unless a
listen address is given by flag or WEED_VECTOR_LISTEN. The engine registers
its container address for a wildcard listen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Chris LuandClaude Opus 5.5 authored and GitHub committed 2026-11-01 18:34:04 -08:00
1 parent 2ea63bad48
commit 965c6c06fb
8 files changed
+226 -9

No files matched your search

+12 -1
View File
@@ -33,6 +33,7 @@ ARG TARGETARCH
ARG TAGS
COPY weed-volume-prebuilt/ /prebuilt/
COPY weed-worker-prebuilt/ /prebuilt-worker/
COPY weed-vector-prebuilt/ /prebuilt-vector/
COPY --from=builder /go/src/github.com/seaweedfs/seaweedfs/seaweed-volume /build/seaweed-volume
# seaweed-common is a path dependency of seaweed-volume that lives beside it,
# so the source build below needs it in the same relative position.
@@ -65,11 +66,19 @@ RUN if [ -f "/prebuilt-worker/weed-worker-${TARGETARCH}" ]; then \
echo "No pre-built Rust worker for ${TARGETARCH}" && \
touch /weed-worker; \
fi
# The vector engine carries the same lance tree, so it is pre-built or absent too.
RUN if [ -f "/prebuilt-vector/weed-vector-${TARGETARCH}" ]; then \
echo "Using pre-built vector engine for ${TARGETARCH}" && \
cp "/prebuilt-vector/weed-vector-${TARGETARCH}" /weed-vector; \
else \
echo "No pre-built vector engine for ${TARGETARCH}" && \
touch /weed-vector; \
fi
# Pre-built binaries arrive via GitHub Actions artifacts, which drop the
# executable bit, so the copied file is 0644 and exec fails with "Permission
# denied". Restore it (no-op for the empty placeholders, which stay size 0).
RUN chmod 0755 /weed-volume /weed-worker
RUN chmod 0755 /weed-volume /weed-worker /weed-vector
FROM alpine AS final
LABEL author="Chris Lu"
@@ -78,6 +87,8 @@ COPY --from=builder /go/bin/weed /usr/bin/
COPY --from=rust_builder /weed-volume /usr/bin/weed-volume
# Same for the Rust maintenance worker, which serves Lance table buckets
COPY --from=rust_builder /weed-worker /usr/bin/weed-worker
# And the vector engine behind the S3 Vectors API
COPY --from=rust_builder /weed-vector /usr/bin/weed-vector
RUN mkdir -p /etc/seaweedfs
COPY --from=builder /go/src/github.com/seaweedfs/seaweedfs/docker/filer.toml /etc/seaweedfs/filer.toml
COPY --from=builder /go/src/github.com/seaweedfs/seaweedfs/docker/entrypoint.sh /entrypoint.sh
+13
View File
@@ -100,6 +100,19 @@ case "$1" in
exec /usr/bin/weed-worker "$@"
;;
'vector')
shift
if [ ! -s /usr/bin/weed-vector ]; then
echo "Error: the vector engine is not available on this platform ($(uname -m))." >&2
exit 1
fi
# The gateway dials the engine from another container, so not loopback.
if [ -z "$WEED_VECTOR_LISTEN" ] && ! isArgPassed "-listen" "$@"; then
set -- --listen 0.0.0.0:8090 "$@"
fi
exec /usr/bin/weed-vector "$@"
;;
'server')
ARGS="-dir=/data -volume.max=0 -master.volumeSizeLimitMB=1024"
if isArgPassed "-volume.max" "$@"; then
Whitespace-only changes.