This site is from a past semester! The current version will be here when the new semester starts.

Week 3 [Fri, Jan 20th] - Project


  1. Do any leftover iP tasks from the previous week
  2. Create a PR to the upstream repo
  3. Add Increments as branches: Level-7, Level-8
  4. Add Increments: A-MoreOOP, A-Packages, A-Gradle, A-JUnit, A-Jar
  5. Add Increments as parallel branches: A-JavaDoc, A-CodingStandard, Level-9


  1. Get familiar with AB3 features
  2. Set up a project meeting time by the end of the tutorial


Reminder about the deadline for the weekly project tasks:

1 Do any leftover iP tasks from the previous week

  • Remember to do any leftover increments from the past weeks before starting on the current week's increments. This guideline applies to future weeks too.

2 Create a PR to the upstream repo

  • Create a pull request (PR) from your fork to the upstream repo. Note the following:
    • Create the PR from the master branch of your fork to the master branch of the upstream repo (
    • Set the PR name as [{Your full/partial name or your Github username}] iP
      e.g., [Richard Mathews Chee] iP or [Rich ... hee] iP or [TheRichMat] iP
      Note that the PR name will be publicly visible.
      You may leave the description as empty.
    • If you created the PR correctly, it should appear in the list of PRs here.
    • Steps for creating a PR is given in this textbook topic (steps 5 onwards):

The PR will update automatically to reflect your latest code every time you push code to your fork. As a result, it provides a convenient way for us to access the current state of all your iP code from one location.

3 Add Increments as branches: Level-7, Level-8

  • Do Level 7 in a branch named branch-Level-7. Here are the steps:
    1. Start a branch branch-Level-7.
    2. Implement Level 7 while committing to that branch at appropriate points,
    3. Merge the branch back to the master branch (remember to create a merge commit i.e., no fast-forward).
    4. Tag the merge commit in the master branch.
    5. Push the master branch, push the branch-Level-7, and push the tag, to your fork.
      Advanced git users: do not delete the branch after merging.
      Only merged branches are detected by the script. After merging a branch b1 to the master branch, you need to push both the master and the b1 branches to the fork. Pushing the master branch does not automatically take the b1 branch along with it just because it is already merged to the master branch.
Duke Level-7: Save

  • Do Level 8 similar to the above, using a branch branch-Level-8.
Duke Level-8: Dates and Times

4 Add Increments: A-MoreOOP, A-Packages, A-Gradle, A-JUnit, A-Jar

  • While not required, you are encouraged to use separate branches for each increment.
    Reason: that way, the master branch will always stay in a 'unbroken' state as the work-in-progress will be in a separate branch till such work is ready to be merged.
  • As before, commit, tag, and push, after each increment.
Duke A-MoreOOP: Use More OOP

Why more OOP?

Duke A-Packages: Organize into Packages

  • Do the following increments in the given order because after doing A-Gradle you can use the Gradle option (rather than the Intellij option) when doing A-JUnit and A-JAR as they are easier to do using Gradle.

If your fork doesn't have the add-gradle-support branch ...

Duke A-Gradle: Use Gradle

Duke A-JUnit: Add JUnit Tests

Duke A-Jar: Create a JAR File

Note the following when you do the A-Jar increment given above:

  • Do not commit the JAR file. We don't normally commit generated binary files into the repository.
  • If it does not require any code changes, you may tag the commit at which this was achieved as A-Jar (even if that commit has another tag already). Otherwise tag the latest commit as usual. In both cases, push the tag to the fork.

5 Add Increments as parallel branches: A-JavaDoc, A-CodingStandard, Level-9

  • Implement these three increments as three branches first (branch names: branch-A-JavaDoc, branch-A-CodingStandard, branch-Level-9), and then merge them one-by-one. Hopefully, you will encounter some merge conflicts so that you get to practice de-conflicting branches.
  • The Java and Git standards to follow (for A-CodingStandard) are given in this page.
  • After finishing, assuming you encountered merge conflicts (and some were rather painful to resolve), think of how such conflicts could have been reduced (e.g., by changing the order of merging, or minimizing parallel branches when certain type of changes are being done to the code).
Duke A-JavaDoc: JavaDoc

Duke A-CodingStandard: Follow the Coding Standard

Duke Level-9: Find

tP: Kickoff

1 Get familiar with AB3 features

  • Familiarize yourself with AB3: Download the latest released version (i.e., the jar file) of AB3 from its upstream repo and play around with it to familiarize with its current features.

2 Set up a project meeting time by the end of the tutorial

  • After forming teams, set up a weekly project meeting time/venue (and communication channels) with your team members: