Zulip uses a forked-repo and rebase-oriented
workflow.. This means that all contributors create a fork of the Zulip
repository they want to contribute to and then submit pull
requests to the upstream repository to have their contributions reviewed and
accepted. We also recommend you work on feature branches.

The following steps you’ll only need to do the first time you setup a machine
for contributing to a given Zulip project. You’ll need to repeat the steps for
any additional Zulip projects (list) that you work on.

(The --configpull.rebase option configures Git so that gitpull
will behave like gitpull--rebase by default. Using gitpull--rebase to update your changes to resolve merge conflicts is
expected by essentially all of open source projects, including Zulip.
You can also set that option after cloning using gitconfig--addpull.rebasetrue, or just be careful to always run gitpull--rebase, never gitpull).

Note: If you’ve cloned the repository using a graphical client, you may already
have the upstream remote repository configured. For example, when you clone
zulip/zulip with the GitHub desktop client it configures
the remote repository zulip and you see the following output from gitremote-v:

The Zulip Server project is configured to use Circle CI
and Travis CI to test and create builds upon each new commit
and pull request. CircleCI is the primary CI that runs frontend and backend
tests across a wide range of Ubuntu distributions. Travis CI is used only for
running the end-to-end production installer test.

CircleCI and Travis CI are free for open source projects and it’s easy to
configure for your own fork of Zulip. After doing so, CircleCI and Travis
CI will run tests for new refs you push to GitHub and email you the outcome
(you can also view the results in the web interface).

Running CI against your fork can help save both your and the
Zulip maintainers time by making it easy to test a change fully before
submitting a pull request. We generally recommend a worfklow where as
you make changes, you use a fast edit-refresh cycle running individual
tests locally until your changes work. But then once you’ve gotten
the tests you’d expect to be relevant to your changes working, push a
branch to run the full test suite in CircleCI and Travis CI before
you create a pull request. While you wait for CircleCI and Travis CI
to run, you can start working on your next task. When the tests finish,
you can create a pull request that you already know passes the tests.

First, sign in to Circle CI with your GitHub account and authorize
CircleCI to access your GitHub account and repositories. Once you’ve logged
in click on Add Projects in right sidebar. This will list all your GitHub
repositories. Now goto the row of Zulip and click on Set Up Project.

First, sign in to Travis CI with your GitHub account and authorize
Travis CI to access your GitHub account and repositories. Once you’ve done
this, Travis CI will fetch your repository information and display it on your
profile page. From there you can enable integration with
Zulip.