Skip to content

Commit 75f69f2

Browse files
committed
Tidy release.md
1 parent c1b8b12 commit 75f69f2

File tree

1 file changed

+101
-112
lines changed

1 file changed

+101
-112
lines changed

coredev/release.md

Lines changed: 101 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -7,137 +7,126 @@ myst:
77
"keywords": ""
88
---
99

10-
% -*- coding: utf-8 -*-
11-
1210
# The Plone release process
1311

14-
## Release process for Plone packages
12+
This chapter describes the process to release Plone and its packages.
13+
1514

16-
To keep the Plone software stack maintainable, the Python egg release process must be automated to high degree.
17-
This happens by enforcing Python packaging best practices and then making automated releases using the [zest.releaser](https://github.com/zestsoftware/zest.releaser/) tool.
15+
## Release process for Plone packages
1816

19-
This is extended with Plone coredev specific features by `plone.releaser <https://github.com/plone/plone.releaser>`.
17+
To keep the Plone software stack maintainable, the Python egg release process must be automated to a high degree.
18+
This happens by enforcing Python packaging best practices, and then making automated releases using [`zest.releaser`](https://github.com/zestsoftware/zest.releaser/).
2019

21-
- Anyone with necessary PyPi permissions must be able to make a new release by running the `fullrelease` command
20+
This is extended with Plone coredev specific features by [`plone.releaser`](https://github.com/plone/plone.releaser).
2221

23-
... which includes ...
22+
Anyone with necessary PyPI permissions must be able to make a new release by running the `fullrelease` command.
23+
This command includes the following requirements.
2424

25-
- All releases must be hosted on PyPi
26-
- All versions must be tagged at version control
27-
- Each package must have README.rst with links to the version control repository and issue tracker
28-
- CHANGES.rst (docs/HISTORY.rst respectively .txt in some packages) must be always up-to-date and must contain list of functional changes which may affect package users.
29-
- CHANGES.rst must contain release dates
30-
- README.rst and CHANGES.rst must be visible on PyPI
31-
- Released eggs must contain generated gettext .mo files,
32-
but these files must not be committed to the repository.
33-
The .mo files can be created with the `zest.pocompile` add-on,
34-
which should be installed together with `zest.releaser`.
35-
- `.gitignore` and `MANIFEST.in` must reflect the files going to egg (must include page template, po files)
25+
```{note}
26+
All files mentioned in this list may be written in Markdown or reStructuredText and have the appropriate file name suffix.
27+
```
3628

37-
More information:
29+
- All releases must be hosted on PyPI.
30+
- All versions must be tagged in version control.
31+
- Each package must have a {file}`README` file with links to the version control repository and issue tracker.
32+
- {file}`CHANGES` ({file}`docs/HISTORY`) must be always up-to-date and must contain list of functional changes which may affect package users.
33+
- {file}`CHANGES` must contain release dates.
34+
- {file}`README` and {file}`CHANGES` must be visible on PyPI.
35+
- Released eggs must contain generated gettext `.mo` files, but these files must not be committed to the repository.
36+
The `.mo` files can be created with the `zest.pocompile` add-on, which should be installed together with `zest.releaser`.
37+
- `.gitignore` and `MANIFEST.in` must reflect the files going in to the egg (must include page template, po files).
38+
39+
```{seealso}
40+
[High quality automated package releases for Python with `zest.releaser`](https://opensourcehacker.com/2012/08/14/high-quality-automated-package-releases-for-python-with-zest-releaser/).
41+
```
3842

39-
- [High quality automated package releases for Python with zest.releaser](http://opensourcehacker.com/2012/08/14/high-quality-automated-package-releases-for-python-with-zest-releaser/).
4043

4144
## Special packages
4245

4346
The Plone Release Team releases the core Plone packages.
44-
Several others also have the rights to release individual packages on <https://pypi.python.org>.
47+
Several others also have the rights to release individual packages on [PyPI](https://pypi.org/).
4548
If you have those rights on your account, you should feel free to make releases.
4649

47-
Some packages need special care or should be done only by specific people as they know what they are doing.
50+
Some packages need special care, or should be done only by specific people, as they know what they are doing.
4851
These are:
4952

50-
`Products.CMFPlone`, `Plone`, and `plone.app.upgrade`:
53+
`Products.CMFPlone`, `Plone`, and `plone.app.upgrade`
54+
: Please leave these to the release manager, Eric Steele.
5155

52-
: Please leave these to the release manager, Eric Steele.
56+
`plone.app.locales`
57+
: Please leave this to the i18n team lead, Vincent Fretin.
5358

54-
`plone.app.locales`:
55-
56-
: Please leave this to the i18n team lead, Vincent Fretin.
5759

5860
## Plone core release process checklist
5961

60-
1. Check Jenkins Status
61-
62-
Check latest Plone coredev job on jenkins.plone.org, it should be green, if it is not, fix the problem first.
63-
64-
2. Check out buildout.coredev
65-
66-
```
67-
git clone [email protected]:plone/buildout.coredev.git
68-
cd buildout.coredev
69-
git checkout 5.1
70-
python bootstrap.py
71-
bin/buildout -c buildout.cfg
72-
```
73-
74-
3. Check Packages for Updates
75-
76-
Check all packages for updates, add to/remove from checkouts.cfg accordingly.
77-
78-
This script may help:
79-
80-
```
81-
bin/manage report --interactive
82-
```
83-
84-
This step should not be needed, because we do the check for every single commit,
85-
but people may still have forgotten to add a package to the `checkouts.cfg` file.
86-
87-
4. Check packages individually
88-
89-
> Use the `bin/fullrelease` script from the core development buildout.
90-
> This includes extra checks that we have added in `plone.releaser`.
91-
> It guides you through all the next steps.
92-
>
93-
> 1. Check changelog
94-
>
95-
> Check if CHANGES.rst is up-to-date,
96-
> all changes since the last release should be included,
97-
> a Fixes and/or New header should be included,
98-
> with the relevant changes under it.
99-
> Upgrade notes are best placed here as well.
100-
> Compare `git log HEAD...<LAST_RELEASE_TAG>` with `CHANGES.rst`.
101-
> Or from zest.releaser: `lasttaglog <optional tag if not latest>`.
102-
>
103-
> 2. Run [pyroma](https://pypi.python.org/pypi/pyroma/)
104-
>
105-
> 3. Run [check-manifest](https://pypi.python.org/pypi/check-manifest/)
106-
>
107-
> 4. Check package "best practices" (README.rst, CHANGES.rst, src directory)
108-
>
109-
> > - Check if version in setup.py is correct and follows our versioning best practice
110-
>
111-
> 5. Make a release (zest.releaser: `bin/fullrelease`)
112-
> 6. Remove packages from auto-checkout section in `checkouts.cfg` and update `versions.cfg`.
113-
114-
5. Make sure `plone.app.upgrade` contains an upgrade step for the future Plone release.
115-
6. Update CMFPlone version in `profiles/default/metadata.xml`
116-
7. Create an issue in <https://github.com/collective/plone.app.locales/issues> to ask the i18n team lead @vincentfretin to do a plone.app.locales release.
117-
8. Create a pending release (directory) on dist.plone.org
118-
119-
> 1. Copy all core packages there.
120-
> 2. Possibly make an alpha/beta release of CMFPlone.
121-
> 3. Copy the versions.cfg file from coredev there.
122-
123-
09. Write an email to the Plone developers list announcing a pending release.
124-
10. Update plone.app.locales version.
125-
11. Create a unified changelog
126-
127-
```
128-
bin/manage changelog
129-
```
130-
131-
12. Make final release on dist.plone.org (remove "-pending")
132-
13. Update the "-latest" link on dist.plone.org
133-
14. Create new release on launchpad (<https://launchpad.net/plone/>)
134-
15. Create release page on <http://plone.org/products/plone/releases>
135-
16. Send links to installers list
136-
(<mailto:[email protected]> \<<mailto:[email protected]>>)
137-
17. Wait for installers to be uploaded to Launchpad,
138-
link on plone.org release page
139-
18. Publish release page on plone.org
140-
19. Update plone.org homepage links to point to new release
141-
20. Send out announcement to plone-announce
142-
21. Update #plone topic
143-
22. Ask the security team to update the <https://plone.org/security/hotfixes/> page in the configuration control panel.
62+
1. Check Jenkins status.
63+
Check the latest Plone coredev job on [Jenkins](https://jenkins.plone.org/).
64+
It should be green, but if it is not, fix the problem first.
65+
66+
2. Check out `buildout.coredev`.
67+
68+
```shell
69+
git clone [email protected]:plone/buildout.coredev.git
70+
cd buildout.coredev
71+
git checkout 5.1
72+
python bootstrap.py
73+
bin/buildout -c buildout.cfg
74+
```
75+
76+
3. Check packages for updates.
77+
Check all packages for updates, add to or remove from `checkouts.cfg` accordingly.
78+
This script may help:
79+
80+
```shell
81+
bin/manage report --interactive
82+
```
83+
84+
This step should not be needed, because we do the check for every single commit, but people may still have forgotten to add a package to the `checkouts.cfg` file.
85+
86+
4. Check packages individually.
87+
88+
Use the `bin/fullrelease` script from the core development buildout.
89+
This includes extra checks that we have added in `plone.releaser`.
90+
It guides you through all the next steps.
91+
92+
1. Check changelog.
93+
Check if `CHANGES` is up-to-date.
94+
All changes since the last release should be included.
95+
A "Fixes" or "New" header should be included, with the relevant changes under it.
96+
Upgrade notes are best placed here as well.
97+
Compare `git log HEAD...<LAST_RELEASE_TAG>` with `CHANGES`, or from `zest.releaser` use the command `lasttaglog <optional tag if not latest>`.
98+
2. Run [pyroma](https://pypi.org/project/pyroma/).
99+
3. Run [check-manifest](https://pypi.org/project/check-manifest/).
100+
4. Check package "best practices" (`README`, `CHANGES`, `src` directory).
101+
5. Check if the version in `setup.py` is correct and follows our versioning best practice.
102+
6. Make a release (zest.releaser: `bin/fullrelease`)
103+
7. Remove packages from auto-checkout section in `checkouts.cfg` and update `versions.cfg`.
104+
105+
5. Make sure `plone.app.upgrade` contains an upgrade step for the future Plone release.
106+
6. Update CMFPlone version in `profiles/default/metadata.xml`.
107+
7. Create an issue in <https://github.com/collective/plone.app.locales/issues> to ask the i18n team lead @vincentfretin to do a `plone.app.locales` release.
108+
8. Create a pending release (directory) on [dist.plone.org](https://dist.plone.org/).
109+
110+
1. Copy all core packages there.
111+
2. Possibly make an alpha or beta release of CMFPlone.
112+
3. Copy the `versions.cfg` file from coredev to there.
113+
114+
9. Write an email to the Plone developers list announcing a pending release.
115+
10. Update `plone.app.locales` version.
116+
11. Create a unified changelog.
117+
118+
```shell
119+
bin/manage changelog
120+
```
121+
122+
12. Make the final release on dist.plone.org (remove "-pending")
123+
13. Update the "-latest" link on [dist.plone.org](https://dist.plone.org/).
124+
14. For Plone 5.x versions only, create the new release on [Launchpad](https://launchpad.net/plone/).
125+
15. Create a release page on [plone.org](https://plone.org/download/releases)
126+
16. Send links to the installers list at [email protected].
127+
17. Wait for installers to be uploaded to Launchpad, with a link to the plone.org release page.
128+
18. Publish release page on plone.org.
129+
19. Update plone.org homepage links to point to the new release.
130+
20. Send out announcement to the plone-announce email distribution list.
131+
21. Update #plone topic (obsolete? maybe announce to Discord?)
132+
22. Ask the security team to update the [Hotfixes](https://plone.org/security/hotfixes/) page in the configuration control panel.

0 commit comments

Comments
 (0)