Skip to content

Commit

Permalink
update re: automation
Browse files Browse the repository at this point in the history
  • Loading branch information
ClaudiaComito committed Nov 5, 2024
1 parent de594ad commit 8e46990
Showing 1 changed file with 25 additions and 90 deletions.
115 changes: 25 additions & 90 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,75 +3,32 @@
These are basic instructions for internal use. Will be expanded as the need arises.

### Table of Contents
- [Major or minor release](#major-or-minor-release)
- [Patch release](#patch-release)
- [GitHub and PyPi release](#github-and-pypi-release)
- [conda-forge build](#conda-forge-build)

### Major or minor release

(e.g. 1.4 --> 1.5, or 1.5 --> 2.0)

In the following, we assume we are about to release Heat v1.5.0.
### GitHub and PyPi release

**PRE-REQUISITES:**

- You need [PyPi](https://pypi.org/), [Test.PyPi](https://test.pypi.org/) account
- All intended PRs are merged, all tests have passed, and the `main` branch is ready for release.

1. We will release all new features in the development branch `main`. Branch off `main` to create a new release branch, e.g.:

```bash
git checkout main
git pull
git checkout -b release/1.5.x
```

2. Create a new branch off `release/1.5.x` and update the version number in `heat/core/version.py`:

```bash
git checkout release/1.5.x
git pull
git checkout -b workflows/version-update
```

- You have accounts on [PyPi](https://pypi.org/), [Test.PyPi](https://test.pypi.org/)
- All intended PRs are merged, all tests have passed.

1. Trigger the release preparation workflow by creating a new issue with the title `x.y.z` (stick to the format `x.y.z`), and label it with `release-prep`. You can use the "Release prep" template (TODO: ADD LINK).

Update `heat/core/version.py` like this:
Submit the issue. This will create a new PR with the version number updated in `heat/core/version.py`.

```python
"""This module contains Heat's version information."""

major: int = 1
"""Indicates Heat's main version."""
minor: int = 4 # <-- update to 5
"""Indicates feature extension."""
micro: int = 2 # <-- update to 0
"""Indicates revisions for bugfixes."""
extension: str = "dev" # <-- set to None
"""Indicates special builds, e.g. for specific hardware."""
```
2. Go through the checklist in the PR, get approval, and merge.

3. Commit and push new `version.py` in `workflows/version-update`.

4. If necessary, also update the Requirements section on README.md to reflect the latest version of the dependencies.

5. Update `CITATION.cff` if needed, i.e. add names of non-core contributors (they are included in the Release notes draft you just created). Push to `workflows/version-update`.

6. Create a pull request from `workflows/version-update` to `release/1.5.x`

- Remember to get a reviewers approval.
- Wait for the tests to finish.
- Squash and merge.

7. Draft release notes:
3. Draft release notes:

- Go to the GitHub repo's [Releases](https://github.com/helmholtz-analytics/heat/releases) page.
- The release notes draft is automated. Click on Edit Draft
- Select the new tag: v1.5.0. Modify Target branch: `release/1.5.x`
- Select the new tag and modify the target branch according to the release version (e.g. `release/1.5.x`)
- Edit release notes as needed (see older releases)
- Click on Save **but do not publish yet**

8. Build wheel in your local `heat/` directory, make sure you are on branch `release/1.5.x`.
4. Build wheel in your local `heat/` directory (make sure you are on the release branch, i.e. `release/1.5.x`!)

```bash
rm -f dist/*
Expand All @@ -80,26 +37,26 @@ extension: str = "dev" # <-- set to None

You might have to install the `build` package first (i.e. with `conda install -c conda-forge build` or `pip install build`)

9. Upload to Test PyPI and verify things look right. You need to install `twine` first.
5. Upload to Test PyPI and verify things look right (you may need to install `twine` first).

```bash
twine upload -r testpypi dist/*
```

`twine` will prompt for your username and password.

10. When everything works, upload to PyPI:
6. When you're sure everything works, release to PyPI:
```bash
twine upload dist/*
```
11. Go back to the Release Notes draft and publish them. The new release is out!
7. Go back to the Release Notes draft and publish them. The GitHub release is out!
- Make sure the CHANGELOG.md got updated, if not, call @JuanPedroGHM.
- Check our [Zenodo page](https://zenodo.org/doi/10.5281/zenodo.2531472) to make sure a DOI was created for the release.
12. On branch `main`, we want to modify the version so that `minor` is increased by 1, and `extension` is "dev". In this example we want the version on `main` to be:`1.6.0-dev`. We need to create a new branch from `main`:
8. On branch `main`, we want to modify the version so that `minor` is increased by 1, and `extension` is "dev". In this example we want the version on `main` to be:`1.6.0-dev`. We need to create a new branch from `main`:
```bash
git checkout main
Expand All @@ -110,40 +67,9 @@ extension: str = "dev" # <-- set to None
On branch `workflows/update-version-main`, modify `version.py` so that `minor` is increased by 1, and `extension` is `"dev"`. Commit and push the changes.
13. Create a PR with `main` as the base branch.

14. Get approval and merge. You're done! Except if you're a conda-forge maintainer, then see [conda-forge build](#conda-forge-build).


### Patch release

(e.g. 1.5.0 --> 1.5.1)

1. Check that all intended branches have been merged to the release branch you want to upgrade, in this example `release/1.5.x`. Create a new branch off `release/1.5.x`, e.g.:

```bash
git checkout release/1.5.x
git pull
git checkout -b workflows/version-update
```

2. Update `heat/core/version.py` like this:

```python
"""This module contains Heat's version information."""
major: int = 1
"""Indicates Heat's main version."""
minor: int = 5
"""Indicates feature extension."""
micro: int = 0 # <-- update to 1
"""Indicates revisions for bugfixes."""
extension: str = None
"""Indicates special builds, e.g. for specific hardware."""
```

3. Follow steps 3-14 from the [Major or minor release section](#major-or-minor-release).
9. Create a PR with `main` as the base branch.
10. Get approval and merge. You're done! Except if you're a conda-forge maintainer, then see [conda-forge build](#conda-forge-build).
## conda-forge build
After releasing, the conda-forge automation will create a new PR on https://github.com/conda-forge/heat-feedstock. It's normal if this takes hours. conda-forge maintainers will review the PR and merge it if everything is correct.
Expand All @@ -153,3 +79,12 @@ After releasing, the conda-forge automation will create a new PR on https://gith
- Make sure dependencies match.
- Once the PR is done, wait for the CI checks to finish and merge.
- Refer to the conda-forge docs if there are any issues: https://conda-forge.org/docs/maintainer/updating_pkgs.html#pushing-to-regro-cf-autotick-bot-branch

## easybuild @ JSC
TBD

## spack
TBD

## Docker
TBD

0 comments on commit 8e46990

Please sign in to comment.