mirror of https://github.com/docker/compose.git
185 lines
6.9 KiB
Markdown
185 lines
6.9 KiB
Markdown
|
# Release HOWTO
|
||
|
|
||
|
This file describes the process of making a public release of `docker-compose`.
|
||
|
Please read it carefully before proceeding!
|
||
|
|
||
|
## Prerequisites
|
||
|
|
||
|
The following things are required to bring a release to a successful conclusion
|
||
|
|
||
|
### Local Docker engine (Linux Containers)
|
||
|
|
||
|
The release script runs inside a container and builds images that will be part
|
||
|
of the release.
|
||
|
|
||
|
### Docker Hub account
|
||
|
|
||
|
You should be logged into a Docker Hub account that allows pushing to the
|
||
|
following repositories:
|
||
|
|
||
|
- docker/compose
|
||
|
- docker/compose-tests
|
||
|
|
||
|
### A Github account and Github API token
|
||
|
|
||
|
Your Github account needs to have write access on the `docker/compose` repo.
|
||
|
To generate a Github token, head over to the
|
||
|
[Personal access tokens](https://github.com/settings/tokens) page in your
|
||
|
Github settings and select "Generate new token". Your token should include
|
||
|
(at minimum) the following scopes:
|
||
|
|
||
|
- `repo:status`
|
||
|
- `public_repo`
|
||
|
|
||
|
This API token should be exposed to the release script through the
|
||
|
`GITHUB_TOKEN` environment variable.
|
||
|
|
||
|
### A Bintray account and Bintray API key
|
||
|
|
||
|
Your Bintray account will need to be an admin member of the
|
||
|
[docker-compose organization](https://github.com/settings/tokens).
|
||
|
Additionally, you should generate a personal API key. To do so, click your
|
||
|
username in the top-right hand corner and select "Edit profile" ; on the new
|
||
|
page, select "API key" in the left-side menu.
|
||
|
|
||
|
This API key should be exposed to the release script through the
|
||
|
`BINTRAY_TOKEN` environment variable.
|
||
|
|
||
|
### A PyPi account
|
||
|
|
||
|
Said account needs to be a member of the maintainers group for the
|
||
|
[`docker-compose` project](https://pypi.org/project/docker-compose/).
|
||
|
|
||
|
Moreover, the `~/.pypirc` file should exist on your host and contain the
|
||
|
relevant pypi credentials.
|
||
|
|
||
|
## Start a feature release
|
||
|
|
||
|
A feature release is a release that includes all changes present in the
|
||
|
`master` branch when initiated. It's typically versioned `X.Y.0-rc1`, where
|
||
|
Y is the minor version of the previous release incremented by one. A series
|
||
|
of one or more Release Candidates (RCs) should be made available to the public
|
||
|
to find and squash potential bugs.
|
||
|
|
||
|
From the root of the Compose repository, run the following command:
|
||
|
```
|
||
|
./script/release/release.sh -b <BINTRAY_USERNAME> start X.Y.0-rc1
|
||
|
```
|
||
|
|
||
|
After a short initialization period, the script will invite you to edit the
|
||
|
`CHANGELOG.md` file. Do so by being careful to respect the same format as
|
||
|
previous releases. Once done, the script will display a `diff` of the staged
|
||
|
changes for the bump commit. Once you validate these, a bump commit will be
|
||
|
created on the newly created release branch and pushed remotely.
|
||
|
|
||
|
The release tool then waits for the CI to conclude before proceeding.
|
||
|
If failures are reported, the release will be aborted until these are fixed.
|
||
|
Please refer to the "Resume a draft release" section below for more details.
|
||
|
|
||
|
Once all resources have been prepared, the release script will exit with a
|
||
|
message resembling this one:
|
||
|
|
||
|
```
|
||
|
You're almost done! Please verify that everything is in order and you are ready
|
||
|
to make the release public, then run the following command:
|
||
|
./script/release/release.sh -b user finalize X.Y.0-rc1
|
||
|
```
|
||
|
|
||
|
Once you are ready to finalize the release (making binaries and other versioned
|
||
|
assets public), proceed to the "Finalize a release" section of this guide.
|
||
|
|
||
|
## Start a patch release
|
||
|
|
||
|
A patch release is a release that builds off a previous release with discrete
|
||
|
additions. This can be an RC release after RC1 (`X.Y.0-rcZ`, `Z > 1`), a GA release
|
||
|
based off the final RC (`X.Y.0`), or a bugfix release based off a previous
|
||
|
GA release (`X.Y.Z`, `Z > 0`).
|
||
|
|
||
|
From the root of the Compose repository, run the following command:
|
||
|
```
|
||
|
./script/release/release.sh -b <BINTRAY_USERNAME> start --patch=BASE_VERSION RELEASE_VERSION
|
||
|
```
|
||
|
|
||
|
The process of starting a patch release is identical to starting a feature
|
||
|
release except for one difference ; at the beginning, the script will ask for
|
||
|
PR numbers you wish to cherry-pick into the release. These numbers should
|
||
|
correspond to existing PRs on the docker/compose repository. Multiple numbers
|
||
|
should be separated by whitespace.
|
||
|
|
||
|
Once you are ready to finalize the release (making binaries and other versioned
|
||
|
assets public), proceed to the "Finalize a release" section of this guide.
|
||
|
|
||
|
## Finalize a release
|
||
|
|
||
|
Once you're ready to make your release public, you may execute the following
|
||
|
command from the root of the Compose repository:
|
||
|
```
|
||
|
./script/release/release.sh -b <BINTRAY_USERNAME> finalize RELEAE_VERSION
|
||
|
```
|
||
|
|
||
|
Note that this command will create and publish versioned assets to the public.
|
||
|
As a result, it can not be reverted. The command will perform some basic
|
||
|
sanity checks before doing so, but it is your responsibility to ensure
|
||
|
everything is in order before pushing the button.
|
||
|
|
||
|
After the command exits, you should make sure:
|
||
|
|
||
|
- The `docker/compose:VERSION` image is available on Docker Hub and functional
|
||
|
- The `pip install -U docker-compose==VERSION` command correctly installs the
|
||
|
specified version
|
||
|
- The install command on the Github release page installs the new release
|
||
|
|
||
|
## Resume a draft release
|
||
|
|
||
|
"Resuming" a release lets you address the following situations occurring before
|
||
|
a release is made final:
|
||
|
|
||
|
- Cherry-pick additional PRs to include in the release
|
||
|
- Resume a release that was aborted because of CI failures after they've been
|
||
|
addressed
|
||
|
- Rebuild / redownload assets after manual changes have been made to the
|
||
|
release branch
|
||
|
- etc.
|
||
|
|
||
|
From the root of the Compose repository, run the following command:
|
||
|
```
|
||
|
./script/release/release.sh -b <BINTRAY_USERNAME> resume RELEASE_VERSION
|
||
|
```
|
||
|
|
||
|
The release tool will attempt to determine what steps it's already been through
|
||
|
for the specified release and pick up where it left off. Some steps are
|
||
|
executed again no matter what as it's assumed they'll produce different
|
||
|
results, like building images or downloading binaries.
|
||
|
|
||
|
## Cancel a draft release
|
||
|
|
||
|
If issues snuck into your release branch, it is sometimes easier to start from
|
||
|
scratch. Before a release has been finalized, it is possible to cancel it using
|
||
|
the following command:
|
||
|
```
|
||
|
./script/release/release.sh -b <BINTRAY_USERNAME> cancel RELEASE_VERSION
|
||
|
```
|
||
|
|
||
|
This will remove the release branch with this release (locally and remotely),
|
||
|
close the associated PR, remove the release page draft on Github and delete
|
||
|
the Bintray repository for it, allowing you to start fresh.
|
||
|
|
||
|
## Manual operations
|
||
|
|
||
|
Some common, release-related operations are not covered by this tool and should
|
||
|
be handled manually by the operator:
|
||
|
|
||
|
- After any release:
|
||
|
- Announce new release on Slack
|
||
|
- After a GA release:
|
||
|
- Close the release milestone
|
||
|
- Merge back `CHANGELOG.md` changes from the `release` branch into `master`
|
||
|
- Bump the version in `compose/__init__.py` to the *next* minor version
|
||
|
number with `dev` appended. For example, if you just released `1.4.0`,
|
||
|
update it to `1.5.0dev`
|
||
|
|
||
|
## Advanced options
|
||
|
|
||
|
You can consult the full list of options for the release tool by executing
|
||
|
`./script/release/release.sh --help`.
|