Plone 6.0.5 soft released

Plone 6.0.5 has been soft-released. Please give it a try and let me know if there are any critical issues.
See also the checklist for this release .

For those who haven't run across soft-releases before, this is the last step before the final release. Because things haven't been finalized yet, some packages may change between now and the release. It is not recommended to use soft-releases in production.

Release notes for Plone 6.0.5rc1

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

Highlights

Major changes since 6.0.4:

  • Zope: Do not break on requests that pass both a query string and a Content-Type header or request body.
  • Products.CMFPlone: Do not truncate the sortable_title index.
  • plone.app.caching: Update the resourceRegistries ETag to use the config registry modification time. This time is set since Plone 6.0.4.
  • plone.app.dexterity: Content types control panel: Show behavior name and interface.
  • plone.app.z3cform:
    • Merge utils and base classes from plone.app.widgets and do not depend on it anymore.
    • Remove invalid unicode control characters for TextareaWidget.
  • plone.recipe.zeoserver: Fix lost dependencies when defining additional eggs in buildout part.
  • plone.restapi:
    • Create relations service. Query, add, delete.
    • Add portal_type title (type_title) to content response.
    • Added support for nested schemas with resolveuid deserializer.
  • plone.staticresources: Update mockup from 5.0.10 to 5.0.12:
    • pat markspeciallinks: Fix selector for tests.
    • pat recurrence: Fix default selected range option if there's no "repeat forever" button (which is default in the event behavior).
    • pat textareamimetypeselector: Async initialization of textareas. Fixes TinyMCE in modals not showing up (see Mosaic).
    • pat tinymce: Add urlconverter_callback and do not convert external links/images urls
    • pat tinymce: Do not remove current paragraph when inserting image.
  • Several packages: Fix cyclic dependencies, drop Python 2 or Plone 5.2 support.

Volto frontend

The default frontend for new Plone 6 sites is Volto. Latest release is 16.20.7. See the changelog.
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.

Classic UI

The HTML based and server side rendered UI that was present in Plone 5.2 and earlier major Plone releases is still available and has also been updated and improved upon in Plone 6. Our documentation now refers to this frontend as 'Classic UI'. Support for Classic UI is especially relevant for existing Plone sites which for whatever reason or requirements are not yet ready to be upgraded to the Volto frontend.

Python compatibility

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

pip, buildout, setuptools

In Plone core we use these versions to install Plone:

pip==23.0.1
setuptools==67.6.1
wheel==0.40.0
zc.buildout==3.0.1

In general you are free to use whatever versions work for you, but these worked for us.

Note that setuptools 66 or higher is more strict with what versions it can recognize. If you run pip or buildout and it suddenly cannot find a package with a non-standard version, then this may be the cause.

Installation

For installation instructions, see the documentation.

Issues

If you find any issues, please report them in the main issue tracker.

4 Likes

We've just tried the latest 6.0-dev buildout here and it works perfectly :+1:t3:

1 Like

i switch the content of my constraints.txt to:

# -c https://dist.plone.org/release/6.0.4/constraints.txt
-c https://dist.plone.org/release/6.0-dev/constraints.txt

and run

mxdev -c mx.ini
pip install -r requirements-local-mxdev.txt
runwsgi -v instance/etc/zope.ini

it ends with an error:

(venv) jan@work:/opt/development/csnet/plone6$ runwsgi -v instance/etc/zope.ini 
2023-05-26 13:28:22,314 INFO    [chameleon.config:39][MainThread] directory cache: /opt/development/csnet/plone6/instance/var/cache.
2023-05-26 13:28:23,665 INFO    [pikepdf._core:228][MainThread] pikepdf C++ to Python logger bridge initialized
2023-05-26 13:28:23,790 INFO    [plone.volto:22][MainThread] Aliasing collective.folderish classes to plone.volto classes.
Traceback (most recent call last):
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/configuration/config.py", line 791, in execute_actions
    callable(*args, **kw)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/AccessControl/security.py", line 168, in protectClass
    permission = getUtility(IPermission, name=permission_id)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/component/_api.py", line 165, in getUtility
    raise ComponentLookupError(interface, name)
zope.interface.interfaces.ComponentLookupError: (<InterfaceClass zope.security.interfaces.IPermission>, 'plone.app.contentrules.ManageContentRules')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/development/csnet/plone6/venv/bin/runwsgi", line 8, in <module>
    sys.exit(main())
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/Startup/serve.py", line 251, in main
    return command.run()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/Startup/serve.py", line 189, in run
    app = self.loadapp(app_spec, name=app_name, relative_to=base,
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/Startup/serve.py", line 220, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/loadwsgi.py", line 248, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/loadwsgi.py", line 273, in loadobj
    return context.create()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/loadwsgi.py", line 741, in create
    return self.object_type.invoke(self)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/loadwsgi.py", line 200, in invoke
    app = context.app_context.create()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/loadwsgi.py", line 741, in create
    return self.object_type.invoke(self)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/loadwsgi.py", line 138, in invoke
    return fix_call(context.object, context.global_conf, **context.local_conf)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/paste/deploy/util.py", line 61, in fix_call
    val = callable(*args, **kw)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/Startup/run.py", line 61, in make_wsgi_app
    starter.prepare()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/Startup/starter.py", line 38, in prepare
    self.startZope()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/Startup/starter.py", line 94, in startZope
    Zope2.startup_wsgi()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/__init__.py", line 36, in startup_wsgi
    _startup()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/App/startup.py", line 126, in startup
    load_zcml()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/App/startup.py", line 41, in load_zcml
    load_site()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/Zope2/App/zcml.py", line 45, in load_site
    _context = xmlconfig.file(site_zcml)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/configuration/xmlconfig.py", line 665, in file
    context.execute_actions()
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/configuration/config.py", line 799, in execute_actions
    reraise(
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/configuration/_compat.py", line 31, in reraise
    raise value.with_traceback(tb)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/configuration/config.py", line 791, in execute_actions
    callable(*args, **kw)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/AccessControl/security.py", line 168, in protectClass
    permission = getUtility(IPermission, name=permission_id)
  File "/opt/development/csnet/plone6/venv/lib/python3.9/site-packages/zope/component/_api.py", line 165, in getUtility
    raise ComponentLookupError(interface, name)
zope.configuration.config.ConfigurationExecutionError: File "/opt/development/csnet/plone6/sources/plone.restapi/src/plone/restapi/services/rules/configure.zcml", line 6.2-12.8
    <plone:service
        method="GET"
        factory=".get.ContentRulesGet"
        for="plone.contentrules.engine.interfaces.IRuleAssignable"
        permission="plone.app.contentrules.ManageContentRules"
        name="@content-rules"
        />

    zope.interface.interfaces.ComponentLookupError: (<InterfaceClass zope.security.interfaces.IPermission>, 'plone.app.contentrules.ManageContentRules')

plone.restapi cannot find the permission, perhaps an explicit include needed?

The restapi / contentrules startup error will depend on the order in which packages get loaded, works fine in my case. But indeed plone.restapi should be fixed. I made a PR.

I have made the 6.0.5 release final. Differences between final and the release candidate:

  • Added plone.app.upgrade 3.0.5, I forgot creating that!
  • plone.restapi 8.39.1 fixing the above mentioned possible startup error.
  • Products.CMFPlone: Fix password validation tests.
  • Products.CMFPlone: membershipSearch in UsersGroupsControlPanelView should respect many_groups, many_users Option and empty Searchstring.

Official announcements to follow later.

3 Likes