Skip to content

Commit

Permalink
Update release directory from release/6.0-dev branch, tag 6.0.9.
Browse files Browse the repository at this point in the history
mauritsvanrees committed Dec 19, 2023
1 parent 90a1763 commit e7103a4
Showing 5 changed files with 307 additions and 657 deletions.
91 changes: 29 additions & 62 deletions release/RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,78 +1,41 @@
# Release notes for Plone 6.0.8
# Release notes for Plone 6.0.9

* Released: Monday November 6, 2023
* Released: Tuesday December 19, 2023
* Check the [release schedule](https://plone.org/download/release-schedule).
* Read the [upgrade guide](https://6.docs.plone.org/upgrade/index.html), explaining the biggest changes compared to 5.2.
* Canonical place for these [release notes](https://dist.plone.org/release/6.0.8/RELEASE-NOTES.md) and the full [packages changelog](https://dist.plone.org/release/6.0.8/changelog.txt).
* Canonical place for these [release notes](https://dist.plone.org/release/6.0.9/RELEASE-NOTES.md) and the full [packages changelog](https://dist.plone.org/release/6.0.9/changelog.txt).

If you want to jump straight in, here are two important links:

* With pip you can use the constraints file at [https://dist.plone.org/release/6.0.8/constraints.txt](https://dist.plone.org/release/6.0.8/constraints.txt)
* With Buildout you can use the versions file at [https://dist.plone.org/release/6.0.8/versions.cfg](https://dist.plone.org/release/6.0.8/versions.cfg), plus optionally [`versions-extra.cfg`](https://dist.plone.org/release/6.0.8/versions-extra.cfg) and [`versions-ecosystem.cfg`](https://dist.plone.org/release/6.0.8/versions-ecosystem.cfg).
* With pip you can use the constraints file at [https://dist.plone.org/release/6.0.9/constraints.txt](https://dist.plone.org/release/6.0.9/constraints.txt)
* With Buildout you can use the versions file at [https://dist.plone.org/release/6.0.9/versions.cfg](https://dist.plone.org/release/6.0.9/versions.cfg), plus optionally [`versions-extra.cfg`](https://dist.plone.org/release/6.0.9/versions-extra.cfg) and [`versions-ecosystem.cfg`](https://dist.plone.org/release/6.0.9/versions-ecosystem.cfg).


## Highlights

Major changes since 6.0.7:
Major changes since 6.0.8:

* `plone.scale`: Keep scaled WEBP images in WEBP format instead of converting to JPEG.
* `plone.recipe.zope2instance`: Add `dos_protection` config. See "Error when uploading large files" below.
* `Zope`:
* Make sure the object title in the ZMI breadcrumbs is quoted to prevent a cross-site scripting issue.
* Base the inline/attachment logic developed for CVE-2023-42458 on the media type proper (ignore parameters and whitespace and normalize to lowercase).
* Plone 6.0.9 is the first release that can run on Python 3.12!
Unfortunately, there are [reports](https://github.com/zopefoundation/Zope/issues/1188) that on Python 3.12.1 the tests fail.
This should be only a problem in the tests, but it is hard to be completely sure.
So we cannot officially recommend Python 3.12 yet.
* `Zope`: Support Python 3.12.
* `plone.restapi`:
- Remove deprecated @unlock, @refresh-lock endpoints
- Remove `plone.tiles` and the `@tiles` endpoint.
- Change the @linkintegrity endpoint to add `items_total`, the number of contained items which would be deleted.
- The default branch was renamed from `master` to `main`.
- Add support for getting the `/@querystring` endpoint in a specific context.
- Temporarily disable form memory limit checking for files and images. This fixes upload of files and images larger than 1MB. See below.
* `plone.base`: Move interface `INameFromTitle` from `plone.app.content` here.
This helps avoiding a circular dependency between `plone.app.dexterity` and `plone.app.content`.
* `plone.app.querystring`: Add a way to specify a context for getting vocabularies in the QuerystringRegistryReader.
See [PR 137](https://github.com/plone/plone.app.querystring/pull/137).


## Error when uploading large files

With Zope 5.8.4+ (included in Plone 6.0.7) you may get `zExceptions.BadRequest: data exceeds memory limit` when uploading an image or file of more than 1 MB. This is at least true when you have `plone.restapi` installed, which is the case if you use the default frontend (Volto).

In `plone.restapi` 9.1.2 (included in Plone 6.0.8) we have effectively disabled this check, because it had a bad effect on a central part of the restapi code. The limit is still used, but in less conditions.
We intend to [fix this](https://github.com/plone/plone.restapi/pull/1731) in a better way, but that needs more work and testing.

Regardless of which plone.restapi version is used, you can change this and other limits defined in Zope.
See `dos_protection` in the [Zope configuration reference](https://zope.readthedocs.io/en/latest/operation.html#zope-configuration-reference) for explanation of this and other options.

If you use Buildout, you can add this in your instance/zeoclient recipe, and choose your own limit:

```
zope-conf-additional =
<dos_protection>
form-memory-limit 4MB
</dos_protection>
```

If you used [`cookiecutter-zope-instance`](https://github.com/plone/cookiecutter-zope-instance) to create a Plone site, you can add these lines to `etc/zope.conf`, just like the latest development version [offers](https://github.com/plone/cookiecutter-zope-instance/pull/12/files):

```
<dos_protection>
form-memory-limit 4MB
</dos_protection>
```

Of course you are free to choose a higher or lower limit.


## Advice: use named behaviors always

Most content types have the "name from title" behavior: when you create a page "Hello World" this will get the id "hello-world". The `INameFromTitle` interface that does this, was moved from `plone.app.content` to `plone.base` here. This move helps in avoiding a circular dependency between two core packages.
There have always been two ways to refer to this behavior: by interface (`plone.app.content.interfaces.INameFromTitle`) and by name (`plone.namefromtitle`). But with the first version of this move, we saw that if you specify the interface, it no longer worked. We fixed this, as this is not the kind of thing we want to break in a Plone bugfix release.
But the advice is to **specify all behaviors by name**, not by interface. This will continue to work in all Plone versions, no matter if we move interfaces around or not. In fact, in Plone 5.2 there is already an upgrade that automatically changes this for all types, but of course we cannot control what add-on packages do when you install them fresh.
- Added preview_image and preview_image_link to the list of smart fields for resolveuid and link integrity.
* ZEO:
- Version 6.0.0 supports Python 3.12.
- It also switches "to using `async/await` directly instead of `@coroutine/yield`".
- That last change sounds like it could potentially have unforeseen side effects, so it would be good to get this more field tested.
(I may be too cautious here.)
- So for Python 3.11 and lower we pin 5.4.1, and on Python 3.12 we pin 6.0.0.
You are encouraged to try out the newer version on all Python versions, and report any problems.
We will likely pin the new version for all Python versions in the next Ploen bugfix release.
- See the [ZEO 6.0.0 changelog](https://github.com/zopefoundation/ZEO/blob/6.0.0/CHANGES.rst)


## Volto frontend

The default frontend for new Plone 6 sites is Volto. Latest release is [16.26.0](https://www.npmjs.com/package/@plone/volto/v/16.26.0). See the [changelog](https://github.com/plone/volto/blob/16.26.0/CHANGELOG.md).
The default frontend for new Plone 6 sites is Volto. Latest release is [16.30.0](https://www.npmjs.com/package/@plone/volto/v/16.30.0). See the [changelog](https://github.com/plone/volto/blob/16.30.0/CHANGELOG.md).
Note that this is a JavaScript frontend that you need to run in a separate process with NodeJS.

Also, existing Plone sites need some or more extensive changes to be upgraded before they can use the Volto Frontend. Please read the guide on [migrating from Plone Classic UI to Volto](https://6.docs.plone.org/backend/upgrading/version-specific-migration/migrate-to-volto.html).
@@ -89,7 +52,11 @@ The HTML based and server side rendered UI that was present in Plone 5.2 and ear

This release supports Python 3.8, 3.9, 3.10, and 3.11.

There is preliminary support for Python 3.12, but this is not officially recommended yet. Especially some changes in `RestrictedPython` may need to happen still.
Plone 6.0.9 is the first release that also runs on Python 3.12, but we cannot officially recommend it yet for production use.
See the remark in the Highlights above about tests failing on 3.12.1.
That Plone runs on 3.12 is largely made possible by recent changes in `Zope` and `RestrictedPython`, so thanks a lot to the developers working on that!

Note that Plone 6.0 is tested on Python 3.8 and 3.11 on every change to core packages. For the other Python versions we run the tests once a week.


## pip, buildout, setuptools
@@ -98,8 +65,8 @@ In Plone core we use these versions to install Plone:

```
pip==23.3.1
setuptools==68.2.2
wheel==0.41.2
setuptools==69.0.2
wheel==0.42.0
zc.buildout==3.0.1
```

665 changes: 163 additions & 502 deletions release/changelog.txt

Large diffs are not rendered by default.

24 changes: 18 additions & 6 deletions release/combine-constraints.py
Original file line number Diff line number Diff line change
@@ -32,18 +32,20 @@ def parse_file(filename):
constraints39 = os.path.join(directory, "constraints39.txt")
constraints310 = os.path.join(directory, "constraints310.txt")
constraints311 = os.path.join(directory, "constraints311.txt")
for filename in (constraints38, constraints39, constraints310, constraints311):
constraints312 = os.path.join(directory, "constraints312.txt")
for filename in (constraints38, constraints39, constraints310, constraints311, constraints312):
if not os.path.exists(filename):
print(f"ERROR: {filename} does not exist.")
print(
"Run: tox -p auto -e constraints38,constraints39,constraints310,constraints311,constraints"
"Run: tox -p auto -e constraints38,constraints39,constraints310,constraints311,constraints312,constraints"
)
sys.exit(1)

c38 = parse_file(constraints38)
c39 = parse_file(constraints39)
c310 = parse_file(constraints310)
c311 = parse_file(constraints311)
c312 = parse_file(constraints312)

# Gather them all in one dictionary.
pins = defaultdict(dict)
@@ -55,6 +57,8 @@ def parse_file(filename):
pins[package][310] = version
for package, version in c311.items():
pins[package][311] = version
for package, version in c312.items():
pins[package][312] = version

# Combine them.
combi = []
@@ -63,7 +67,8 @@ def parse_file(filename):
py39_version = versions.pop(39, None)
py310_version = versions.pop(310, None)
py311_version = versions.pop(311, None)
if py38_version == py39_version == py310_version == py311_version:
py312_version = versions.pop(312, None)
if py38_version == py39_version == py310_version == py311_version == py312_version:
# All versions are the same.
combi.append(f"{package}=={py311_version}")
continue
@@ -74,22 +79,29 @@ def parse_file(filename):
combi.append(f'{package}=={py38_version}; python_version == "3.8"')

# Check if Python 3.9 differs from the rest.
if py39_version == py310_version == py311_version and py39_version is not None:
if py39_version == py310_version == py311_version == py312_version and py39_version is not None:
combi.append(f'{package}=={py39_version}; python_version >= "3.9"')
continue
if py39_version is not None:
combi.append(f'{package}=={py39_version}; python_version == "3.9"')

# Check if Python 3.10 differs from the rest.
if py310_version == py311_version and py310_version is not None:
if py310_version == py311_version == py312_version and py310_version is not None:
combi.append(f'{package}=={py310_version}; python_version >= "3.10"')
continue
if py310_version is not None:
combi.append(f'{package}=={py310_version}; python_version == "3.10"')

# Check if Python 3.11 differs from the rest.
if py311_version == py312_version and py311_version is not None:
combi.append(f'{package}=={py310_version}; python_version >= "3.11"')
continue
if py311_version is not None:
combi.append(f'{package}=={py311_version}; python_version >= "3.11"')
combi.append(f'{package}=={py311_version}; python_version == "3.11"')

# Check if Python 3.12 differs from the rest.
if py312_version is not None:
combi.append(f'{package}=={py312_version}; python_version >= "3.12"')

output = "\n".join(combi) + "\n"
# sanity check:
177 changes: 91 additions & 86 deletions release/constraints.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
AccessControl==6.2
Acquisition==5.0
AccessControl==6.3
Acquisition==5.1
AuthEncoding==5.0
BTrees==5.0
Babel==2.12.1
Chameleon==4.1.0
DateTime==5.2
BTrees==5.1
Babel==2.13.1
Chameleon==4.2.0
DateTime==5.3
Deprecated==1.2.14
DocumentTemplate==4.5
ExtensionClass==5.0
DocumentTemplate==4.6
ExtensionClass==5.1
GitPython==3.1.40
Jinja2==3.1.2
Markdown==3.4.4
Markdown==3.5.1
MarkupSafe==2.1.3
Missing==5.0
MultiMapping==5.0
Paste==3.5.3
PasteDeploy==3.0.1
Persistence==4.0.post1
Paste==3.7.1
PasteDeploy==3.1.0
Persistence==4.1
Pillow==9.5.0
Plone==6.0.8
Plone==6.0.9
Products.BTreeFolder2==5.1
Products.CMFCore==3.2
Products.CMFDiffTool==4.0.1
Products.CMFDynamicViewFTI==7.0.2
Products.CMFEditions==4.0.2
Products.CMFPlacefulWorkflow==3.0.3
Products.CMFPlone==6.0.8
Products.CMFPlone==6.0.9
Products.CMFUid==4.1
Products.DCWorkflow==3.0
Products.DateRecurringIndex==3.0.1
@@ -41,22 +41,22 @@ Products.PluginRegistry==2.0
Products.PortalTransforms==4.0.1
Products.PrintingMailHost==1.1.7
Products.PythonScripts==5.0
Products.Sessions==4.15
Products.Sessions==5.0
Products.SiteErrorLog==6.0
Products.StandardCacheManagers==5.0
Products.ZCatalog==7.0
Products.ZopeVersionControl==4.0
Products.ZopeVersionControl==4.1
Products.isurlinportal==2.0.1
Products.statusmessages==5.0.6
Products.validation==2.1.3
PyGithub==1.59.1
PyJWT==2.7.0
PyGithub==2.1.1
PyJWT==2.8.0
PyNaCl==1.5.0
PySocks==1.7.1
PyYAML==6.0.1
Pygments==2.16.1
Pygments==2.17.2
Record==4.0
RestrictedPython==6.2
RestrictedPython==7.0
SecretStorage==3.3.3
Sphinx==7.1.2; python_version == "3.8"
Sphinx==7.2.6; python_version >= "3.9"
@@ -65,15 +65,19 @@ WSGIProxy2==0.5.1
WebOb==1.8.7
WebTest==3.0.0
ZConfig==4.0
ZEO==5.4.1
ZEO==5.4.1; python_version == "3.8"
ZEO==5.4.1; python_version == "3.9"
ZEO==5.4.1; python_version == "3.10"
ZEO==5.4.1; python_version == "3.11"
ZEO==6.0.0; python_version >= "3.12"
ZODB==5.8.1
ZODB3==3.11.0
Zope==5.8.6
Zope==5.9
Zope2==4.0
ZopeUndo==6.0
alabaster==0.7.13
argcomplete==3.1.2
argh==0.29.4
argcomplete==3.1.6
argh==0.30.4
async-generator==1.10
attrs==23.1.0
backports.cached-property==1.0.2
@@ -84,9 +88,9 @@ borg.localrole==3.1.11
build==1.0.3
cachecontrol==0.13.1
cached-property==1.5.2
certifi==2023.7.22
cffi==1.15.1
charset-normalizer==3.2.0
certifi==2023.11.17
cffi==1.16.0
charset-normalizer==3.3.2
check-manifest==0.49
click==8.1.7
click-default-group==1.2.4
@@ -101,66 +105,67 @@ collective.z3cform.datagridfield==3.0.2
colorama==0.4.6
commonmark==0.9.1
configparser==5.3.0
cryptography==41.0.5
cryptography==41.0.7
cssselect==1.2.0
decorator==5.1.1
diazo==1.5.0
distro==1.8.0
docutils==0.18.1
exceptiongroup==1.1.3
exceptiongroup==1.2.0
fancycompleter==0.9.1
feedparser==6.0.10
filelock==3.12.4
filelock==3.13.1
five.customerize==2.1.0
five.intid==2.0.0
five.localsitemanager==4.0
furl==2.1.3
future==0.18.3
gitdb==4.0.11
grpcio-tools==1.59.0
gunicorn==20.1.0
gunicorn==21.2.0
h11==0.14.0
httplib2==0.22.0
i18ndude==6.1.0
icalendar==5.0.10
icalendar==5.0.11
idna==3.4
imagesize==1.4.1
importlib-metadata==6.8.0
importlib-resources==5.13.0
incremental==22.10.0
jaraco.classes==3.3.0
jeepney==0.8.0
jsonschema==4.18.6
jsonschema-specifications==2023.7.1
keyring==23.13.1
jsonschema==4.20.0
jsonschema-specifications==2023.11.2
keyring==24.3.0
lockfile==0.12.2
lxml==4.9.3
manuel==1.12.4
markdown-it-py==2.2.0
markdown-it-py==3.0.0
mdurl==0.1.2
mock==5.1.0
more-itertools==9.1.0
more-itertools==10.1.0
mr.developer==2.0.1
msgpack==1.0.7
multipart==0.2.4
mxdev==3.0.0
nh3==0.2.14
nt-svcutils==2.13.0
oauthlib==3.2.2
orderedmultidict==1.0.1
outcome==1.2.0
overrides==7.3.1
packaging==23.1
outcome==1.3.0post0
overrides==7.4.0
packaging==23.2
pdbpp==0.10.3
pep440==0.1.2
pep517==0.13.0
persistent==5.0
pep517==0.13.1
persistent==5.1
piexif==1.1.3
pip==23.3.1
pkginfo==1.9.6
pkgutil-resolve-name==1.3.10; python_version == "3.8"
plone.alterego==2.0.0
plone.api==2.0.6
plone.app.blocks==7.0.0
plone.api==2.0.8
plone.app.blocks==7.0.1
plone.app.caching==3.1.3
plone.app.content==4.1.0
plone.app.contentlisting==3.0.4
@@ -179,22 +184,22 @@ plone.app.iterate==5.0.2
plone.app.jquerytools==1.9.5
plone.app.layout==4.0.7
plone.app.linkintegrity==4.0.3
plone.app.locales==6.0.17
plone.app.locales==6.0.18
plone.app.lockingbehavior==2.0.0
plone.app.mosaic==3.1.5
plone.app.multilingual==7.0.3
plone.app.portlets==5.0.6
plone.app.querystring==2.1.0
plone.app.querystring==2.1.1
plone.app.redirector==3.0.1
plone.app.registry==2.0.3
plone.app.registry==2.0.4
plone.app.relationfield==3.0.3
plone.app.robotframework==2.1.1
plone.app.standardtiles==3.1.2
plone.app.testing==7.0.1
plone.app.textfield==2.0.0
plone.app.theming==5.0.5
plone.app.tiles==4.0.0
plone.app.upgrade==3.1.0
plone.app.theming==5.0.6
plone.app.tiles==4.0.1
plone.app.upgrade==3.1.1
plone.app.users==3.0.4
plone.app.uuid==2.2.2
plone.app.versioningbehavior==2.0.1
@@ -211,7 +216,7 @@ plone.behavior==2.0.0
plone.browserlayer==3.0.2
plone.cachepurging==3.0.2
plone.caching==2.0.1
plone.contentrules==3.0.0
plone.contentrules==3.0.1
plone.dexterity==3.0.3
plone.event==2.0.1
plone.folder==4.0.0
@@ -235,52 +240,52 @@ plone.recipe.command==1.1
plone.recipe.zeoserver==3.0.1
plone.recipe.zope2instance==6.12.2
plone.registry==2.0.0
plone.releaser==2.1.1
plone.releaser==2.2.1
plone.reload==3.0.2
plone.resource==3.0.0
plone.resourceeditor==4.0.1
plone.rest==4.1.2
plone.restapi==9.1.2
plone.restapi==9.2.1
plone.rfc822==3.0.0
plone.scale==4.1.0
plone.schema==2.0.1
plone.schemaeditor==4.0.5
plone.session==4.0.4
plone.staticresources==2.1.8
plone.staticresources==2.1.9
plone.stringinterp==2.0.1
plone.subrequest==2.0.4
plone.supermodel==2.0.3
plone.testing==9.0.0
plone.testing==9.0.1
plone.theme==4.0.1
plone.tiles==2.3.1
plone.transformchain==3.0.0
plone.uuid==2.0.0
plone.versioncheck==1.8.1
plone.volto==4.1.0
plone.z3cform==2.0.2
plonetheme.barceloneta==3.1.6
plone.volto==4.2.0
plone.z3cform==2.0.3
plonetheme.barceloneta==3.1.7
progress==1.6
prompt-toolkit==2.0.10
py==1.11.0
pyOpenSSL==23.2.0
pyOpenSSL==23.3.0
pycparser==2.21
pyparsing==3.1.1
pyproject-hooks==1.0.0
pyrepl==0.9.0
pyroma==4.2
pyrsistent==0.19.3
pyrsistent==0.20.0
python-dateutil==2.8.2
python-dotenv==1.0.0
python-gettext==5.0
pytz==2023.3.post1
readme-renderer==40.0.0
referencing==0.29.3
readme-renderer==42.0
referencing==0.31.1
repoze.xmliter==0.6.1
requests==2.31.0
requests-toolbelt==1.0.0
responses==0.23.3
responses==0.24.1
rfc3986==2.0.0
rich==13.6.0
rich==13.7.0
robotframework==6.0.2
robotframework-assertion-engine==2.0.0
robotframework-browser==17.5.2
@@ -289,13 +294,13 @@ robotframework-lsp==1.10.1
robotframework-pythonlibcore==4.2.0
robotframework-selenium2library==3.0.0
robotframework-selenium2screenshots==0.8.1
robotframework-seleniumlibrary==6.1.0
robotframework-seleniumlibrary==6.1.3
robotframework-seleniumtestability==2.1.0
robotsuite==2.3.2
roman==4.1
rpds-py==0.8.12
rpds-py==0.13.2
selenium==4.9.1
setuptools==68.2.2
setuptools==69.0.2
sgmllib3k==1.0.0
simplejson==3.19.2
six==1.16.0
@@ -317,30 +322,30 @@ sphinxcontrib-qthelp==1.0.3; python_version == "3.8"
sphinxcontrib-qthelp==1.0.6; python_version >= "3.9"
sphinxcontrib-serializinghtml==1.1.5; python_version == "3.8"
sphinxcontrib-serializinghtml==1.1.9; python_version >= "3.9"
stdlib-list==0.9.0
stdlib-list==0.10.0
tempstorage==6.0
toml==0.10.2
tomli==2.0.1
towncrier==23.6.0
transaction==3.1.0
trio==0.22.2
trio-websocket==0.10.4
trove-classifiers==2023.10.18
towncrier==23.11.0
transaction==4.0
trio==0.23.1
trio-websocket==0.11.1
trove-classifiers==2023.11.29
twine==4.0.2
types-PyYAML==6.0.12.10
types-toml==0.10.8.5
typing-extensions==4.7.1
urllib3==2.0.5
typing-extensions==4.8.0
urllib3==2.1.0
urllib3-secure-extra==0.1.0
wadllib==1.3.6
waitress==2.1.2
watchdog==3.0.0
wcwidth==0.2.8
wcwidth==0.2.12
webencodings==0.5.1
webresource==1.2
wheel==0.41.2
wheel==0.42.0
wmctrl==0.5
wrapt==1.15.0
wrapt==1.16.0
wsproto==1.2.0
z3c.caching==3.0
z3c.checkversions==2.1
@@ -364,7 +369,7 @@ zest.pocompile==2.0.0
zest.releaser==9.1.1
zestreleaser.towncrier==1.3.0
zipp==3.17.0
zodbpickle==3.0.1
zodbpickle==3.1
zodbupdate==2.0
zodbverify==1.2.0
zope.annotation==5.0
@@ -377,7 +382,7 @@ zope.cachedescriptors==5.0
zope.component==6.0
zope.componentvocabulary==2.3.0
zope.configuration==5.0
zope.container==5.1
zope.container==5.2
zope.contentprovider==5.0
zope.contenttype==5.1
zope.copy==4.3
@@ -389,23 +394,23 @@ zope.event==5.0
zope.exceptions==5.0.1
zope.filerepresentation==6.0
zope.globalrequest==2.0
zope.hookable==5.4
zope.hookable==6.0
zope.i18n==5.1
zope.i18nmessageid==6.0.1
zope.interface==6.0
zope.i18nmessageid==6.1.0
zope.interface==6.1
zope.intid==5.0
zope.keyreference==6.0
zope.lifecycleevent==5.0
zope.location==5.0
zope.mkzeoinstance==5.1.1
zope.pagetemplate==5.0
zope.processlifetime==3.0
zope.proxy==5.0.0
zope.proxy==5.1
zope.ptresource==5.0
zope.publisher==7.0
zope.ramcache==3.0
zope.schema==7.0.1
zope.security==6.1
zope.security==6.2
zope.sendmail==6.0
zope.sequencesort==5.0
zope.site==5.0
@@ -415,6 +420,6 @@ zope.tal==5.0.1
zope.tales==6.0
zope.testbrowser==6.0
zope.testing==5.0.1
zope.testrunner==6.1
zope.testrunner==6.2
zope.traversing==5.0
zope.viewlet==5.0
7 changes: 6 additions & 1 deletion release/tox.ini
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ envlist =
constraints39,
constraints310,
constraints311,
constraints312,
constraints,
gather,

@@ -28,10 +29,14 @@ commands = python create-constraints.py {toxinidir}/../ecosystem.cfg {toxinidir}
basepython = python3.11
commands = python create-constraints.py {toxinidir}/../ecosystem.cfg {toxinidir}/constraints311.txt

[testenv:constraints312]
basepython = python3.12
commands = python create-constraints.py {toxinidir}/../ecosystem.cfg {toxinidir}/constraints312.txt

[testenv:constraints]
basepython = python3
# Specifying other tox envs as dependencies helps when running in parallel.
depends = constraints38, constraints39, constraints310, constraints311
depends = constraints38, constraints39, constraints310, constraints311, constraints312
commands_pre =
commands = python combine-constraints.py {toxinidir}

0 comments on commit e7103a4

Please sign in to comment.