Note: This process is tailored to our specific needs and tools at makandra Show archive.org snapshot . While it will certainly not apply to all (especially larger teams), we think it is a helpful starting point. Compare also the Gatekeeping: Guide for gatekeeper card.
In order to reduce the number of rejects we get from clients, we want to review all code written before it goes to the staging server.
If your project manager wants to do gatekeeping on a project, as a developer you need to follow the following guidelines (e.g. by using something like this story checklist template).
You're generally not allowed to commit anything directly to master, except if you're asked to, or if you're fixing a reject from our client.
If you start a new feature, you need to:
Set the story to "Started" in Pivotal Tracker
Pull the most current master branch
Branch off the master with geordi branch
or manually with:
git checkout master
git checkout -b FEATURE_BRANCH_NAME
If your feature depends on another feature branch that is not yet in the master, branch off that branch instead.
Name your branch like sort-users-by-name-73624
, i.e. start with a shortened story description, then the PT story id . You can also start your branch with your initials, so that everyone can see who is working on the branch, e.g. ab/sort-users-by-name-73624
.
Code and commit like usual. You may leave WIP commits, since they will be cleaned up later. You may follow this workflow.
When you're done with your feature and tests are green, and your changes pass our merge request checklist:
Within your feature branch, merge the current master and push using:
git pull origin master
git push -u origin feature-branch-name
You're encouraged to use git pull --rebase
if you know how it works.
Open a merge request by clicking the link Gitlab prints on push.
To open a merge request manually:
Set the story to "Finished" in the Pivotal Tracker
Your project manager will either merge and deploy the changes, or he will ask you to do it yourself in a note to the merge request (you will receive an e-mail)
If you're supposed to merge yourself, you need to
Get the latest master
Squash your commits using git rebase -i master
or something similar
Merge into master
git checkout master
git merge feature-branch-name
Push
Delete the feature branch with
git branch -D feature-branch-name
git push origin :feature-branch-name
Deploy to staging
Set the corresponding PT story to “delivered”
Close the merge request on GitLab (happens automatically when you merge or delete the remote branch)
If your code does not pass review, your story will be rejected on PT, with an explanation either on PT or as a note in the merge request. You'll get an e-mail either way.
Prepare by doing a
git checkout FEATURE_BRANCH_NAME
git pull origin master
Now make your fixes. Again, squash WIP commits, but do not squash commits that have already been reviewed or merged into master. The gatekeeper needs to be able to see your changes separately.
When you're done, you may decide yourself (unless your project manager said otherwise),
Since your branch has already been merged into master, you can make fixes directly in master and do not have to get them reviewed. If you want to get them reviewed, make a new feature branch for it.
Set the story to "Started" in Pivotal Tracker and track it's state as usual.
As a good default, all non-trivial commits should be reviewed. However, your gatekeeper is allowed to make exceptions for changes where they don't think a review would add any value, e.g. for trivial changes (like fixing a typo). Another exception are client rejects, unless you want to get the fix reviewed.
If a change does not need to be reviewed, your project manager will add a note to the story that the code should be commited into the master branch without going through a merge request.
In some cases it will be necessary to work on things in parallel. In this case, you are allowed to branch off someone else's (unfinished) feature branch, but please tell the person you're doing this.
You can keep working as usual, but the second developer to merge his branch needs to be a bit careful. You can still squash your commit as usual, but there is a chance that git will be unable to properly merge things. Please either
git rebase --onto
to rebase only your commit onto master