Thank you for your interest in contributing to the Sovereign Query Engine.
Open a GitHub issue for bugs, feature requests, or questions. Include:
- Bug reports: Steps to reproduce, expected vs actual behavior, SQE version, OS, Rust version
- Feature requests: What you want, why you need it, and how you think it should work
- Questions: Check existing issues and docs first. If the answer is not there, open an issue
- Fork the repository and create a feature branch from
main - Never push directly to main -- all changes go through pull requests
- One logical change per PR -- keep pull requests focused and reviewable
Use a prefix that describes the type of change:
feat/-- new feature or capabilityfix/-- bug fixrefactor/-- code restructuring without behavior changedocs/-- documentation onlytest/-- adding or updating testsperf/-- performance improvement
# Fork and clone
git clone https://github.com/YOUR_USERNAME/sqe.git
cd sqe
# Create a feature branch
git checkout -b feat/my-feature
# Make changes, then commit
git add -p
git commit -m "feat: add my feature"
# Push and open a pull request
git push -u origin feat/my-featureThen open a pull request on GitHub against main.
We use Conventional Commits:
feat:-- new feature or capabilityfix:-- bug fixdocs:-- documentation onlychore:-- maintenance, dependencies, CIrefactor:-- code restructuring without behavior changetest:-- adding or updating testsperf:-- performance improvement
Examples:
feat: add AWS Glue catalog backend
fix: handle expired JWT tokens in bearer auth
docs: update pluggable catalogs design spec
SQE follows standard Rust conventions:
- Formatting: Run
cargo fmt --allbefore committing. CI enforces this. - Linting:
cargo clippy --all-targets --all-features -- -D warningsmust pass with zero warnings. - No unsafe code without a comment explaining why it is necessary.
- Error handling: Use
Resultand the project's error types. No.unwrap()in production code.
All contributions must include appropriate tests. Before submitting a PR:
# Format check
cargo fmt --all -- --check
# Static analysis (must pass with zero warnings)
cargo clippy --all-targets --all-features -- -D warnings
# Unit tests
cargo test --all
# Security advisory scan
cargo audit
# Dependency policy check
cargo deny check advisories
# Integration tests (brings up its own Polaris + RustFS stack via Docker)
make test-integrationThe integration suites have no CI equivalent (issue #387: the shared runners have no working docker-in-docker sidecar, so those jobs were removed rather than left permanently yellow). Run them locally before merging anything that touches the read or write path:
make test-integration # full suite
make test-integration FILTER=test_ctas_roundtrip # one test by substring
make test-distributed # coordinator + 2 workers
make test-integration-down # tear the stack back downThe stack is deliberately left running afterwards: bootstrap is idempotent, so a rerun skips the bring-up. A preflight names any container holding one of the fixed host ports, which is the usual failure when a bench or parity rig is still up from an earlier session.
| Suite | Location | Requires |
|---|---|---|
| Unit tests | crates/*/src/ (#[cfg(test)] modules) |
Nothing |
| Integration tests | crates/sqe-coordinator/tests/ |
make test-integration (Docker) |
| Access-control e2e | crates/sqe-coordinator/tests/it/ |
make test-access-control (Ranger stack) |
| Quickstart scenarios | quickstart/*/run.sh --check |
scripts/test.sh scenario all |
| E2E tests | scripts/e2e-test.sh |
Full stack |
| Benchmarks | sqe-bench crate |
Polaris + S3 stack |
- All PRs require at least one review before merge
- CI must pass (fmt, clippy, tests, audit, deny)
- Benchmark-sensitive changes should include benchmark results
If your change affects user-facing behavior, update the relevant docs. Key files:
README.md-- roadmap checklist and feature overviewdocs/site/compare/features.md-- detailed feature comparisondocs/site/compare/trino-compatibility.md-- Trino SQL compatibility matrix
By contributing to SQE, you agree that your contributions will be licensed under the Apache License 2.0.