Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New release process #1438

Merged
merged 18 commits into from
Mar 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 58 additions & 28 deletions doc/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,76 @@

So, you want to release the `X.Y.Z` version of astroid ?

## Process
## Releasing a major or minor version

(Consider triggering the "release tests" workflow in GitHub Actions first.)
**Before releasing a major or minor version check if there are any unreleased commits on
the maintenance branch. If so, release a last patch release first. See
`Releasing a patch version`.**

1. Check if the dependencies of the package are correct
2. Check the result (Do `git diff vX.Y.Z-1 ChangeLog` in particular).
3. Install the release dependencies `pip3 install -r requirements_test.txt`
4. Bump the version and release by using `tbump X.Y.Z --no-push`.
5. Push the tag.
6. Release the version on GitHub with the same name as the tag and copy and paste the
appropriate changelog in the description. This trigger the pypi release.
- Remove the empty changelog for the last unreleased patch version `X.Y-1.Z'`. (For
example: `v2.3.5`)
- Check the result of `git diff vX.Y-1.Z' ChangeLog`. (For example:
`git diff v2.3.4 ChangeLog`)
- Install the release dependencies: `pip3 install -r requirements_test.txt`
- Bump the version and release by using `tbump X.Y.0 --no-push`. (For example:
`tbump 2.4.0 --no-push`)
- Check the result visually and then by triggering the "release tests" workflow in
GitHub Actions first.
- Push the tag.
- Release the version on GitHub with the same name as the tag and copy and paste the
appropriate changelog in the description. This triggers the PyPI release.
- Move the `main` branch up to a dev version with `tbump`:

## Post release

### Back to a dev version
```bash
tbump X.Y+1.0-dev0 --no-tag --no-push # You can interrupt after the first step
git commit -am "Upgrade the version to x.y+1.0-dev0 following x.y.0 release"
```

Move back to a dev version with `tbump`:
For example:

```bash
tbump X.Y.Z+1-dev0 --no-tag --no-push # You can interrupt after the first step
git commit -am "Upgrade the version to x.y.z+1-dev0 following x.y.z release"
tbump 2.5.0-dev0 --no-tag --no-push
git commit -am "Upgrade the version to 2.5.0-dev0 following 2.4.0 release"
```

Pierre-Sassoulas marked this conversation as resolved.
Show resolved Hide resolved
Check the result and then upgrade the main branch
Pierre-Sassoulas marked this conversation as resolved.
Show resolved Hide resolved

### Milestone handling
- Delete the `maintenance/X.Y-1.x` branch. (For example: `maintenance/2.3.x`)
- Create a `maintenance/X.Y.x` (For example: `maintenance/2.4.x` from the `v2.4.0` tag.)

Pierre-Sassoulas marked this conversation as resolved.
Show resolved Hide resolved
We move issue that were not done in the next milestone and block release only if it's an
issue labelled as blocker.
## Backporting a fix from `main` to the maintenance branch

## Post release
Whenever a commit on `main` should be released in a patch release on the current
maintenance branch we cherry-pick the commit from `main`.

### Merge tags in main for pre-commit
- During the merge request on `main`, make sure that the changelog is for the patch
version `X.Y-1.Z'`. (For example: `v2.3.5`)
- After the PR is merged on `main` cherry-pick the commits on the `maintenance/X.Y.x`
branch (For example: from `maintenance/2.4.x` cherry-pick a commit from `main`)
- Release a patch version

If the tag you just made is not part of the main branch, merge the tag `vX.Y.Z` in the
main branch by doing a history only merge. It's done in order to signal that this is an
official release tag, and for `pre-commit autoupdate` to works.
## Releasing a patch version

```bash
git checkout main
git merge --no-edit --strategy=ours vX.Y.Z
git push
```
We release patch versions when a crash or a bug is fixed on the main branch and has been
cherry-picked on the maintenance branch.

- Check the result of `git diff vX.Y-1.Z-1 ChangeLog`. (For example:
`git diff v2.3.4 ChangeLog`)
- Install the release dependencies: `pip3 install -r requirements_test.txt`
- Bump the version and release by using `tbump X.Y-1.Z --no-push`. (For example:
`tbump 2.3.5 --no-push`)
- Check the result visually and then by triggering the "release tests" workflow in
GitHub Actions first.
- Push the tag.
- Release the version on GitHub with the same name as the tag and copy and paste the
appropriate changelog in the description. This triggers the PyPI release.
- Merge the `maintenance/X.Y.x` branch on the main branch. The main branch should have
the changelog for `X.Y-1.Z+1` (For example `v2.3.6`). This merge is required so
`pre-commit autoupdate` works for pylint.
- Fix version conflicts properly, or bump the version to `X.Y.0-devZ` (For example:
`2.4.0-dev6`) before pushing on the main branch

## Milestone handling

We move issues that were not done to the next milestone and block releases only if there
are any open issues labelled as `blocker`.
4 changes: 4 additions & 0 deletions tbump.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ src = "astroid/__pkginfo__.py"
name = "Upgrade changelog changelog"
cmd = "python3 script/bump_changelog.py {new_version}"

[[before_commit]]
name = "Normalize the contributors-txt configuration"
cmd = "contributors-txt-normalize-confinguration -a script/.contributors_aliases.json -o script/.contributors_aliases.json"

[[before_commit]]
name = "Upgrade the contributors list"
cmd = "python3 script/create_contributor_list.py"
Expand Down