The purpose of elimu.ai is to provide disadvantaged children with access to quality basic education. We believe that a quality basic education is the right of every child no matter her social or geographical background.
For this reason, we build educational technology that teaches a child to read, write and calculate fully autonomously, without guidance from qualified teachers.
Since elimu.ai is an open source project, anyone is welcome to contribute towards this goal. We welcome different skills, cultures, perspectives, attitudes, and experiences. Also see our Code of Conduct.
This document explains the step-by-step process and guidelines for contributing to any of the repositories in the elimu.ai GitHub organization.
Each repository has a maintainer responsible for reviewing code submitted by contributors. The appointment of maintainers and lead maintainers is based on previous contributions (meritocracy).
The first step is to decide what type of contributor you are. In general, every contributor would belong to one of the following:
-
Outside contributor
Being an outside contributor means that you have not been added to the elimu.ai GitHub organization. In practice this means that you do not have access to create new repositories or repository branches.
-
Core contributor
Being a core contributor means that you have been added to the elimu.ai GitHub organization. This gives you access to create new repositories and repository branches.
-
Each Android application has its own GitHub repository. Start by identifying a repository in which you would like to contribute: https://github.com/elimu-ai. And to get an understanding of the overall software architecture, see https://github.com/elimu-ai/wiki/blob/main/SOFTWARE_ARCHITECTURE.md.
-
Look at the code in the repository to see if your skills match those required. If in doubt, post your questions in Discord or send an e-mail to [email protected].
-
When you have selected a repository, click the "Projects" tab of the repository. Within each project you will see a collection of issues, and the state of each one (To do, In progress, Done). Feel free to start working on any issue in the left-hand "To do" column.
-
If you feel lost, take a look at the issues labeled with
good first issue
. These are tasks that are considered as good entry-points for first-time contributors. See example.You can also check Tokenlog, which is a list of issues prioritized by $ELIMU token holders.
-
You are also welcome to create new GitHub issues yourself. For example, if you have discovered a bug, or want to suggest a new feature, press the "New issue" button.
Once you have identified a task to work on, there is a specific workflow that you should follow. This workflow is mostly identical for both outside and core contributors, except from the way to create a new GitHub branch to work on (Step 1):
-
If you are an outside contributor, fork the repository to your own GitHub account. (If you are a core contributor, you will create a new branch directly in the main repository.)
-
Create a new branch for the GitHub issue that you will be working on. If, for example the issue you have picked is titled "Upgrade to the latest Gradle version" and has the issue number 57, create a new branch with a title like
chore: #57 Upgrade to the latest Gradle version
. By having the issue number in the branch name, it's easier to understand which issue the branch is for. -
Remember to include a reference to the GitHub issue number for each commit to make it easier for future contributors to understand each code change. E.g.
chore: #57 Upgrade to Gradle 4.1
. -
Keep each commit small so that diffs are easy to read and understand for people looking at your code in the future. A pull request should always be focused to doing one thing, for example fixing a bug or adding a new feature, but not a mixture. Avoid large commits and pull requests which attempt to do too much at once, as this makes code review difficult.
-
If you want to add things like formatting fixes or refactoring, etc, do not mix those with the actual code change related to an issue. To make the actual code change easier to read, separate refactoring into a new branch (and a new issue).
-
Once you are ready to receive feedback on your branch, create a pull request for merging it into the
main
branch. -
Every pull request requires at least one approved peer review before being merged, so add at least one person as a code reviewer of your pull request. To find out who to add, click "Insights" → "Contributors" too see an overview of the most active contributors for each repository. If you are unsure who to add, use these:
nya-elimuai
,jo-elimu
andgscdev
. -
Once your pull request has been reviewed and approved, it can be merged. The person who created the branch (you) will be the person responsible for merging the branch. So the peers reviewing your code will not merge the branch; that is your responsibility.
-
If you consider the issue complete (code reviewed and tested), merge and delete the branch, and move the GitHub issue to the "Done" column. Well done! 👏
Workflow Example: webapp
As an outside collaborator, you are free to fork the repository and create pull requests from your fork.
However, as a core contributor who has been added to the GitHub organization, the work flow looks like this:
-
Select a GitHub issue to work on. Either select an existing issue from https://github.com/elimu-ai/webapp/projects or create a new one.
-
Create a branch for the GitHub issue. For example, if your GitHub issue is titled "Update Java version" and has the issue number 567, create a new branch with the title "#567 Update Java version" by pressing the branch button (or by using GitHub Desktop):
-
Switch to the branch you created and implement your code changes on that branch. Remember to include the GitHub issue for each commit to make it easier for future contributors to understand each code change.
-
Once ready for testing, create a pull request for your branch for merging it into the
main
branch. Your pull request needs at least one approved review in order to be merged. When assigning reviewers, add one or more of the project's maintainers:If the maintainers are too slow to get back to you, send an e-mail to [email protected] or contact us via Discord.
-
Once your pull request has been approved by at least one project maintainer, press the "merge" button. This will merge your code changes into the
main
branch and deploy them to the test servers at https://<language>
.test.elimu.ai. -
If all of the regression tests pass (see Jenkins, ask a maintainer to deploy the changes to the production servers at https://
<language>
.elimu.ai.
If any of the above steps are unclear, or you have any other questions or comments, please reach out via [email protected] or Discord. Thank you for contributing 😀
- For a high-level description of the project, see https://github.com/elimu-ai/wiki/blob/main/README.md.
- For project milestones, see https://github.com/elimu-ai/wiki/projects.