- Set up the project repo during the lecture
- Practice the workflow with a sample repo
- Plan the next iteration
1 Set up the project repo during the lecture
- Set up the team org, the team repo, and individual forks as explained below:
Admin Appendix E (extract): tP Organization Setup
tP Team Organization Setup
Please follow the organization/repo name format precisely or else our grading scripts will not be able to detect your work.
(/) Only one team member:
After receiving your team ID, one team member should do the following steps:
- Create a GitHub organization with the following details:
- Organization name (all UPPER CASE) :
AY2021S1-TEAM_ID
. e.g.AY2021S1-TIC4001-2
- Plan: Open Source ($0/month)
- This organization belongs to: My personal account
- Organization name (all UPPER CASE) :
- Add members to the organization:
- Create a team called
developers
to your organization. - Add your team members to the developers team.
- Create a team called
Admin Appendix E (extract): tP Team Repo Setup
tP Team Repo Setup
(/) Only one team member:
The tP project template given to you is a variation of the iP repo you used for the iP, but with some important differences. Please follow instructions carefully, rather than follow what you remember from the iP.
-
Fork the https://github.com/nus-tic4001-AY2021S1/tp repo to your team org.
- This repo (let's call it the team repo) is to be used as the repo for your project.
- Please do not rename the fork Reason: our grading scripts rely on the repo name.
-
Enable the issue tracker.
-
Enable GitHub Actions: Go to the Actions tab and enable workflows by clicking the button. That will enable the GitHub Actions that are already included in the repo you forked.
-
Enable GitHub Pages: Go to the Settings tab and enable
GitHub Pages
for themaster branch /docs folder
(similar to how you did it in the iP).
Remember to choose a theme too by clicking the button (that will create a commit in your repo that is needed in a later step.
After a few minutes, confirm your tP website is available in the correspondinggithub.io
URL. -
Add members. Ensure your team members have the desired level of access to your team repo.
Recommended: Give admin access to 1-2 members and write access to others. -
Create a team PR for us to track your project progress: i.e., create a PR from your team repo
master
branch to [nus-tic4001-AY2021S1/tp]master
branch. PR name:[Team ID] Product Name
e.g.,[TIC4001-2] Contact List Pro
. As you merge code to your team repo'smaster
branch, this PR will auto-update to reflect how much your team's product has progressed.
Please fill in these details as specified because they are used by our grading scripts.- PR subject: the name of your product e.g.,
InsureList
- Description: a 1-2 sentence overview (plain text only, no formatting or links) of your project indicating the target user and the value proposition e.g.,
InsureList helps insurance agents manage detail of their clients. It is optimized for CLI users so that frequent tasks can be done faster by typing in commands.
- PR subject: the name of your product e.g.,
Admin Appendix E (extract): tP Individual Fork Setup
tP Individual Fork Setup
(, , , ...) Every team member:
- Watch the
tP
repo (created above) i.e., go to the repo and click on the button to subscribe to activities of the repo. - Fork the
tP
repo to your personal GitHub account.
Please do not rename the fork Reason: our grading scripts rely on the repo name. - Clone the fork to your computer.
- Set up the developer environment in your computer by following the the README carefully as the steps are different from the iP.
Do not alter these paths in your project as our grading scripts depend on them.
src/main/java
src/test/java
docs
2 Practice the workflow with a sample repo
- We recommend that you practice the forking workflow with your team members as described in the textbook section given in the panel below.
You can use your tP GitHub org for this exercise too.
Textbook Git & GitHub → The forking workflow
You can follow the steps in the simulation of a forking workflow given below to learn how to follow such a workflow.
This activity is best done as a team.
Step 1. One member: set up the team org and the team repo.
-
Create a GitHub organization for your team. The org name is up to you. We'll refer to this organization as team org from now on.
-
Add a team called
developers
to your team org. -
Add team members to the
developers
team. -
Fork se-edu/samplerepo-workflow-practice to your team org. We'll refer to this as the team repo.
-
Add the forked repo to the
developers
team. Give write access.
Step 2. Each team member: create PRs via own fork.
-
Fork that repo from your team org to your own GitHub account.
-
Create a branch named
add-{your name}-info
(e.g.add-johnTan-info
) in the local repo. -
Add a file
yourName.md
into themembers
directory (e.g.,members/jonhTan.md
) containing some info about you into that branch. -
Push that branch to your fork.
-
Create a PR from that branch to the
master
branch of the team repo.
Step 3. For each PR: review, update, and merge.
-
[A team member (not the PR author)] Review the PR by adding comments (can be just dummy comments).
-
[PR author] Update the PR by pushing more commits to it, to simulate updating the PR based on review comments.
-
[Another team member] Approve and merge the PR using the GitHub interface.
-
[All members] Sync your local repo (and your fork) with upstream repo. In this case, your upstream repo is the repo in your team org.
Step 4. Create conflicting PRs.
-
[One member]: Update README: In the
master
branch, remove John Doe and Jane Doe from theREADME.md
, commit, and push to the main repo. -
[Each team member] Create a PR to add yourself under the
Team Members
section in theREADME.md
. Use a new branch for the PR e.g.,add-johnTan-name
.
Step 5. Merge conflicting PRs one at a time. Before merging a PR, you’ll have to resolve conflicts.
-
[Optional] A member can inform the PR author (by posting a comment) that there is a conflict in the PR.
-
[PR author] Resolve the conflict locally:
- Pull the
master
branch from the repo in your team org. - Merge the pulled
master
branch to your PR branch. - Resolve the merge conflict that crops up during the merge.
- Push the updated PR branch to your fork.
- Pull the
-
[Another member or the PR author]: Merge the de-conflicted PR: When GitHub does not indicate a conflict anymore, you can go ahead and merge the PR.
3 Plan the next iteration
- Plan the next iteration. As you know, you should follow the breadth-first iterative process. Therefore, first you must decide what functionalities should be in the product if you had only two weeks to implement it. You have done that already when you chose user stories for v1.0, translated that to features, and even drafted the UG based on those features. You can tweak that plan further at this point if you wish, given that you now have some idea of how fast the team can work when using the prescribed workflow.
- Aim to produce a working MVP at the end of this iteration even if the functionalities are not polished (polishing can be done in a later iteration).
- If possible, break the iteration into two increments i.e., aim to produce an even simpler but working version after one week.
- Avoid depth-first implementations: "I'll do the back-end part of feature X in this iteration" is not acceptable as that is not in the spirit of iterative development. Remember, we are pretending this to be the last iteration; why would you implement the back-end part of a feature in the last iteration?
It is OK to add simpler versions of bigger features, but not OK to add partial features that can't be used yet.
- Divide the work among the team members i.e., the work required for the current iteration.
- Reflect the above plan in the issue tracker by assigning the corresponding issues (create new issues if necessary) to yourself and to the corresponding milestone. For example, the user story pertaining to the increment
show a place holder for photo, showing a generic default image
should be assigned to Jake and to milestonev1.0
Optionally, you can define amid-v1.0
milestone to keep track of things to be done within the first half of the milestone.