Skip to content

Commit

Permalink
Add releasing_guide.md and prepare_release.py script
Browse files Browse the repository at this point in the history
  • Loading branch information
ericpre committed May 4, 2024
1 parent 4d45bec commit 60f6612
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 0 deletions.
53 changes: 53 additions & 0 deletions prepare_release.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env python3
import argparse
import re
import subprocess


def run_towncrier(tag):
cmd = ("towncrier", "build", "--version", tag.strip("v"))

return subprocess.call(cmd)


def update_fallback_version_in_pyproject(tag, fname="pyproject.toml"):
version = tag.strip("v").split(".")
if len(version) < 3:
version += ["0"]

# Default to +1 on patch version
major, minor, patch = version[0], version[1], int(version[2]) + 1

with open(fname, "r") as file:
lines = file.readlines()

pattern = "fallback_version"
new_version = f"{major}.{minor}.{patch}.dev0"
# Iterate through the lines and find the pattern
for i, line in enumerate(lines):
if re.search(pattern, line):
lines[i] = f'{pattern} = "{new_version}"\n'
break

# Write the updated content back to the file
with open(fname, "w") as file:
file.writelines(lines)

print(
f"\nNew (fallback) dev version ({new_version}) written to `pyproject.toml`.\n"
)


if __name__ == "__main__":
# Get tag argument
parser = argparse.ArgumentParser()
parser.add_argument("tag")
args = parser.parse_args()
tag = args.tag

# Update release notes
# towncrier is not used in this repository
# run_towncrier(tag)

# Update fallback version for setuptools_scm
update_fallback_version_in_pyproject(tag)
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ source = ["hyperspy_gui_ipywidgets"]
omit = [
"hyperspy_gui_ipywidgets/tests/*",
"hyperspy_gui_ipywidgets/conftest.py",
"prepare_release.py",
]

[tool.coverage.report]
Expand Down
33 changes: 33 additions & 0 deletions releasing_guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

Cut a Release
=============

Create a PR to the `main` branch and go through the following steps:

**Preparation**
- Prepare the release by running the `prepare_release.py` python script (e.g. `python prepare_release.py 2.0.1`) , which will do the following:
- update the `setuptools_scm` fallback version in `pyproject.toml`.
- Check release notes
- (optional) check conda-forge and wheels build. Pushing a tag to a fork will run the release workflow without uploading to pypi
- Let that PR collect comments for a day to ensure that other maintainers are comfortable with releasing

**Tag and release**
:warning: this is a point of no return point :warning:
- push tag (`vx.y.z`) to the upstream repository and the following will be triggered:
- build of the wheels and their upload to pypi
- creation of a Github Release

**Post-release action**
- Merge the PR

Follow-up
=========

- Tidy up and close corresponding milestone
- A PR to the conda-forge feedstock will be created by the conda-forge bot

Additional information
======================

The version is defined by ``setuptools_scm`` at build time when packaging HyperSpy. In an editable installation (when using ``pip install -e .``), the version is defined from the
git repository.

0 comments on commit 60f6612

Please sign in to comment.