(This section is about contributing code, if you want to contribute documentation see Contributing to CKAN's Documentation.)
CKAN is a free software project and code contributions are welcome. To contribute code to CKAN you should fork CKAN to your own GitHub account, push your code to a feature branch on your fork, then make a pull request for your branch on the central CKAN repo. We'll go through each step in detail below...
If you don't have access to the central CKAN repo on GitHub you should sign up for a free account on GitHub.com and fork CKAN, so that you have somewhere to publish your CKAN code.
You can now clone your CKAN fork to your development machine, create a new branch to commit your code on, and push your branch to your CKAN fork on GitHub to share your code with others.
Work for a feature or bug fix should be developed on a feature or bug branch forked from master. Each individual feature or bug fix should be developed on its own branch. The name of the branch should include the ticket number (if this work has a ticket in the CKAN issue tracker), the branch type ("feature" or "bug"), and a brief one-line synopsis of the purpose of the ticket, for example:
2298-feature-add-sort-by-controls-to-search-page 1518-bug-upload-file-with-spaces
Naming branches this way makes it easy to search for a branch by its ticket number using GitHub's web interface.
Generally, follow the commit guidelines from the Pro Git book:
- Try to make each commit a logically separate, digestible changeset.
- The first line of the commit message should concisely summarise the changeset.
- Optionally, follow with a blank line and then a more detailed explanation of the changeset.
- Use the imperative present tense as if you were giving commands to the codebase to change its behaviour, e.g. Add tests for..., make xyzzy do frotz..., this helps to make the commit message easy to read.
If your commit has a ticket in the CKAN issue tracker put the ticket number
at the start of the first line of the commit message like this: [#123]
.
This makes the CKAN release manager's job much easier!
Here is an example CKAN commit message:
[#2505] Update source install instructions Following feedback from markw (see #2406).
When developing on a branch you should periodically pull the latest commits from the master branch of the central CKAN repo into your feature branch, to prevent the two branches from diverging from each other too much and becoming difficult to merge.
If you haven't already, add the central repo to your development repo as a remote:
git remote add central git://github.com/okfn/ckan.git git fetch central
Now, every now and then pull the latest commits from the central master branch into your feature branch. While on your feature branch, do:
git pull central master
Once your work on a branch is complete and is ready to be merged into the master branch, create a pull request on GitHub. A member of the CKAN team will review your code and provide feedback on the pull request page. The reviewer may ask you to make some changes to your code. Once the pull request has passed the code review, the reviewer will merge your code into the master branch and it will become part of CKAN!
When submitting a pull request:
- Your branch should contain code for one feature or bug fix only, see Feature Branches.
- Your branch should contain new or changed tests for any new or changed code.
- Your branch should contain updates to the CHANGELOG file briefly summarising your code changes.
- Your branch should contain new or updated documentation for any new or updated code, see Contributing to CKAN's Documentation.
- Your branch should be up to date with the master branch of the central CKAN repo, see Keeping Up with master.
- All the CKAN tests should pass on your branch, see Testing for Developers.
When merging a feature or bug branch into master:
- Use the
--no-ff
option in thegit merge
command,
When writing code for CKAN, try to follow our coding standards.
Note: getting started with contributing to docs.ckan.org is a little complicated. An easier way to contribute documentation to CKAN is to contribute to the CKAN Wiki. Docs started on the wiki can make it onto docs.ckan.org later.
docs.ckan.org is created using Sphinx. The source files are in the doc directory of the CKAN git repo. To edit these docs:
If you haven't already, create a Python virtual environment (virtualenv), activate it and clone the CKAN git repo into it. In this example we'll create a virtualenv in a folder called
pyenv
:virtualenv --no-site-packages pyenv . pyenv/bin/activate pip install -e 'git+https://github.com/okfn/ckan.git#egg=ckan'
Install the Python dependencies necessary for building the CKAN docs into your virtualenv:
pip install -r pyenv/src/ckan/pip-requirements-docs.txt
Fetch the git submodule that contains CKAN's custom Sphinx theme:
cd pyenv/src/ckan git submodule init git submodule update
Note: you may occassionally have to run
git submodule update
again, when someone updates the submodule.Make changes to the documentation by using your text editor to edit the
pyenv/src/ckan/doc/*.rst
files.Build the documentation locally, to preview your changes:
python setup.py build_sphinx
Now you can open the built HTML files in
pyenv/src/ckan/build/sphinx/html
to see your changes, e.g.:firefox pyenv/src/ckan/build/sphinx/html/index.html
.Finally, when you're ready to submit your contributions to the CKAN project, follow the same process as for contributing code, see Contributing to CKAN.