Skip to content

Latest commit

 

History

History
175 lines (120 loc) · 14 KB

CONTRIBUTING.md

File metadata and controls

175 lines (120 loc) · 14 KB

Contributing to the elimu.ai Community 👩🏽‍💻

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).

Contributor Workflow 🔀

Outside Contributor vs Core Contributor

The first step is to decide what type of contributor you are. In general, every contributor would belong to one of the following:

  1. 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.

  2. 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.

How to Know Which Task to Work On

  1. 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.

    Software Architecture

  2. 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].

  3. 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.

  4. 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.

  5. 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.

How to Implement and Submit Your Work

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):

  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.)

  2. 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.

  3. 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.

  4. 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.

  5. 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).

  6. Once you are ready to receive feedback on your branch, create a pull request for merging it into the main branch.

  7. 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 and gscdev.

  8. 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.

  9. 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

Introduction

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:

Work Flow

  1. 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.

  2. 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):

    screen shot 2017-11-11 at 11 09 21 . screen shot 2017-11-11 at 11 10 56

  3. 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.

  4. 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.

  5. 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.

  6. 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 😀

elimu.ai Community - Open Source Contributors 🙌

     

Nya Ξlimu
Literacy/Numeracy Tutoring

Gema Sánchez
Android Development

Jo G.
Software Architecture

Somila Dayile
Content Creation & UX

Umendra Rajapakshe
Web Development

Keerthi
Web Development

George Karanja
Translation

German Torres
Game Development

Diego Wald
Game Development

Olha Yevtushenko
Game Development

Thomas Barthélémy
Android Development

Vincent Barthélémy
Android Development

Moe Pwint
UX/UI Design

Bikash Agrawal
Big Data & Machine Learning

Mike Schälchli
AI & Machine Learning

Suman Dev
Android Development

Eli Hasson
Android Development

Melissa Fabregas
Voice Acting

Michael Sladoje
AI & Machine Learning

Alin Mureșan
Content Creation

Homayoun
Web3 Development

Sajid Patel
Content Creation

Jain Anuradha
Content Creation

Sandun Abeysooriya
Web Development

Anmol Kumar
Content Creation

Bender Rodríguez
Web3 Development

Shubham Vishwakarma
Web Development

Arvind
Web Development

Dalton Craven
Web3 Development

John Grimm
Web3 Development

Jairo
Web Development

Harsh Acharya
Scaling & Distribution

Amal Jos
Engineering QA

Jaimin
Engineering QA

Chiara Mazza
Linguistics

Sinu John
Android Development

Tuan Nguyen
Android Development

About the elimu.ai Community

elimu ai-tagline