Thank you so much for considering contributing to eventually
! 🎉
The current project structure is using a Rust virtual workspace, where all the crates share the same dependencies and lock file. (This might be changed in the future)
The workspace has the following crates:
eventually
: the main crate, users should depend solely on this crateeventually-core
: contains the foundational traits and data structures to enable users to model their domain using Domain-driven Design and Event Sourcingeventually-util
: contains some utility implementations to the aforemetioned traits, and other utilities for the users (e.g. Projector actors, in-memory Event Store, etc)eventually-app-example
: an example application to showcase a (not-so) real-world example of how to use the library
Although eventually-postgres
and eventually-redis
are currently in the workspace, they might be moved outside the repository, into their own respective repository inside the organization. (For more info, check out #131 and #132)
When submitting a PR involving one or more of these crates, please make sure to use the corresponding label.
If you want to contribute but you have no idea how, or what specific features are missing, please check the What next? tracking issue.
Being an open-source project, we are always looking for new contributors, so no matter your level of Event Sourcing skills or language mastery, your PRs are always welcome ❤️
If you want to experiment and/or get familiar with the library, you can consider
trying to write a small application using the crate and send a message to our
Gitter chat to give visibility: we can add your example project to the
repository's README
in order for other users to find it and draw inspiration
from your experience.
Before opening a Pull Request, check the Issues section for an issue that might describe the feature you're considering adding.
If no such issue has been created, feel free to create one and use the rfc
label to discuss technical
implementation before the code review process. You can also reach out to our Gitter chat to discuss new
features or other technical aspects of the crate.
In order to submit a PR, follow these steps:
- Fork the repository
- Clone your fork of the repository in your local machine
- Add the upstream repository in your local machine copy:
git remote add upstream git@github.com:eventually-rs/eventually-rs git fetch upstream
- Create a new branch starting from
upstream/master
:git checkout -b "<branch-name>" --track upstream/master
- Do your magic 🎉
- Once ready, open a PR pointing to
upstream/master
👍
After the PR is created, wait for the CI pipeline to run and the test to pass. Whenever introducing new changes to the repository, make sure your changes are covered by unit or integration tests.
When all PR badges are green, the review process can start. Maintainer and collaborators will try to finish the PR review as fast as possible.
Once the PR has been approved, the maintainer or collaborators will squash-merge the PR onto master
.
Please, include a meaningful PR description, detailing is the scope of the PR and the changes introduced to fulfill it.
If an issue has been opened already, and if the technical discussion has already happened in the issue, you can avoid
including a detailed PR description by linking the issue to the PR (e.g. Closes #..
or Fixes #..
).
The project makes use of Conventional Commits style for the Git commit messages.
Please, make sure to follow the style specifications, and try to leave a clear commit history: this will make the review process easier for reviewers, as the review can be carried commit-by-commit.
As you might've guessed, eventually
is a Rust project.
The CI pipeline will check the code style by using clippy
and cargo check
every time a new commit has been pushed to an open PR.
Make sure you run rustfmt
before committing any changes, as failing to do so will most likely fail the CI pipeline steps.