Must have:
- Basic Java programming skills
- Basic Git knowledge
Good to have:
- JavaFX
- Java concurrency
- Familiarity with Java 8 features: streams, lambda expressions
You may not need these at the beginning, but be prepared to learn them along the way!
- Developers: fix issues assigned to them; can be contributors, committers, or senior developers
- Reviewers: assigned to pull requests; usually senior developers
- Team Lead: subsumes above roles, releases new versions, ensures that milestone plan is ready at the beginning of each milestone
- Project Manager: project coordination, approves pull requests
master
contains the latest stable code (including unreleased features/fixes)rc
contains the release candidate: the latest version which has not been released to the publicrelease
contains the latest version released to the public
- An issue is created. It is accepted by being given a priority.
- The issue is taken up by a developer.
- Senior developers should take only
priority.high
issues as far as possible.
- Senior developers should take only
- A corresponding PR is created.
- The issue is closed when the PR is merged.
- A PR corresponding to an issue is created and labelled as
ongoing
. - It is labelled as
toReview
when the developer finishes their work. - The reviewer labels it as
toMerge
when satisfied, orongoing
if further changes have to be made. - The PM labels it as
mergeApproved
when satisfied, orongoing
if further changes have to be made. - The PR is merged.
A PR should be merged within one release cycle, two at the most. The onus is on the developer to remind the reviewer to keep things moving. PRs still open after two weeks may be closed without merging.
- Join the contributor mailing list
- Fork the repository
- Select an issue to handle. For your first issue, select an issue labelled
forFirstTimers
. For subsequent issues, prefer those labelledforContributors
. - Discuss the issue if the requirements are unclear, and check that your intended solution is suitable.
- Branch off
master
, with branch name "X-short-description", whereX
is the issue number. For example,2342-remove-println
for an issue namedRemove all unnecessary println statements
. - Implement your changes in the created branch. Run tests locally and ensure that there are no failures. Remember to also run unstable tests!
- Push your changes to your fork.
- Create a pull request against the
master
branch of the main repo.- The name of the PR should be in the format "TITLE #X", where
TITLE
is the title of the issue you selected, andX
is its number. e.g.Sorting order is incorrect #123
- The description of the PR should include the text "Fixes #X" e.g.
Fixes #123
or something similar to auto-close the issue when the PR is merged. - You don't have to wait until your changes are ready to do this. Feel free to use the PR to discuss any difficulties you run into, or clarify requirements.
- The name of the PR should be in the format "TITLE #X", where
- After creating the PR, you can check its status on the CI service here. Ensure that all tests and checks pass.
- If your PR includes additional functional code and this causes coverage to drop, either update an existing test to cover the added/fixed functionality or add a new test.
- To restart the build, you can open and close the PR, or push new commits (squashing them later if they were only for the purpose of restarting)
- When ready, get a core team member to review it by commenting on the PR. Try to do this at least a few days before the weekly milestone, as the process takes time.
- Evaluate the reviewer's suggestions and make changes accordingly.
- The reviewer and PM will approve the PR before merging it.
If you need any clarification on the development process, you may also post in the mailing list.
Similar to the contributor process, except for following differences:
- You'll push to the main repo.
- You can also create new issues, label issues, and review code from others.
- When creating a PR, label it as
ongoing
and choose another core developer as the reviewer. Try to pick someone who is likely to know the code touched by the PR well. - When your PR is labelled as
toMerge
by the reviewer, its state will be verified by the PM. - When your PR is labelled as
mergeApproved
, merge the PR yourself (see the section on merging below).
The reviewer should ensure the following:
- Branch and PR names follow conventions
- "Fixes #x" in description
- Documentation is updated
- CI passes with no drop in coverage
- No violations from static analysis tools
- Unstable tests pass offline
- No additions to linter exceptions and unstable tests without discussion/consideration
In general, look out for style issues, potential problems, areas in which code could be cleaned up, improved, or written to leverage existing code.
An exhaustive list of things to look out for really cannot be given here, but these are a few common ones.
- Sane names
- Self-explanatory method signatures
- Appropriate abstractions used, intent expressed clearly
- Overall SLAP, with methods in the right places
- Proper javadoc comments on public classes, public methods, and nontrivial private methods
- Method names and comments not outdated as a result of changes
- Static imports used effectively
Optional
values checked before use- Thread-safe
- Meaningful test cases
- Proper synchronisation in GUI tests (no
Thread.sleep
orPlatformEx.waitOnFxThread
without good reason)
When you are satisfied with the quality of the changes in the PR, change the label to toMerge
. At this point it will await approval.
If the PR was from a contributor, merge it only after it is approved.
- Wait for the green light (the
mergeApproved
label) before merging. - Merging should be done locally, not using GitHub.
- Format for the merge commit:
[issue number] issue title
e.g.[324] Add keyboard shortcut for creating an issue
- Format for the merge commit:
- Perform a non-fast-forward merge.
git merge --no-ff -m "merge commit message" your-branch-name
is one way to accomplish this.
- Ensure all tests, including unstable ones, pass before you push the merge commit to
master
.
- Put completed issues under current milestone
- Remove milestones for issues which weren't finished
- Determine if open PRs can be merged by the next milestone
- Comment on open PRs requesting to merge by the next milestone
- Close PRs that have not been making progress despite reminders
- Close current milestone
- Open next milestone
- Check out
release
- Merge
rc
intorelease
- Commit message:
VMAJOR.MINOR.PATCH
- No leading zeroes (i.e.
1
instead of01
) - Example:
V0.12.1
- Further reading: semantic versioning
- No leading zeroes (i.e.
- Commit message:
- Tag in the same format
git push
git push --tags
./gradlew clean shadowJar
- The JAR will be in
build/libs
- Name it in the format:
resource-vMAJOR.MINOR.PATCH.jar
- Upload it to Releases under the tag you just created
- Update HubTurbo.xml
- Commit in the
VMAJOR.MINOR.PATCH
format
- Check out
master
- Update the changelog
- Update version number in build.gradle
- Update version number in
ui.UI
- Commit in the
VMAJOR.MINOR.PATCH
format git push
- Check out
rc
- Merge
master
intorc
- Commit in the
VMAJOR.MINOR.PATCH
format
- Commit in the
git push
- Delete old releases so only the last 5 minor versions remain.
- Warning: do not delete the version that HubTurbo.xml relies on! The latest public release may have been some time back