Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Publish shared library artifacts on GitHub Releases for easy installation #81

@avelino

Description

@avelino

What

Automate publishing of libchrondb shared library and language-specific packages as GitHub Release assets when merging to main, so users can install ChronDB bindings without building from source.

Context

Today the CI workflow (.github/workflows/build-shared-library.yml) builds the shared library and runs binding tests, but the artifacts are only stored as ephemeral GitHub Actions artifacts — they expire and aren't user-facing.

The bindings (bindings/rust/, bindings/python/) expect the compiled libchrondb to exist locally. Without published artifacts, users must:

  1. Install GraalVM + native-image
  2. Clone the repo
  3. Run the full build pipeline (clojure -M:shared-lib && native-image @target/shared-image-args)
  4. Manually configure library paths

This is a significant barrier for anyone who just wants to use ChronDB from Rust or Python.

Expected outcome

1. Shared library tarballs (base artifact)

  • libchrondb-linux-x86_64.tar.gz
  • libchrondb-macos-x86_64.tar.gz (and aarch64 when available)
  • Each contains: libchrondb.{so,dylib}, libchrondb.h, graal_isolate.h

2. Rust crate package

  • Build the crate with the shared library bundled (libchrondb inside the package)
  • Publish .crate as release asset for direct install via cargo install --path
  • Future: publish to crates.io with pre-built binaries per platform

3. Python wheel

  • Build platform-specific wheels (.whl) with libchrondb bundled inside the package
  • Publish wheels as release assets for pip install ./chrondb-*.whl
  • Future: publish to PyPI

4. Documentation

  • How to download and install each package
  • Rust: cargo add or download .crate + set paths
  • Python: pip install from release URL or local .whl
  • Minimal "getting started" example for each language

Why

Users of the language bindings should be able to install with a single command (pip install / cargo add) — not a full JVM/GraalVM toolchain setup. Bundling the shared library inside the language package eliminates the need for users to manage LD_LIBRARY_PATH or CHRONDB_LIB_DIR manually.

Relates to

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions