Skip to content

Commit 10c3321

Browse files
committed
Update RELEASE.md
1 parent 7cb8cdb commit 10c3321

File tree

1 file changed

+75
-34
lines changed

1 file changed

+75
-34
lines changed

RELEASE.md

Lines changed: 75 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
## Release process - full release of `plotly` package
55

6-
This is the release process for releasing `plotly.py` version `X.Y.Z`, including changelogs, Github release and forum announcement.
6+
This is the release process for releasing Plotly.py version `X.Y.Z`, including changelogs, GitHub release and forum announcement.
77

88
### Finalize changelog
99

@@ -13,59 +13,100 @@ Make sure the changelog includes the version being published at the top, along
1313
with the expected publication date.
1414

1515
Use the `Added`, `Changed`, `Deprecated`, `Removed`, `Fixed`, and `Security`
16-
labels for all changes to plotly.py. If the version of plotly.js has
16+
labels for all changes to Plotly.py. If the version of Plotly.js has
1717
been updated, include this as the first `Updated` entry. Call out any
1818
notable changes as sub-bullets (new trace types in particular), and provide
19-
a link to the plotly.js CHANGELOG.
19+
a link to the Plotly.js CHANGELOG.
2020

21-
### Finalize versions
21+
### Update version numbers
2222

23-
**Create a branch `git checkout -b release-X.Y.Z` *from the tip of `origin/main`*.**
23+
**Create a release branch `git checkout -b release-X.Y.Z` _from the tip of `origin/main`_.**
2424

25-
Manually update the versions to `X.Y.Z` in the files specified below.
25+
- Manually update the versions to `X.Y.Z` in the files specified below:
26+
- `pyproject.toml`
27+
- update version
28+
- `CHANGELOG.md`
29+
- update version and release date
30+
- finalize changelog entries according to instructions above
31+
- `CITATION.cff`
32+
- update version and release date
33+
- Run `uv lock` to update the version number in the `uv.lock` file (do not update manually)
34+
- Commit and push your changes to the release branch:
35+
- `git add -u`
36+
- `git commit -m "version changes for vX.Y.Z"`
37+
- `git push`
38+
- Create a GitHub pull request from `release-X.Y.Z` to `main` and wait for CI to be green
39+
- On the release branch, create and push a tag for the release:
40+
- `git tag vX.Y.Z`
41+
- `git push origin vX.Y.Z`
2642

27-
- `pyproject.toml`
28-
+ update version
29-
- `CHANGELOG.md`
30-
+ update the release date
31-
- Commit your changes on the branch:
32-
+ `git commit -a -m "version changes for vX.Y.Z"`
33-
- Create a tag for Github release
34-
+ `git tag vX.Y.Z`
35-
+ `git push --atomic origin release-X.Y.Z vX.Y.Z`
36-
- Create a Github pull request from `release-X.Y.Z` to `main` and wait for CI to be green
43+
### Manual QA in Jupyter
3744

38-
### Download and QA CI Artifacts
45+
We don't currently have automated tests for Jupyter, so we do this QA step manually.
3946

40-
The `full_build` job in the `release_build` workflow in CircleCI produces a tarball of artifacts `output.tgz` which you should download and decompress, which will give you a directory called `output`. The filenames contained within will contain version numbers.
47+
The `full_build` job in the `release_build` workflow in CircleCI produces a tarball of artifacts `output.tgz`
48+
which you should download and decompress, which will give you a directory called `output`. The filenames within
49+
will contain version numbers; make sure the version numbers are correct.
4150

42-
To locally install the PyPI dist, make sure you have an environment with JupyterLab installed (maybe one created with `conda create -n condatest python=3.10 jupyter anywidget pandas`):
51+
Set up an environment with Jupyter, AnyWidget, and Pandas installed (`pip install jupyter anywidget pandas`). Then:
4352

44-
- `tar xzf output.tgz`
53+
- unzip downloaded `output.tgz`
4554
- `pip uninstall plotly`
46-
- `conda uninstall plotly` (just in case!)
47-
- `pip install path/to/output/dist/plotly-X.Y.X-py3-none-any.whl`
55+
- `pip install path/to/output/dist/plotly-X.Y.Z-py3-none-any.whl`
4856

49-
You'll want to check, in both Lab and Notebook, **in a brand new notebook in each** so that there is no caching of previous results, that `go.Figure()` and `go.FigureWidget()` work without error.
57+
You'll want to check, in both JupyterLab (launch with `jupyter lab`) and Jupyter Notebook (launch with `jupyter notebook`),
58+
that `go.Figure()` and `go.FigureWidget()` work as expected.
5059

51-
### Publishing
60+
Notes:
61+
- **Start by creating a brand new notebook each time** so that there is no caching of previous results
62+
- **Do not run the Jupyter commands from the root `plotly.py/` directory on your machine** because Jupyter may be confused
63+
by metadata from previous Plotly.py builds
5264

53-
Once you're satisfied that things render in Lab and Notebook in Widget and regular mode,
54-
you can publish the artifacts. **You will need special credentials from Plotly leadership to do this.**.
65+
Code for testing `go.Figure()`:
66+
```python
67+
import plotly
68+
import plotly.graph_objects as go
5569

70+
print(plotly.__version__) # Make sure version is correct
71+
fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4], y=[1, 3, 2, 4]))
72+
fig.show() # Figure should render in notebook
73+
```
74+
75+
Code for testing `go.FigureWidget()`:
76+
```python
77+
import plotly
78+
import plotly.graph_objects as go
79+
80+
print(plotly.__version__) # Make sure version is correct
81+
fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4], y=[1, 3, 2, 4]))
82+
figure_widget = go.FigureWidget(fig)
83+
figure_widget # Figure should render in notebook
84+
```
85+
86+
Once these are verified working, you can move on to publishing the release.
87+
88+
### Merge the release PR and make a GitHub release
89+
90+
- Merge the pull request you created above into `main`
91+
- Go to https://github.com/plotly/plotly.py/releases and "Draft a new release"
92+
- Enter the `vX.Y.Z` tag you created already above and make "Release title" the same string as the tag.
93+
- Copy the changelog section for this version into "Describe this release"
94+
- Upload the build artifacts downloaded in the previous step (`.tar` and `.whl`)
95+
96+
### Publishing to PyPI
97+
98+
The final step is to publish the release to PyPI. **You will need special permissions from Plotly leadership to do this.**.
99+
100+
You must install first install [Twine](https://pypi.org/project/twine/) (`pip install twine`) if not already installed.
56101

57102
Publishing to PyPI:
58103
```bash
59104
(plotly_dev) $ cd path/to/output
60105
(plotly_dev) $ twine upload plotly-X.Y.Z*
61106
```
62107

63-
### Merge the PR and make a Release
64-
65-
1. Merge the pull request you created above into `main`
66-
2. Go to https://github.com/plotly/plotly.py/releases and "Draft a new release"
67-
3. Enter the `vX.Y.Z` tag you created already above and make "Release title" the same string as the tag.
68-
4. Copy the changelog section for this version as the "Describe this release"
108+
You will be prompted to enter an API token; this can be generated in your PyPI account settings.
109+
Your account must have permissions to publish to the Plotly project on PyPI.
69110

70111
### Update documentation site
71112

@@ -85,9 +126,9 @@ to features in the release.
85126

86127
### Notify Stakeholders
87128

88-
* Post an announcement to the Plotly Python forum, with links to the README installation instructions and to the CHANGELOG.
129+
* Post an announcement to the [Plotly Python forum](https://community.plotly.com/c/plotly-python/5), with links to the README installation instructions and to the CHANGELOG.
89130
* Update the previous announcement to point to this one
90-
* Update the Github Release entry and CHANGELOG entry to have the nice title and a link to the announcement
131+
* Update the GitHub Release entry and CHANGELOG entry to have the nice title and a link to the announcement
91132
* Follow up on issues resolved in this release or forum posts with better answers as of this release
92133

93134
## Release process - Release *Candidate* of `plotly` package

0 commit comments

Comments
 (0)