[![Jazzband](https://jazzband.co/static/img/jazzband.svg)](https://jazzband.co/)

This is a [Jazzband](https://jazzband.co/) project. By contributing you agree
to abide by the [Contributor Code of Conduct](https://jazzband.co/about/conduct)
and follow the [guidelines](https://jazzband.co/about/guidelines).

## Project Contribution Guidelines

Here are a few additional or emphasized guidelines to follow when contributing to pip-tools:
- Check with `tox -e checkqa` to see your changes are not breaking the style conventions.
- Always provide tests for your changes.
- Give a clear one-line description in the PR (that the maintainers can add to [CHANGELOG](CHANGELOG.md) afterwards).
- Wait for the review of at least one other contributor before merging (even if you're a Jazzband member).
- Before merging, assign the PR to a milestone for a version to help with the release process.

The only exception to those guidelines is for trivial changes, such as
documentation corrections or contributions that do not change pip-tools itself.

Contributions following these guidelines are always welcomed, encouraged and appreciated.

## Project Release Process

Jazzband aims to give full access to all members, including performing releases, as described in the
[Jazzband Releases documentation](https://jazzband.co/about/releases).

To help keeping track of the releases and their changes, here's the current release process:
- Check to see if any recently merged PRs are missing from the milestone of the version about to be released.
- Push an update to the [CHANGELOG](CHANGELOG.md) with the version, date and using the one-line descriptions
  from the PRs included in the milestone of the version.
  Check the previous release changelog format for an example. Don't forget the "Thanks @contributor" mentions.
- Make sure that the tests/CI still pass.
- Once ready, go to `Github pip-tools Homepage > releases tab > Draft a new release` and type in:
  - *Tag version:* The exact version number, following [Semantic Versioning](https://blog.versioneye.com/2014/01/16/semantic-versioning/). *Ex: 3.4.0*
  - *Target:* master. As a general rule, the HEAD commit of the master branch should be the release target.
  - *Release title:* Same as the tag. *Ex: 3.4.0*
  - *Describe this release:* Copy of this release's changelog segment.
- Publish release. This will push a tag on the HEAD of master, trigger the CI pipeline and
  deploy a pip-tools release in the **Jazzband private package index** upon success.
- The pip-tools "lead" project members will receive an email notification to review the release and
  deploy it to the public PyPI if all is correct.
- Once the release to the public PyPI is confirmed, close the milestone.

Please be mindful of other before and when performing a release, and use this access responsibly.

Do not hesitate to ask questions if you have any before performing a release.
