The Buschenschanksprint is over (14-19.6.2024) and again, it was a great time meeting old friends from the community, hang out, chat and work together on our beloved content management framework Plone, where we usually work together over far distances and even huge timezone differences.
The weather was very fine, just in time for the Buschenschanksprint. Just the day before a period of constant rain including very heavy rainfalls has ended. But during the Buschenschanksprint season we could always stay outside until late at night and enjoy the beautifully South Styrian air, landscape and environment.
For dinner we had nice and delicious moments at the Buschenschank Muster Stub'n (Friday), Restaurant Magnothek (Saturday), Buschenschank Firmenich (Sunday), did some BBQ ourselves on Monday and just ordered Pizza on Tuesday. After that we continued hacking, talking and karaoke singing.
These were the participants:
- Alessandro Pisa
- Alexander Pilz
- Guido Stevens
- Johannes Raggam (Sprint organizer)
- Maik Derstappen
- Manuel Reinhardt
- Markus Hilbert
- Maurits van Rees
- Mihaela Derstappen
- Nicco Kunzmann (Remote)
- Paul Roeland
- Peter Holzer
- Peter Mathis (Remote)
- Robert Niederreiter
- Steve Piercy (Remote)
- Torben Baumgartner
- VĂctor Fernández de Alba
Apart from meeting, hanging out and partying together we achieved quite a lot.
Sprint achievements
Volto improvements
Participants: Victor Fernández de Alba, Maurits van Rees, Buschenschanksprint discussion participants.
-
"Plone as headless CMS" presentation and discussion
- Headless packages
- @plone/client
- @plone/registry
- @plone/components
- @plone/slots, @plone/providers
- @plone/contents
- Headless packages
-
plone.volto:
- Fix startup error when requests library is missing: https://github.com/plone/plone.volto/pull/154
- WIP: put the plone/meta sauce over the package: https://github.com/plone/plone.volto/pull/153
-
Push the latest blockers for the final release of Volto 18:
- New Teaser block behavior: “Live” by default, as it autoupdates with the current content of the target content
- New “Order” tab in the Volto Blocks edit engine
- Unifying the Makefile commands in Volto core with the latest agreed naming convention. Add descriptions to all commands.
-
Work in the headless CMS @plone/providers package
-
Fix duplicated block ids if copying a container block
-
Introduction of the new Block Model 3 - Demo
Cookieplone improvements
Participants: Victor Fernández de Alba, Steve Piercy, Buschenschanksprint discussion participants.
-
Presentation and discussion on "Plone's new boilerplate generator - Cookieplone"
-
pnpm workspaces - Volto’s new build tool.
pipx install cookieplone
pipx run cookieplone
- Follow instructions and answer questions
- Open the generated folder (has the name of the slug).
make install
- This will install both the backend and frontend
make start
- Access http:/localhost:3000
-
Modernize and fix metadata items, including description, trove classifiers
-
General cookieplone improvements
Build environment improvements
Participants: Maurits van Rees, Torben Baumgartner
-
Big fix for Buildout to work with setuptools 70 and be able to install source distributions created by recent setuptools, and fix most of the CI. PR under review: https://github.com/buildout/buildout/pull/649#issuecomment-2174583663
-
zest.releaser: build distributions in an isolated environment. Otherwise
build
cannot install packages needed for the build system, for examplehatchling
: https://github.com/zestsoftware/zest.releaser/pull/449 -
Building a CDK8S Library for Plone Helm Charts (example git repo will be added later)
Install Plone with Ansible
Participants: Alessandro Pisa
The goal is to replace Buildout to manage the Plone deployment in full.
The Plone packages will be installed with pip.
The scripts, configuration files and folders required to run Plone will be created by Ansible tasks.
Advantages
- Ansible is a very solid, widespread, maintained, powerful and well documented tool
- Ansible can operate locally or on a remote server
- Creating or modifying Ansible tasks is by far easier than creating or modifying Buildout recipes
Status
- The playbook downloads and installs Plone (default is ZEO server + 2 instances)
- There is support for changing some installation parameters
Repo: https://github.com/ale-rt/install_plone_with_ansible_experiment/
Plans for the future
- More experiments and testing with the repo to check if it makes any sense adopting it.
- If it makes sense, it will be transferred to the collective organization on GitHub
Plone distributions
Participants: Maurits van Rees, Jens Klein, Steve Piercy
-
Decided that plone.classicui will be a small package containing only the distribution. The plan for slowly starting to move templates into that package in the Plone 6 series is changed: if we move them, most of them should probably end up in plone.app.layout.
-
Make plone.classicui a Distribution: https://github.com/plone/plone.classicui/pull/9
-
Refactor site creation in Products.CMFPlone to only create a simple site without example content: https://github.com/plone/Products.CMFPlone/pull/3981
-
plone.app.testing fix that goes with the CMFPlone PR, otherwise most tests break: https://github.com/plone/plone.app.testing/pull/97
Other Plone enhancements
Participants: Maurits van Rees, Manuel Reinhardt, Johannes Raggam
-
Remove ancient uses of portal_properties:
- Merged: https://github.com/plone/plone.app.layout/pull/371
- Merged: https://github.com/plone/plone.app.portlets/pull/191
- Merged: https://github.com/plone/plone.app.textfield/pull/65
- Merged: https://github.com/plone/plone.app.vocabularies/pull/91
- Merged: https://github.com/plone/plone.api/pull/536
- Merged: https://github.com/plone/plone.restapi/pull/1795
- WIP: https://github.com/plone/Products.CMFPlone/pull/3978
-
Remove old plone.app.iterate profile: https://github.com/plone/plone.app.iterate/pull/125 and https://github.com/plone/plone.app.upgrade/pull/327
-
Coredev, add instance-cmfplone part: https://github.com/plone/buildout.coredev/pull/934 [merged]
-
Plone upgrade page: show missing packages https://github.com/plone/Products.CMFPlone/pull/3977, especially when plone.app.upgrade is missing,
-
Worked on a fix to allow the resource registry to work with broken JavaScript or JavaScript turned off
"Use details element for collapsibles in the resource registry"
"Add styles for details/summary based collapsibles" -
Documented an zpretty issue: "formatting error with chameleon expression as attribute"
-
Remove no longer working After The Deadline code and settings from TinyMCE panel: https://github.com/plone/Products.CMFPlone/pull/3765 plus two related PRs. All merged.
Documentation
Participants: Steve Piercy, Paul Roeland
-
Introduction into Plone core development via the buildout.coredev documentation.
-
Port buildout.coredev documentation from 5.2 to 6
-
Move buildout.coredev documentation from the buildout.coredev repository into the documentation repository (integrate coredev.buildout (was PR #1670) by stevepiercy · Pull Request #1671 · plone/documentation · GitHub).
-
Add Mermaid Sphinx extension to Plone Sphinx Theme.
-
Configure 2023.training.plone.org with Matomo Tag Manager for web stats and updated site search (2022 as well).
-
Archive training.plone.org from PloneConf 2023, prepare for PloneConf 2024.
Timezone enhancement / PLIP 5629
Participants: Steve Piercy, Johannes Raggam, Nicco Kunzmann
-
Migrate icalendar (RFC 5545 parser/generator) to zoneinfo from pytz
- This is part of releasing version 6 of icalendar: https://github.com/collective/icalendar/issues/630
- The Pull Request https://github.com/collective/icalendar/pull/623 was worked on in collaboration.
-
Discussion and review of icalendar PR "Zoneinfo"
-
Discussion on PLIP "Enhance timezone support in UI for plone.app.event based types" reviewing project board (https://github.com/orgs/plone/projects/43/views/1) and design definition.
Asynchronous Frontend Composition
Participants: Markus Hilbert
Working on a PoC for Frontend Component Composition for a master thesis. Piral failed as a framework by only providing a proprietary “feedserver”, which is their service discovery tool to register MicroFrontends against. Bit.dev is another interesting solution but although it's rather complex including their naming schema.
"Abfahrt" system to show public transportation timetables
Participants: Peter Holzer
Research and implementation on a Micropython ESP32 system including a E-Ink display to show public transportation times in Zurich.
ClassicUI "pat-contentbrowser" pattern
Participants: Peter Mathis, Maik Derstappen
There's a new pattern for content browsing coming around the corner which will replace the old Select2 implementation of "pat-relateditems".
See the sneak preview videos in the PR here https://github.com/plone/mockup/pull/1377
Peter Mathis polished some stuff remotely and came up with integration PRs.
Step 1: deliver the pattern logic and integrate it in TinyMCE link/image modal
- https://github.com/plone/plone.staticresources/pull/336
- https://github.com/plone/Products.CMFPlone/pull/3980 (robottest fixes for the new selectors)
Step 2: integrate the new pattern in a z3c.form widget with “plone.app.z3cform” … this also updates the “LinkWidget” (used in the Link contenttype) to use “pat-contentbrowser”
Step 3: use the new z3c.form widget in “plone.app.relationfield” to implement “pat-contentbrowser” in relatedItems behavior
- https://github.com/plone/plone.app.relationfield/pull/51
- TODO: fixing CMFPlone robottest with the new relatedItems selectors
Cooperations:
- Maik Derstappen showed the content browser pattern to people during the sprint. Quaive team is interested in using it too, as they just got the same requirement. Maik did some research on how to make the used Svelte components customizable. With @plone/registry it should be possible to register the used components and instantiate them from there. This way other users could override parts by registering their own components.
plone.typesense
Participants: Maik Derstappen, Robert Niederreiter
plone.typesense is meant to be a full Plone integration package for the search engine Typesense, including permissions/roles definitions. You will be able to query Typesense directly from a client and also get all data from there. This has the potential to improve query performance in Plone. This is build as a drop-in replacement - all queries within Plone should work as expected, all plone.api/restapi API calls should stay the same. But they are limited to what Plone offers with the default search.
-
Improved the controlpanel.
-
Implemented a basic initialization of Typesense collections from the control panel.
-
Implementing basic indexing based on the collective.elasticsearch approach, by building a queue processor.
Repo: https://github.com/plone/plone.typesense
Team: Maik Derstappen / MrTango
Quaive discussion and improvements
Participants: Alessandro Pisa, Manuel Reinhardt, Johannes Raggam, Maurits van Rees, Guido Stevens, Alexander Pilz
z3c.form widgets discussion
We brought all of the Quaive devs present at the Buschenschanksprint (which we were 6!) together and discussed one of our key priorities: to move form handling in Quaive back onto z3c.form. Discussed relationship of this effort to design.
z3c.form widgets development
Ale and Guido paired to create an initial reference implementation of z3c.form backed widgets, matching the corresponding reference page in our design prototype. Z3c.form is boring, until it is not, when it then presents a near-vertical learning curve.
Forked our reference implementation into a variant that less closely adheres to design, and unifies much previously repeated code into a macro.
Quaive feature enhancements workshop
Clean Clothes campaign has various enhancement requests for Quaive. Guido, Paul and Alex discussed and analyzed those. Did some preliminary design and validation. We concluded that, instead of adding an extra navigation layer, it makes more sense to enhance the already existing content structure to become more visually attractive. Derived concrete feature enhancements to put on our backlog.
Upgrading Quaive search
Guido performed a code audit on the Quaive search stack. Guido and Alex tried to upgrade Solr in Quaive and failed. Concluded that it’s probably more productive to completely rewrite the Quaive search implementation, than upgrading it incrementally. To do either, a large part of the effort is loading a complete mental model of the Quaive search stack. Doing a clean new reimplementation is then likely easier.
Conclusion
I did really enjoy this year's Buschenschanksprint and I think everyone else did so too.
Besides of all the fun we also got quite some work packages done, ideas sparked and new roads offered to explore.
The end of this year's Buschenschanksprint is the beginning of the next one.
And before the next Buschenschanksprint there are plenty of other sprints too.
I'm looking forward for the next sprint and conference!
Thanks to Syslab.com for supporting me in organizing the sprint!