Thanks for your interest. RustQueue is an actively developed learning project being evolved into a solid, well-documented Rust job queue. Contributions are welcome -- but read this first so your time isn't wasted.
Good contributions right now:
- Bug fixes with a clear reproduction case
- New job handler implementations (Telegram, HTTP webhook, etc.) following the existing
JobHandlerpattern - Documentation improvements (clearer explanations, better examples)
- Test coverage (there is currently none -- this is a known gap)
- Performance observations backed by benchmarks
Not a good fit right now:
- Large architectural changes without prior discussion
- Dependencies that bring significant weight for marginal benefit
- Features not on the roadmap without prior discussion (open an issue first)
main -> always stable, always demo-able
dev -> integration branch, features land here before main
feature/your-feature-name -> your work
fix/your-fix-name -> bug fixes
Always branch off dev, not main. PRs go into dev. When dev is stable it gets merged into main.
git clone https://github.com/Ekojoecovenant/rustqueue.git
cd rustqueue
git checkout dev
cp .env.example .env
# fill in your credentials
sqlx migrate run
cargo check
cargo runIf cargo check fails on a clean clone, open an issue -- that's a bug on our side.
-
Branch off
dev:git checkout dev git pull origin dev git checkout -b feature/your-feature-name
-
Make your changes. Keep commits focused -- one logical change per commit.
-
Run
cargo checkandcargo clippybefore pushing. Don't submit PRs that don't compile. -
Push your branch and open a PR against
dev(notmain).
Before submitting:
- Branches off
dev, targetsdev -
cargo checkpasses -
cargo clippypasses with no new warnings - New job handlers implement
JobHandlerand are registered inHandlerRegistry - New env variables are documented in
.env.example - Migration files included if schema changes were made
- PR description explains what changed and why
This is the most common contribution type and the most welcome. The pattern is straightforward:
- Create
src/executor/your_handler.rs - Implement
JobHandlerfor your struct - Add a constructor that returns
Result<Self>(can fail, e.g. if credentials are invalid) - Register in
HandlerRegistry::new()insrc/executor/mod.rs - Document the expected payload shape in the README
See src/executor/email.rs as a reference implementation.
- Follow existing patterns rather than introducing new ones without discussion
- Prefer
anyhowfor error handling in application code - Add
.context("...")to every?that could use a clearer error message - Keep functions focused -- if a function is doing more than one thing, split it
- No
unwrap()in paths that could realistically fail in production
If you found a bug, include:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Relevant logs or error messages
If you have a feature idea, describe the problem it solves before describing the solution.
By contributing, you agree that your contributions will be licensed under the MIT License.