Contributions to Sakai from all comers are welcome and encouraged.
Please use these guidelines and the information in README.md to assure that your contributions are compatible with our (evolving) workflow and practices.
The Sakai project participates in the Apereo Welcoming Policy.
Before a code submission will be accepted, you will need to submit a Contributor License Agreement (CLA). This is a one-off process that should only take a few moments to complete. See: https://www.apereo.org/licensing/agreements
To check the status of a CLA, please visit: http://licensing.apereo.org/
Bugs and features against Sakai are tracked in our Jira instance and contributions must reflect a Jira reference number in the messages and git branch names (e.g., SAK-29469), but please don't put these references in the code as over time files become full of them and the same information get be retrieved from git. To file or comment on a bug or feature, you will need a Jira account.
Please take a look at our Confluence pages for pointers on getting started with Sakai development.
Generally when you make a change you will create a pull request that allows other people to examine the code and comment on the changes you've made. Typically you may get comments about:
- Code style - Does it match the existing code in the file?
- Indentation - Are you keeping to the same indentation format (tabs/spaces) and aligning it?
- Internationalisation - Does your code support running in a different language?
- Accessibility - Are you supporting accessability best practices?
- Technical Approach - Is this a sensible technical approach? are there any obvious performance implications?
- Minimal Changes - Are you changing only the lines needed to fix this bug add this feature (no bulk reformatting)?
- Single Issue - Are you fixing one issue?
- Tests - Are the tests passing and have you added tests where sensible/possible?
- Commit comments - Have you linked to the issue you're working on? Have you explained why this is the right fix?
You need to do some initial work to set your local environment. In the steps below, the following references are used:
- local = A copy of Sakai on your workstation (this is where everyone typically does work)
- origin = Your personal copy of Sakai on GitHub (you
clone
this repository on your workstation to make the local copy for everyday work) - upstream = Main Sakai GitHub project (everyone forks this project into their GitHub account to make the origin)
To work on and contribute to Sakai:
-
Fork the central Sakai repository to your own GitHub account
-
Clone
your origin repository onto your local workstation (this example uses HTTPS as the transport mechanism):git clone https://github.com/GITHUBACCOUNTNAME/sakai
-
Add a
remote
to receive updates from the upstream repository:git remote add upstream https://github.com/sakaiproject/sakai
-
Update your local repository frequently to stay up to date:
git checkout master
(switch to localmaster
branch)git pull upstream master
(pull
in any upstream changes)git push origin master
(push
the changes up to the origin)
This branch should always be the same as what is in Sakai's upstream master
and if you make commits into your local master
, and those commits are not accepted into the Sakai master repository, you will forever be maintaining them yourself, which can get very complicated. To make life easier for yourself, use a branch for everything.
To fix a bug or add a feature, the general Git workflow is:
-
Create a local branch using Jira reference for the branch name:
git checkout -b SAK-29469
-
Do work
-
Add changed or new files:
git add -u
-
Make your local commit:
git commit -m "SAK-29469 Add some documentation about contributing"
-
Share branch back to origin:
git push origin SAK-29469
-
Create a pull request (PR) using GitHub from the branch against the upstream
master
for review by others
You will often receive friendly advice to improve or fix the changes you proposed in a p. To update your changes and maintain the existing PR, you should:
-
Change to your local branch:
git checkout SAK-29469
-
Make changes and/or improvements in response to PR comments
-
Add changed or new files:
git add -u
-
Update existing commit (this updates the previous commit rather than making a new one):
git commit --amend -C HEAD
-
Share your new local changes back to the origin branch and the original PR (by force is required for amending commits. You should only ever push by force into your own repo):
git push -f origin SAK-29469
-
Make a comment on the existing PR to alert reviewers to your changes
Security issues are typically handled differently than regular bugs to try to reduce visibility. To get a security fix into Sakai do the following.
- Get access to the security list and security jira work group https://confluence.sakaiproject.org/display/SECWG/Security+Policy by emailing the contact on that page
- Submit a jira with security issue indicated (it's a dropdown box) detailing the security issue
- When fixing the issue, either:
- Request access to private gitlab repo https://gitlab.com/sakaiproject/sakai and submit a merge request. Merge requests are similar to pull requests above.
- The merge request should only have the SAK/KNL/etc number, no additional comments about what was fixed
- If you are unable to submit a merge request, add a diff against the jira
- Request access to private gitlab repo https://gitlab.com/sakaiproject/sakai and submit a merge request. Merge requests are similar to pull requests above.
- Merge requests and new issues are generally reviewed and merged at the next Security WG or Core Team meeting prior to the next minor release of Sakai.
- For high priority issues email the security list directly
More documentation and notes can be found in the Git Setup confluence page.
Questions are always welcome on the Sakai Developer mailing list. To join the list, send an email to [email protected].