Project Workflow Instructions

In this document, I will explain the workflow to follow for doing project work in this course. The workflow mostly follows the popular GitHub Flow workflow.

1. Beginning an Iteration

1.1. Create a GitHub Milestone

At the start of each iteration, your team must create a milestone for the iteration in GitHub. Here is a GitHub Help article on milestones. You need to do this only once per milestone in GitHub. Each GitHub milestone is used to group issues and pull requests that contribute to a particular milestone. Name the Github milestone Milestone M1 or Milestone M2, as appropriate.

1.2. Create Tasks as GitHub Issues

In addition to creating a GitHub milestone, your team must also create tasks for each team member to perform at the start of each iteration. There are three categories of tasks:

Once you have chosen the tasks for your team and assigned them to team members, you must create an issue in GitHub for each of your tasks. The issues must be filled out as follows:

2. Performing Tasks

For each task you work on, you will perform your work in a topic branch. The branch must have a name of the form iss3 where the associated GitHub issue number is 3.

As a reminder, here some Git commands that you will likely find handy.

From the master branch, you might use this command to create an iss3 branch and check it out:

git checkout -b iss3

The first time you push the topic branch, use this command to set the upstream branch (assuming that the topic branch is named iss3):

git push -u origin iss3

After you run the above push command, you can push and pull from the branch using the shorter forms:

git push
git pull

With the topic branch checked out, make changes, commit them locally, and push them to GitHub. All changes made this way should be fully contained in the topic branch.

If other teammates merge changes into the master branch while you are working on your topic branch, you will need merge those changes into your topic branch before you’re done. From your topic branch, you can use this command to merge the remote master branch into your topic branch (although you may need to manually resolve merge conflicts after the command):

git pull origin master

3. Contributing Code to the Project

Once you complete a task, the next thing to do is merge your work into your team’s master branch. To do so, you must submit the work via a GitHub pull request.

Create the pull request as follows:

It is the job of one of your team’s QA Czars to review your pull request. They must test it to make sure that it works and confirm that it can be fast-forward merged with the master branch. They must post comments or change requests if they find issues. To test the code, the QA Czar can pull the branch to their local repository and check it out using these commands (assuming that the topic branch is named iss3):

If changes are needed, the author of the topic branch must make them to their working copy and push them to GitHub (all still in that topic branch). The pull request will be automatically updated to reflect the changes. The author will probably also want to reply to the comment in the pull request, so the QA Czar is notified of what’s happened.

Once the QA Czar approves the change, they should also merge it into the master branch.

If other pull requests are merged into the master branch before yours is, you will need to merge those changes into your topic branch before your pull request can be merged.

4. Unplanned Bug-Fixing Tasks

If a bug arises in the middle of an iteration, you should essentially follow the same major steps described above to contribute a fix. For example, like above, you should first create an issue for the bug-fixing task, then do the work in a topic branch name after the issue number (e.g., iss3), and finally submit the work as a pull request.

5. Criteria for Task Reporting

A key goal of this workflow is ensure that the tasks performed by each team member are fully and completely reported. Here are some important criteria to take into account when planning and reporting tasks: