Skip to content

Developer: Contributing

primalmotion edited this page Jun 15, 2012 · 5 revisions

You want to contribute to Archipel? Great! There's a lot of things you can do, according to your skills. This page describes how you can contribute to the project.

I'm not a coder

There's a lot of things to do around Archipel which doesn't imply coding.

  • Installation manual (and translation)
  • User manual (and translation)
  • Tracking bugs (and post them to the tracker)
  • Packaging Archipel for different distribution
  • Support people on the IRC channel (irc://irc.freenode.net/#archipel)
  • Blogging, tweeting, posting, shouting in the street to convict the world Archipel rocks
  • Design some cool icons set

Or simply donate some bucks or some hardware :)

I'm a coder !

You have skills in python or Cappuccino (or Cocoa, as the framework is very similar)? You can help us.

Fork me!

First of all you need to fork Archipel's official repository. You'll need a github account to do this. Then you can clone your fork to your computer.

    git clone git@github.com:<YOUR_GITHUB_USERNAME>/Archipel.git

Add upstream repository

You'll also want to be able to update your copy from the official repo. So let's add the upstream repo:

     cd Archipel
     git remote add upstream https://github.com/ArchipelProject/Archipel.git

Now you should have two remote repositories:

    git remote
    > origin 
    > upstream

Create your integration branch:

You'll need an integration branch to merge all the new wonderfull features you'll add:

    git checkout -b integ
    > Switched to a new branch 'integ'
    git branch
    > * integ
    > * master

Master is sacred

Note this, this is important : you will never commit or merge into your master branch. Master is master. You will use to get the upstream changes, and only that.

Topic branch

So you want to fix a bug, add a great feature ? No problem, you create a new branch (because remember you will never commit or merge into your master branch!) :

    git checkout -b feature-world-conquest

Then you work in this branch, commit when you want, revert, etc. In short: you work. If you work on two different topics (add the world conquest feature and fix a bug) you create a topic branch for each.

Test your changes

So you have fixed a bug in branch fix-the-awfull-bug and add a feature in branch feature-world-conquest. You will merge these branches into your integ branch.

    git checkout integ
    git merge fix-the-awfull-bug
    git merge feature-world-conquest

and you test your changes.

Fetch master

It's been a while you work on different topics. You want to test your changes with last upstream changes :

    git checkout master
    git fetch upstream
    git merge upstream/master

At this time your sacred branch master is up-to-date. To test it just merge it into your integration branch:

    git checkout integ
    git merge master

Resolve conflicts if any, and try.

OK, it works

Now, you want to publish your changes in the main repository. You will push to your fork on github. to do this

    git push origin fix-the-awfull-bug
    git push origin feature-world-conquest

You go to github at your Archipel fork, then for each new topic branches, you select it, then do a pull request. We'll review the code, eventually merge it in the upstream repo. Then you'll be able to fetch upstream changes, and eventually drop your old topic branches.

Some tips

  • You should fetch master quite often
  • Always create a topic branch from the master branch
  • DO NOT work on master branch