-
-
Notifications
You must be signed in to change notification settings - Fork 112
Pull Request and Commit workflow notes
- We use Conventional Commits for commit messages and PR titles, for example:
fix(windows): re-attach the widget plug which had fallen out
The widget plug was wonky so I attached paper clips so it would
stay in more firmly.
Fixes: #1234
-
We use the following commit types:
-
fix:
addresses a bug in the codebase. Should almost always have a corresponding issue. GitHub label fix should be applied. -
feat:
adds a new feature to the codebase. GitHub label feat should be applied. -
change:
makes a modification that is neither a bug fix nor a feature. Corresponds to GitHub label chore. You may finddocs:
,style:
, orrefactor:
are a better fit. -
chore:
makes a change to infrastructure which doesn't fit the above categories. (GH label chore). -
docs:
changes documentation only. Use GitHub label chore. -
style:
is a format-only change. No change to code behaviour! Use GitHub label chore. -
refactor:
applies for any small or large refactoring of the codebase, renaming variables, restructuring code. Use GitHub label chore. -
test:
applies for unit test changes. Use GitHub label test. -
auto:
for automatically-created PRs, such as version increments. Use GitHub label auto
-
-
The master source for commit types is in /resources/scopes/commit-types.json.
-
If appropriate, include one scope in your commit message.
-
If your commit crosses multiple scopes, consider breaking it into multiple commits. This helps reviewers!
-
Use the present tense ("add feature" not "added feature")
-
Use the imperative mood ("move cursor to..." not "moves cursor to...", nor "cursor movement", nor "cursor now moves")
-
First letter of title should be lower case ("fix(android): check arguments ..." not "fix(android): Check arguments")
-
Reference issues and pull requests liberally after the first line
-
Commit trailers can be included in a commit message by adding a blank line, and then one or more trailer lines in the format of
Trailer-id: content
.-
Include commit trailer
Fixes: #1234
to automatically link and close issue #1234 when the PR merges. -
Include commit trailer
Fixes: KEYMAN-MODULE-XYZ
to automatically close Sentry issue KEYMAN-MODULE-XYZ when the commit reaches GitHub. -
Include commit trailer
Cherry-pick-of: #2468
for a commit that is part of a PR cherry-picked to another release. -
Include commit trailer
Co-authored-by: Name <[email protected]>
if someone else worked with you on the commit.
-
-
Try and make your first line 100 chars or less, and wrap subsequent lines at 72 chars. This may be difficult to achieve so don't stress too much!
-
Tip: If you use VS Code as your default editor for Git for Windows (an option at install time), then it will turns your text red when it overflows and shows a 72 character margin in the commit message editor.
-
How to setup up a git commit-msg hook to enforce conventional commits
We use the same types and scopes as listed above for branch names. The basic format is:
<type>/<scope>/[cherry-pick/][<issuenum>-][name-kebab-case]
For cherry-picked branches we should add the cherry-pick/
component. If the branch addresses a specific issue, try and include the issue number. Keep names lower case and use hyphens to separate words ('kebab case').
We may choose to push branches to github that we are using for temporary or testing purposes only. For these branches, start the branch name with temp/
so that it is clear that it in not a stale branch that needs attention (suggest that these branches will be deleted after 3 months).
- Push early to a draft PR: it's a backup, it helps with tracking progress, and keeps us thinking about getting our PRs to completion.
- While in draft, feel free to rebase and force push in order to better organise commits.
- Once a PR exits draft, do not use force pushes. Force pushes make it hard for reviewers to track changes in response to reviews.
- If a (non-draft) PR needs significant work, then apply the
work-in-progress
label or put the PR back in draft to help others.
- Include "Fixes: #1234" in the body of the initial PR comment to make it more visible to reviewers.
- Explain why you are making the change.
- Make sure that you detail what is changing in the PR and what the potential impacts are.
- Make sure you copy out stack and error details from Sentry, because Sentry reports disappear after 90 days!
- If you start from a commit message, remember that the pull request body should not need to be manually wrapped (i.e. you may want to unwrap it).
- When a PR is ready for review, you can request a review using GitHub, but also share a link to the PR in Slack #general and include the
:stampy:
emoji. Be witty.
See https://github.com/keymanapp/keyman/wiki/User-Testing-Workflows
flowchart TD
%% PR Creation
A(Create PR) --> B{Is it Work-in-progress?};
B -- Yes --> C(PR in Draft);
B -- No --> D(Ready to review);
C --> E(Author makes updates)
%% CI Test
D --> F{Did CI test build pass?};
F -- No --> E
%% keymanapp-test-bot
F -- Yes --> G{Are User Tests required?}
%% Reviewers
G -- No --> H{Do reviewers request changes?}
%% User Testing
G -- Yes --> J{Did User Testing pass?}
H -- No --> I(Approved)
H -- Yes --> E
J -- Yes --> I
J -- No --> E
E --> B
- Make sure your pull request labels correspond to the commits included. We have scoping labels for each platform, a few sub-scopes, and type labels
bug
,feat
, andchore
. - If your PR is a cherry pick of another PR to another branch (e.g. from
master
tostable-12.0
), includecherry-pick
. - For PRs that target a stable release, include
stable
.
- You should almost always tag with the current sprint. In rare cases, you might tag a PR with
future
. Don't tag a PR with subsequent sprint tags -- they will be rolled over to the next sprint automatically anyway.
- Currently, we use merge commits.
When creating a new issue, there are two templates to choose from, as well as the option to start with a blank issue. The templates, bug or feature, are helpful in ensuring that all the necessary information for the issue is included.
When creating an issue title, adhere to the following guidelines:
Issue Title Format:
<type>(scope): <concise description of the issue>
The type
and scope
are defined in the commit guidelines.
Focus on the following for the title:
Be Specific and Descriptive: Clearly state the nature of the problem or bug without being vague or ambiguous. Use precise language that accurately reflects the issue.
Avoid Generic Terms: Instead of using generic phrases like "not working", "not functioning," or "not predictable", provide specific details about what is not working or functioning.
Limit Unnecessary Details: For example, do not include the operating system (OS) in the title when the scope
already identifies it. The Keyman version number will be included in the detailed description and does not need to be in the title.
Emoji are used mainly for visual reminders for humans. On status.keyman.com, the emojis are used to group related PRs in 'project' view.
- 🏠 is added automatically when a PR targets stable-17.0 by one of our GH actions
- 🍒 is appropriate for cherry-picks (should normally be a cherry-pick from master --> stable, not the other way around)
- 🐡 is used by status.keyman.com for KeymanWeb PRs to indicate that the PR increases the artifact size significantly (so we should be verifying it before merge)
Other emoji are mostly used for short-lived projects or long-lived epics, and you can pick any emoji that you like for those.