wiki:Dev/Collaboration

Indico Collaboration

Indico is an open source web application that can be downloaded here. The main development is done at  CERN but many other organizations world-wide are contributing with new developments, improvements and bug fixes.

We welcome anyone to participate in the project and to help make it better.

How to get started and develop for Indico

You have a complete 'getting started' guide here

How to share your contributions with us

What you need to do in order to share your developments with us (so they can be integrated in the official release of Indico) is:

  • Git: we use Git as a source code repository.
  • Follow a few basic rules
  • Good mood, will-power and patience! :)

We use Git as the distributed control version system and it provides a lot of flexibility to the community of developers. If you don't know what Git is, please  google it a bit and surf through some beginner tutorials before reading further.

You should install a public Git repository on your site, something similar to ours at CERN (have a look  here). This way you will be able to share your contributions with the whole Indico community and, of course, we will fetch and integrate them in the official releases.

Therefore, what should you do?

  1. Install Git on a server
  2. Install a web repo for Git, like for instance  gitweb
  3. Create a public git repo. This can be done in two ways:
  • Init:
jdoe@localhost ~/indico$ git init --bare
jdoe@localhost ~/indico$ git clone --bare http://cdsware.cern.ch/repo/cds-indico.git
  1. From the repo in which you are developing (see How to develop), push to your public Git repo the branches you want to share with the community:
jdoe@localhost ~/indico$ git push my-remote-git-repo my-branch-with-new-contributions

So, in short, you will not commit/push to our central repository. You will just publish in your repo your contributions and we will fetch them to integrate.

Basic rules

  • Your code must be compliant with the GNU/GPL license
  • Think in general terms: your contributions should be usable by any other institution. So avoid specific solutions and think in a more abstract way.
  • There are a few rules for software development that you must follow. Please, read from here (pay special attention to the ones in bold).

More detailed information about Git

  • This is how we work with Git here at CERN (in the figure, read Indico where you find Invenio):

http://twiki.cern.ch/twiki/pub/CDS/GitWorkflow/invenio-git-workflow.png

  • Basically, we work like this:
    • Each developer (John) has his own git repo locally (on his PC).
    • John commits every change he makes to his own repo (on his PC).
    • John also has a remote public repo in which he pushes a new feature/improvement/bug-fix that has been finished. For instance,  my repo.
    • The integrator/head developer takes the new feature and merges it with the appropriate branch (master or v0.97-series).
    • The integrator/head developer pushes the new feature to the  Indico public repo.
  • Tips for developers using Git:
    • Things you should do:
      • before creating a branch, pull all the modifications from the origin (here at CERN: http://cdsware.cern.ch/repo/?p=cds-indico.git).
      • create topic branches for your contributions and please name them sensibly (see naming conventions below).
      • rebase before pushing the branch in your public repo, but never again rebase that branch.
      • push to your public repo, only after you have finished and tested the feature you have developed.
    • Things you should never do:
      • do not work on the master branch; create always a new branch for your developments
      • do not rebase or squash on your remote public repo
      • do not rebase a branch in your private repo when that branch has already been pushed into your public repo
    • Naming conventions (branches):
      • Use dashes instead of underscores: i.e. new-foo-feature
      • Use new-* for new developments, refactor-* for refactorings and fix-* for bug fixes. i.e. fix-cache-pathname
  • More about how we work at CERN  here (please, pay special attention to the sections S1, S4, W1, W2, W3, W4, W5, W6 and W7)