ruvector/docker/scripts/README.md
rUv aca7c53bc8 feat(docker): Add 8 specialized Docker images with publishing infrastructure
- Add Dockerfiles for 8 RuVector components:
  - ruvector-core: Core vector database engine with HNSW indexing
  - ruvector-server: REST API server (port 8080)
  - ruvector-cli: CLI + MCP server for AI integration (port 3000)
  - ruvector-gnn: Graph Neural Networks (GCN, GAT, GIN)
  - ruvector-graph: Neo4j-compatible Cypher graph DB (ports 7687, 7474)
  - ruvector-attention: 39 attention mechanisms (MHA, GQA, MoA)
  - ruvector-cluster: Raft consensus distributed clustering
  - ruvector-sona: Self-Optimizing Neural Architecture

- Add comprehensive README.md for each image with:
  - Docker Hub badges
  - Features and quickstart guides
  - Configuration tables
  - Performance benchmarks

- Add docker-compose.full.yml for 9-service orchestration
- Add build/publish/test scripts in docker/scripts/
- Add GitHub Actions workflow for multi-arch Docker publishing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-07 04:24:28 +00:00

6.4 KiB

RuVector Docker Publishing Scripts

This directory contains scripts for building, testing, and publishing RuVector Docker images.

Scripts

1. build-all.sh

Builds all 8 RuVector Docker images locally.

Usage:

# Build for single platform (default: linux/amd64)
./build-all.sh

# Build for specific platform
./build-all.sh --platform linux/arm64

# Build for multiple platforms (requires buildx)
./build-all.sh --platform linux/amd64,linux/arm64

# Build with specific version
./build-all.sh --version v0.1.5

# Build with custom registry
./build-all.sh --registry myregistry

Features:

  • Builds all 8 images in parallel for single platform
  • Sequential build for multi-platform (more stable)
  • Automatic tagging with version and latest
  • Color-coded output with progress indicators
  • Error handling and reporting

Images Built:

  • ruvector-core
  • ruvector-server
  • ruvector-cli
  • ruvector-gnn
  • ruvector-graph
  • ruvector-attention
  • ruvector-cluster
  • ruvector-sona

2. publish-all.sh

Pushes all built images to Docker Hub.

Usage:

# Set credentials (required)
export DOCKER_USERNAME=ruvnet
export DOCKER_PASSWORD=your-token-here

# Publish with default settings (latest)
./publish-all.sh

# Publish specific version
./publish-all.sh --version v0.1.5

# Dry run to see what would be pushed
./publish-all.sh --dry-run --version v0.1.5

# Use custom registry
./publish-all.sh --registry myregistry

Features:

  • Automatic login to Docker Hub
  • Pushes both version and latest tags
  • Dry-run mode for testing
  • Validates images exist locally before pushing
  • Automatic logout after completion

Requirements:

  • DOCKER_USERNAME environment variable
  • DOCKER_PASSWORD environment variable (use Docker Hub access token)
  • Images must be built locally first (run build-all.sh)

3. test-images.sh

Tests all Docker images to verify they work correctly.

Usage:

# Test all images
./test-images.sh

# Test specific version
./test-images.sh --version v0.1.5

# Test with custom timeout
./test-images.sh --timeout 60

# Test from custom registry
./test-images.sh --registry myregistry

Features:

  • Tests each image with appropriate flags (--help, --version)
  • Special health check for server image
  • Configurable timeout
  • Detailed output and error reporting
  • Summary report at the end

Tests Performed:

  • Image existence check
  • Basic execution test (--help flag)
  • Server startup and health check
  • Exit code validation

GitHub Actions Workflow

The .github/workflows/docker-publish.yml workflow automates the entire build, test, and publish process.

Triggers

  1. Tag Push: Automatically runs when you push a tag matching v*

    git tag v0.1.5
    git push origin v0.1.5
    
  2. Manual Dispatch: Run manually from GitHub Actions tab

    • Go to Actions → Docker Publish → Run workflow
    • Enter version (e.g., v0.1.5)

What It Does

  1. Build Stage:

    • Builds all 8 images using matrix strategy
    • Supports linux/amd64 and linux/arm64 platforms
    • Uses Docker buildx for multi-platform builds
    • Implements layer caching for faster builds
    • Tags with version and latest
  2. Test Stage:

    • Pulls each published image
    • Runs basic functionality tests
    • Validates server startup
    • Checks image sizes
  3. Release Stage:

    • Creates GitHub Release with notes
    • Lists all published images
    • Includes usage examples
    • Links to docker-compose.yml

Secrets Required

Configure these in your GitHub repository settings (Settings → Secrets → Actions):

  • DOCKER_PASSWORD - Docker Hub access token (or password)

Matrix Strategy

The workflow uses a matrix to build all images in parallel:

strategy:
  matrix:
    image:
      - ruvector-core
      - ruvector-server
      - ruvector-cli
      - ruvector-gnn
      - ruvector-graph
      - ruvector-attention
      - ruvector-cluster
      - ruvector-sona

Complete Publishing Workflow

Local Development

# 1. Build all images
cd /workspaces/ruvector/docker/scripts
./build-all.sh --version v0.1.5

# 2. Test images
./test-images.sh --version v0.1.5

# 3. Publish (requires credentials)
export DOCKER_USERNAME=ruvnet
export DOCKER_PASSWORD=your-docker-hub-token
./publish-all.sh --version v0.1.5
# 1. Commit your changes
git add .
git commit -m "Release v0.1.5"

# 2. Create and push tag
git tag v0.1.5
git push origin v0.1.5

# 3. GitHub Actions automatically:
#    - Builds all images for amd64 and arm64
#    - Tests all images
#    - Publishes to Docker Hub
#    - Creates GitHub Release

Platform Support

All images are built for:

  • linux/amd64 - Intel/AMD 64-bit
  • linux/arm64 - ARM 64-bit (Apple Silicon, AWS Graviton, etc.)

Docker Hub Repository

Published images are available at:

Troubleshooting

Build Failures

# Check Docker buildx
docker buildx ls

# Create new builder if needed
docker buildx create --name ruvector-builder --use

# Inspect builder
docker buildx inspect --bootstrap

Login Issues

# Use access token instead of password
# Create at: https://hub.docker.com/settings/security

# Test login
echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin

Multi-platform Build Issues

# Install QEMU
docker run --privileged --rm tonistiigi/binfmt --install all

# Verify platforms
docker buildx inspect --bootstrap

Best Practices

  1. Always test locally before publishing
  2. Use semantic versioning for tags (v0.1.5, v1.0.0)
  3. Use access tokens instead of passwords
  4. Enable 2FA on Docker Hub account
  5. Review changes in dry-run mode first
  6. Monitor image sizes to keep them optimized
  7. Use CI/CD for consistent, automated releases

Version Management

The scripts automatically handle version formatting:

  • Input: v0.1.5 or 0.1.5
  • Output: 0.1.5 (v prefix stripped)
  • Tags created: 0.1.5 and latest

Support

For issues or questions: