Thanks for your interest in improving the project! This document provides a guideline for general contributions to FAAST.
There are there general ways you can contribute to this repo:
- Proposing an enhancement or new feature
- Reporting a bug or regression
- Contributing changes to the source code
For the first two, refer to the GitHub Issues which guides you through the available options along with the needed information to collect.
Please open an issue before adding a new feature or making major changes to existing one. It allows the community to discuss the relevancy of the issue, as well as the caveats one should avoid when implementing it. Exceptions to this rule include fixing non-functional source such as code comments, documentation or other supporting files.
Proposing source code changes is done through GitHub's standard pull request workflow.
Fork the repository on GitHub and clone it locally.
To setup your development environment, please refer to the README.
Then, create a new branch for your changes:
git checkout -b my-branch-name
Finally, open a pull request on the Lambo repository and compare it across the main
branch.
If your branch is a work-in-progress then please start by creating your pull requests as draft, by clicking the down-arrow next to the Create pull request
button and instead selecting Create draft pull request
.
This will defer the automatic process of requesting a review from the FAAST team and significantly reduces noise until you are ready. Once you are happy, you can click the Ready for review
button.
A good pull request includes:
- A high-level description of the changes, including links to any issues that are related by adding comments like
Resolves #NNN
to your description. See Linking a Pull Request to an Issue for more information. - An up-to-date parent commit. Please make sure you are pulling in the latest
main
branch and rebasing your work on top of it, i.e.git rebase main
. - Unit tests where appropriate. Bug fixes will benefit from the addition of regression tests. New features will not be accepted without suitable test coverage!
- No more commits than necessary. Sometimes having multiple commits is useful for telling a story or isolating changes from one another, but please squash down any unnecessary commits that may just be for clean-up, comments or small changes.
- No additional external dependencies that aren't absolutely essential. Please do everything you can to avoid pulling in additional libraries/dependencies into
Cargo.toml
as we will be very critical of these.
Our commit convention follow the Conventional Commits
To be more explicit, we will describe below the commit conventions message.
Each commit message consists of a header, a body and a footer. The header has a special format that includes a type, a scope and a subject:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Any line of the commit message cannot be longer than 100 characters! This allows the message to be easier to read on GitHub as well as in various git tools.
The footer should contain a closing reference to an issue if any.
Samples:
Commit message with no body:
fix: add tty & fix typo on docker-compose
Commit message with scope:
feat(agent): return error message to serial
If the commit reverts a previous commit, it should begin with revert:
, followed by the header of the reverted commit. In the body it should say: This reverts commit <hash>.
, where the hash is the SHA of the commit being reverted.
Must be one of the following:
- build: Changes that affect the build system or external dependencies (example scopes: cargo, make...)
- chore: Some housekeeping activity
- ci: Changes to our CI configuration files and scripts
- docs: Documentation only changes
- feat: A new feature
- fix: A bug fix
- perf: A code change that improves performance
- refactor: A code change that neither fixes a bug nor adds a feature
- revert: A commit revert
- test: Adding missing tests or correcting existing tests
The scope should be the name of the related Lambdo component if applicable.
The following is the list of supported scopes:
- agent
- api
- initramfs
- shared
The scope of application is optional and only needs to be specified if the modifications concern one of the components listed above.
The subject contains a succinct description of the change:
- use the imperative, present tense:
change
notchanged
norchanges
- don't capitalize the first letter
- no dot (.) at the end
Just as in the subject, use the imperative, present tense: change
not changed
nor changes
. The body should include the motivation for the change and contrast this with previous behavior.
The footer should contain any information about Breaking Changes and is also the place to reference GitHub issues that the commit closes.
Breaking Changes should start with the word BREAKING CHANGE:
with a space or two newlines. The rest of the commit message is then used for this.
Please consider signing the commit message at least with Signed-Off-By
. This is a way to certify that you wrote the code or otherwise have the right to pass it on as an open-source patch. The process is simple: if you can certify the Developer's Certificate of Origin (DCO).
To perform a sign-off with git
, use :
git commit -s #(or --signoff)
If you have questions about the contribution process, please start a GitHub discussion or send your question to the contact email address: contact@faast-rt.com.