mirror of
https://github.com/jimeh/common-flow.git
synced 2026-02-19 09:26:40 +00:00
Lots of changes for draft 3
- Master branch is no longer required to always be release/production ready, only releases are truely stable, but it's highly recommended to try and keep the master branch as near to release/production ready as possible. - Various mentions of test suites should pass before doing X. - Restructured requirements into distinct sections making it easier to read and reason about.
This commit is contained in:
204
common-flow.md
204
common-flow.md
@@ -13,38 +13,22 @@ into account how a lot of open source projects use git.
|
|||||||
|
|
||||||
Terminology:
|
Terminology:
|
||||||
|
|
||||||
- Master Branch - Should always be deployable/usable, is considered bleeding
|
- Master Branch - Must always have passing tests, is considered bleeding
|
||||||
edge, and must be named `master`.
|
edge, and must be named `master`.
|
||||||
- Change Branches - Any branch that introduces changes (new feature, bug fix,
|
- Change Branches - Any branch that introduces changes like a new feature, a bug
|
||||||
etc), should be created off of the master branch, and must have a descriptive
|
fix, etc.
|
||||||
name.
|
- Maintenance Branches - Used for maintaining old versions and releasing PATCH
|
||||||
- Maintenance Branches - Used to maintain old versions, and should follow a
|
updates when the master branch has moved on. Should follow a `stable-X.Y`
|
||||||
`stable-X.Y` naming pattern, where `X` is MAJOR version and `Y` is MINOR
|
naming pattern, where `X` is MAJOR version and `Y` is MINOR version.
|
||||||
version.
|
- Merge Target - A branch that is the intended merge target for a change
|
||||||
- Pull Request - A means of requesting that a change branch is merged in to the
|
branch. Typically the merge target will be the branch that a change branch was
|
||||||
master branch, allowing others to review, discuss and approve the changes.
|
created from.
|
||||||
|
- Pull Request - A means of requesting that a change branch is merged in to its
|
||||||
|
merge target, allowing others to review, discuss and approve the changes.
|
||||||
- Release - Consists of a version bump commit directly on the master branch, and
|
- Release - Consists of a version bump commit directly on the master branch, and
|
||||||
a git tag named according to the new version number placed on said commit.
|
a git tag named according to the new version number placed on said commit.
|
||||||
|
- Maintenance Release - Just like a regular release, except the version bump
|
||||||
Basics:
|
commit and release tag are on a maintenance branch instead of the master
|
||||||
|
|
||||||
- The "master" branch should always be deployable/usable, while also considered
|
|
||||||
to be bleeding edge.
|
|
||||||
- New work must be done on a descriptively named change branch created off of
|
|
||||||
the master branch.
|
|
||||||
- Commit to the change branch locally, and regularly push your work to the same
|
|
||||||
named branch on the remote server.
|
|
||||||
- The change branch MUST be kept up to date with the master branch by rebasing
|
|
||||||
it on top of the remote master branch.
|
|
||||||
- When you need feedback, help, or think the branch is ready for merging, open a
|
|
||||||
pull request.
|
|
||||||
- After someone else has reviewed and signed off on the change, you can merge it
|
|
||||||
in to the master branch.
|
|
||||||
- New releases are created by committing a version bump commit directly to the
|
|
||||||
master branch, and then tagging that commit with the version.
|
|
||||||
- Maintenance branches are updated by cherry picking relevant changes if
|
|
||||||
possible, otherwise use a change branch created from the maintenance branch,
|
|
||||||
and have the pull request target the maintenance branch instead of the master
|
|
||||||
branch.
|
branch.
|
||||||
|
|
||||||
Git Common-Flow Specification (Common-Flow)
|
Git Common-Flow Specification (Common-Flow)
|
||||||
@@ -54,64 +38,110 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
|||||||
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
||||||
interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
|
interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
|
||||||
|
|
||||||
1. A branch named "master" MUST exist, and it SHOULD be referred to as the
|
1. The Master Branch
|
||||||
"master branch". The master branch MUST always be in a non-broken state, but
|
1. A branch named "master" MUST exist and it MUST be referred to as the
|
||||||
MUST be considered to be bleeding edge. That means the master branch MUST
|
"master branch".
|
||||||
always be in a good enough state that a new release can always be built from
|
2. The master branch MUST be considered bleeding edge.
|
||||||
master, or that master can always be safely deployed to production.
|
3. The master branch MUST always be in a non-broken state with its test
|
||||||
2. Changes MUST be performed on a separate branch that SHOULD be referred to as
|
suite passing.
|
||||||
a "change branch". All change branches SHOULD be created off of the master
|
4. The master branch SHOULD always be in a "as near as possible ready for
|
||||||
branch, and they MUST have descriptive names. You SHOULD commit often
|
release/production" state to reduce the friction of creating a new
|
||||||
locally, and you SHOULD regularly push your work to the same named branch on
|
release.
|
||||||
the remote server.
|
2. Changes
|
||||||
3. Change branches MUST be regularly updated with any changes on the master
|
1. Changes MUST be performed on a separate branch that SHOULD be referred to
|
||||||
branch. This MUST be done by rebasing the change branch on top of the remote
|
as a "change branch". All change branches MUST have descriptive
|
||||||
master branch ("git rebase origin/master"). To be clear you MUST NOT merge
|
names. You SHOULD commit often locally, and you SHOULD regularly push
|
||||||
the master branch into a change branch.
|
your work to the same named branch on the remote server.
|
||||||
4. To merge a change branch back in to the master branch, you MUST open a "pull
|
2. When a change branch is created, the branch that it is created from
|
||||||
request" (or equivalent) so others can review and approve your changes. A
|
SHOULD be referred to as the "source branch". Each change branch also
|
||||||
change branch MUST only be merged in to the master branch when you and others
|
needs a designated "merge target branch", typically this will be the same
|
||||||
are certain that it is ready for release and/or deployment to production.
|
as the source branch.
|
||||||
5. To get feedback, help, or generally just discuss a change branch with others,
|
3. Change branches MUST be regularly updated with any changes from their
|
||||||
you SHOULD also create a pull request and discuss the changes with others
|
source branch. This MUST be done by rebasing the change branch on top of
|
||||||
there.
|
the source branch. To be clear you MUST NOT merge a source branch into a
|
||||||
6. The project MUST have its version hard-coded somewhere in the code-base. It
|
change branch.
|
||||||
is RECOMMENDED that this is done in a file called "VERSION" located in the
|
4. To merge a change branch into its merge target branch, you MUST open a
|
||||||
root of the project, and that it only contains the exact version string.
|
"pull request" (or equivalent) so others can review and approve your
|
||||||
7. The version string SHOULD follow the Semantic Versioning (http://semver.org/)
|
changes.
|
||||||
format. Use of Semantic Versioning is OPTIONAL, but the version string MUST
|
5. A pull request MUST only be merged when the test suite is passing, and
|
||||||
NOT have a "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
|
you and others are happy with the change. This is especially important if
|
||||||
8. To create a new release, you MUST create a "version bump" commit directly on
|
the merge target is the master branch.
|
||||||
the master branch which changes the hard-coded version value of the
|
6. To get feedback, help, or generally just discuss a change branch with
|
||||||
project. The version bump commit MUST have a lightweight git tag created on
|
others, you SHOULD also create a pull request and discuss the changes
|
||||||
it and named as the exact version string.
|
with others there.
|
||||||
9. A version bump commit MUST have a commit message title of "Bump version to
|
3. Versioning
|
||||||
VERSION". For example, if the new version string is "2.11.4", the first line
|
1. The project MUST have its version hard-coded somewhere in the
|
||||||
of the commit message MUST read: "Bump version to 2.11.4"
|
code-base. It is RECOMMENDED that this is done in a file called "VERSION"
|
||||||
10. The release tag on the version bump commit MUST be named exactly the same as
|
located in the root of the project.
|
||||||
the version string. And its name MUST NOT have a "v" prefix.
|
2. If you are using a "VERSION" file in the root of the project, this MUST
|
||||||
11. OPTIONALLY you can create the release tag as a annotated tag where the
|
only contain the exact version string.
|
||||||
annotation message is the changelog since the last release.
|
3. The version string SHOULD follow the Semantic Versioning
|
||||||
12. If a change branch which has been merged in to master is found to have a bug
|
(http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, but
|
||||||
in it, the bug fix work MUST be done as a new separate change branch and
|
the version string MUST NOT have a "v" prefix. For example "v2.11.4" is
|
||||||
MUST follow the same workflow as any other change branch.
|
bad, and "2.11.4" is good.
|
||||||
13. If a change branch is wrongfully merged in to master, or for any other
|
4. Releases
|
||||||
reason the merge must be undone, you MUST undo the merge by reverting the
|
1. New releases SHOULD be created whenever the master branch has changed
|
||||||
merge commit self. Effectively creating a new commit that reverses all the
|
enough since the last release that it is worthwhile to push those changes
|
||||||
relevant changes. The master branch MUST NOT under any circumstance be
|
out for wider use. It is RECOMMENDED to create new releases very often to
|
||||||
rewound to a earlier commit.
|
reduce the amount of change in each release.
|
||||||
14. Maintenance branches are used for managing new releases for older
|
2. Because the master branch is considered bleeding edge, before a new
|
||||||
versions. Typically this is used to provide security updates for older
|
release is created, the state of the master branch MUST be confirmed to
|
||||||
versions when the master branch has moved on. A maintenance branch SHOULD
|
be release ready by ensuring all test suites pass and relevant people
|
||||||
follow a "stable-X.Y" naming pattern, where "X" is the MAJOR version and "Y"
|
are confident in delivering a new release.
|
||||||
is the minor version.
|
3. To create a new release, you MUST create a "version bump" commit directly
|
||||||
15. Updating a maintenance branch is done by cherry picking the relevant commits
|
on the master branch which changes the hard-coded version value of the
|
||||||
if possible. If not possible it MUST be done via a change branch created off
|
project. The version bump commit MUST have a git tag created on it and
|
||||||
of the maintenance branch, and reviewed through a pull request like any
|
named as the exact version string.
|
||||||
other change request.
|
4. A version bump commit MUST have a commit message title of "Bump version
|
||||||
16. Creating a release from a maintenance branch is done the same way as a
|
to VERSION". For example, if the new version string is "2.11.4", the
|
||||||
normal release, except everything is done on the maintenance branch instead
|
first line of the commit message MUST read: "Bump version to 2.11.4"
|
||||||
of the master branch.
|
5. The release tag on the version bump commit MUST be named exactly the same
|
||||||
|
as the version string. The tag name can OPTIONALLY be prefixed with
|
||||||
|
"v". For example the tag name can be either "2.11.4" or "v2.11.4".
|
||||||
|
6. It is RECOMMENDED that release tags are lightweight tags, but you can
|
||||||
|
OPTIONALLY use annotated tags if you want to include changelog
|
||||||
|
information in the release tag itself.
|
||||||
|
7. If you use annotated release tags, the first line of the annotation MUST
|
||||||
|
read "Release VERSION". For example for version "2.11.4" the first line
|
||||||
|
of the tag annotation would read "Release 2.11.4". The second line must
|
||||||
|
be blank, and the changelog MUST start on the third line.
|
||||||
|
5. Commit Messages
|
||||||
|
1. All commit messages SHOULD follow the Commit Guidelines and format from
|
||||||
|
the official git documentation: http://git-scm.com/book/ch5-2.html
|
||||||
|
6. Bug Fixes & Rollback
|
||||||
|
1. You MUST NOT under any circumstance force push to the master branch.
|
||||||
|
2. If a change branch which has been merged in to the master branch is found
|
||||||
|
to have a bug in it, the bug fix work MUST be done as a new separate
|
||||||
|
change branch and MUST follow the same workflow as any other change
|
||||||
|
branch.
|
||||||
|
3. If a change branch is wrongfully merged in to master, or for any other
|
||||||
|
reason the merge must be undone, you MUST undo the merge by reverting the
|
||||||
|
merge commit self. Effectively creating a new commit that reverses all
|
||||||
|
the relevant changes.
|
||||||
|
7. Maintenance Releases
|
||||||
|
1. Any branch that has a name starting with "stable-" SHOULD be referred to
|
||||||
|
as a "maintenance branch".
|
||||||
|
2. Maintenance branches are used for managing new releases of older
|
||||||
|
versions. Typically this is used to provide security updates for older
|
||||||
|
versions when the master branch has moved on to a point that a new
|
||||||
|
release for the old version cannot be made from the master branch.
|
||||||
|
3. A "maintenance release" is identical to a regular release, except the
|
||||||
|
version bump commit and the release tag are placed on the maintenance
|
||||||
|
branch instead of on the master branch.
|
||||||
|
3. A maintenance branch SHOULD follow a "stable-X.Y" naming pattern, where
|
||||||
|
"X" is the MAJOR version and "Y" is the minor version.
|
||||||
|
4. A maintenance branch MUST be created from the relevant release tag. For
|
||||||
|
example if there is a security fix for all 2.9.x releases, the latest of
|
||||||
|
which is "2.9.7", we create a new branch called "stable-2.9" off of the
|
||||||
|
"2.9.7" release tag. The security fix release will then end up being
|
||||||
|
version "2.9.8".
|
||||||
|
5. When working on a maintenance release, the relevant maintenance branch
|
||||||
|
MUST be thought of as the master branch for that maintenance work.
|
||||||
|
6. Changes in a maintenance branch SHOULD typically come from work being
|
||||||
|
done against the master branch. Meaning changes SHOULD only trickle
|
||||||
|
downwards from the master branch. If a change needs to trickle back up
|
||||||
|
into the master branch, that work should have happened against the master
|
||||||
|
branch in the first place.
|
||||||
|
|
||||||
About
|
About
|
||||||
-----
|
-----
|
||||||
|
|||||||
Reference in New Issue
Block a user