π€ Contributing & Development Guidelines¶
Thank you for your interest in contributing to Tabularix! This document provides instructions for setting up your local environment, running static analysis checks, executing test suites, and preparing packages for release.
π οΈ Environment Setup¶
Tabularix is a hybrid library with a high-performance Rust core and Python bindings.
1. Using VS Code Dev Containers (Recommended)¶
The easiest and recommended way to get started is by using VS Code Dev Containers. The project includes a fully configured .devcontainer directory containing all necessary compilers, Python versions, formatters, and linters pre-installed.
- Clone the Repository:
- Open in VS Code: Open the folder in VS Code, and click the "Reopen in Container" prompt.
2. Manual Environment Setup (Alternative)¶
If you prefer to configure your environment manually, local toolchains installation is managed using mise.
- Install Global Prerequisites:
Mise usage
To run development commands directly (e.g. just build), you can activate mise in your current shell session by running eval "$(mise activate bash)" (or equivalent for your shell). Otherwise, prefix the commands with mise exec -- (e.g. mise exec -- just build). The examples below assume mise has been activated.
-
Clone the Repository:
-
Set Up Toolchains: Install all correct compilers, runtimes, and linters defined in
mise.toml: -
Build the Project: Compile the Rust engine extension and build the Python wheel:
π Code Style & Static Analysis¶
We enforce strict formatting and quality checks across all files. Always run the static analysis suite before submitting code:
# Execute all pre-commit hooks, formatting, and linters.
just prek
# Update the static analysis engine and hook versions.
just prek-hooks-update
The just prek command validates:
- Rust formatting (
cargo fmt) and linting (cargo clippy). - Python linting/formatting (
ruff). - JSON, YAML, and TOML validation.
- Markdown and spellchecking.
π§ͺ Testing Suites¶
All contributions must pass the entire test suite before merging.
π Building Documentation¶
The documentation site is powered by Zensical.
# Run a local development documentation server.
just docs-serve
# Build the static HTML site (output to site/ directory).
just docs-build
π¦ Release Preparation¶
If you are preparing a new release, use the automated recipe to branch, update the changelog, and bump versions:
π Release Rollback Action Plan¶
In the event of a critical issue discovered immediately after a package release, follow these steps to yank the release and prevent installation of the broken package version.
1. Yank the Package on PyPI¶
Yanking a package marks the version as broken. It prevents pip install from installing it by default, but does not break existing dependencies that explicitly pin to the exact version.
- Via PyPI Web Interface:
- Log in to PyPI.
- Navigate to Project -> tabularix -> Manage.
- Select Options next to the specific version (e.g.
0.1.0). - Click Yank Release and provide a reason (e.g., critical regression).
2. Delete the Git Tag¶
Delete the git tag locally and remotely to prevent the CI/CD pipeline from referencing the broken release tag:
3. Deploy a Hotfix Release¶
- Create a hotfix branch from
main(e.g.chore/release-v0.1.1). - Fix the regression and verify that all unit/acceptance tests pass cleanly.
- Update version metadata and CHANGELOG.
- Merge the PR, pull the changes to
main, and push the new tag (e.g.v0.1.1) to trigger the CI/CD release workflow.