Skip to content

Create Release Pipeline and Library Packaging ( Both executable and lib )  #26

@ngocbd

Description

@ngocbd

MerkleKV currently lacks proper release management and packaging for distribution as a library. We need to establish a release pipeline and package the project for easy consumption by other developers and applications.

Requirements

1. Release Management

  • Semantic Versioning: Implement proper semantic versioning (e.g., v1.0.0)
  • Release Notes: Auto-generate release notes from commit messages and PRs
  • Tagged Releases: Create Git tags for each release
  • Release Artifacts: Build and attach binaries for multiple platforms

2. Library Packaging

Rust Crate (Primary)

  • Cargo.toml Configuration: Proper metadata for crates.io publication
  • Library Structure: Expose public APIs for embedding MerkleKV
  • Documentation: Comprehensive rustdoc documentation
  • Examples: Usage examples for library integration
  • Feature Flags: Optional features (replication, sync, etc.)

Binary Distribution

  • Multi-platform Binaries: Linux, macOS, Windows
  • Docker Images: Official Docker images
  • Package Managers: Consider Homebrew, APT, etc.

3. Library API Design

The library should expose clean APIs for:

// Basic usage as embedded storage
use merkle_kv::{MerkleKV, Config};

let config = Config::default();
let mut kv = MerkleKV::new(config)?;

kv.set(\"key\", \"value\")?;
let value = kv.get(\"key\")?;
kv.delete(\"key\")?;

// Advanced usage with custom configuration
let config = Config::builder()
    .data_dir(\"/path/to/data\")
    .enable_replication(true)
    .enable_sync(true)
    .build()?;

let kv = MerkleKV::with_config(config)?;

4. CI/CD Pipeline

GitHub Actions Workflows

  • Build and Test: Multi-platform testing
  • Release Automation: Triggered on version tags
  • Cargo Publish: Automatic crates.io publishing
  • Docker Build: Multi-arch container images
  • Binary Releases: Cross-compiled binaries

Release Workflow Example

name: Release
on:
  push:
    tags: ['v*']
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build release artifacts
      - name: Publish to crates.io
      - name: Create GitHub release
      - name: Upload binaries

5. Documentation Requirements

  • API Documentation: Complete rustdoc coverage
  • User Guide: How to use as a library vs standalone server
  • Integration Examples: Real-world usage patterns
  • Migration Guide: Upgrading between versions
  • Performance Benchmarks: Published performance characteristics

6. Packaging Structure

merkle-kv/
├── Cargo.toml              # Main library configuration
├── src/
│   ├── lib.rs             # Library entry point
│   ├── bin/
│   │   └── merkle-kv.rs   # Binary server
│   └── ...
├── examples/              # Usage examples
├── benches/               # Benchmarks
└── README.md             # Installation and usage

7. Release Checklist Template

For each release:

  • Update version numbers
  • Update CHANGELOG.md
  • Run full test suite
  • Update documentation
  • Create release tag
  • Publish to crates.io
  • Create GitHub release
  • Update Docker images
  • Announce release

Success Criteria

  • v1.0.0 Release: First stable release published
  • Crates.io: Package available on crates.io
  • Documentation: Complete docs.rs documentation
  • Examples: Working integration examples
  • CI/CD: Automated release pipeline
  • Multi-platform: Binaries for major platforms
  • Docker: Official container images

Timeline

  • Phase 1 (Week 1): Library API design and Cargo.toml setup
  • Phase 2 (Week 2): CI/CD pipeline and release automation
  • Phase 3 (Week 3): Documentation and examples
  • Phase 4 (Week 4): v1.0.0 release and publication

Related Issues

This builds upon:

  • Integration test suite (already implemented)
  • Protocol validation fixes (recently completed)
  • Performance benchmarks (available in test suite)

Labels: enhancement, release-management, packaging, library
Priority: High
Effort: Large"

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementNew feature or request

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions