zestsoftware / zest.releaser

Python software releasing made easy and repeatable
https://zestreleaser.readthedocs.io
GNU General Public License v2.0
198 stars 62 forks source link

Future plans for zest.releaser #374

Closed mauritsvanrees closed 2 years ago

mauritsvanrees commented 2 years ago

For background, a small bit of history up front: me and my brother @reinout both worked for Zest Software about 15 years ago. It is a small software company in The Netherlands, at the moment three people: Jean-Paul, Fred and me. Reinout created zest.releaser, and since then we both did a lot of work on it. According to LinkedIn he left in 2009, but I stayed and am still there. We two are the only maintainers.

Because I am Plone Releaser Manager, I probably use zest.releaser a lot more than he does now. Me and my colleagues use it often, and many people in the Plone community as well. Latest Plone release 5.2 supports Python 2 and 3. Version 6 is expected within a few months and will only support Python 3. In the Plone world and the Zest world, git is the only version control system. More broadly, in the Stack Overflow Developer Survey 2021 over 90% of developers use git.

I think development on zest.releaser may be a bit too difficult at the moment, certainly for outsiders who may want to create a pull request. We test subversion, bazaar, mercurial, git. Python 2 and 3 plus PyPy. To run the tests, you need to use buildout. And we have this weird test setup with z3c.testsetup, with I think even Grok-like behavior. And doctests. Can we make this simpler?

Some ideas for future simplification:

We can continue to do bug fixes for the current 6.x release.

Some stuff is easy to do on short term:

@reinout What do you think?

reinout commented 2 years ago

I still use it a lot myself. And it is standard for all python packages in my current company, too. There even is a plugin that I wrote that we use regularly: qgispluginreleaser :-)

And... I'd love to pour "isort" and "black" over the code. I still haven't done it as there are a few PRs we might want to look at first.

mauritsvanrees commented 2 years ago

I am in favour of isort and black as well. There are only two open PRs and they have been open since 2015 and 2017. And they are both about encodings, so they might be fixed already if we do Python 3 only.

Here is a Google search popularity comparison for the four version control systems. This does not say everything. But git is by far the most popular. Mercurial gets some popularity because there is apparently a shoe with this name from a popular brand. I thought core Python was still using Mercurial, but the last change on hg.python.org is from 17 months ago, and CPython is developed on GitHub. So dropping Mercurial seems okay.

Maybe remove the non-git code, but try to keep the possibility of using a different VCS built in. If someone can copy our existing mercurial code and put it in a separate package that this person maintains, that would be nice. Most changes for this would be in choose.py where we choose/determine the VCS. In vcs.py we could create a dictionary VCS_SUPPORT with a mapping from the internal file/directory name (.git, .hg) to a class (Git, Mercurial) that would inherit from our BaseVersionControl class. A third party package could then add its own code to this dictionary (via a small function that we provide). That sounds like something that should not be too hard.

Theoretically, we could let our test setup register a testing VCS here, which does nothing, except some printing ('Committing with comment X', 'Creating tag Y'). That could make testing some corner cases easier. Just a thought.

After we do a few cleanups, we could release a 7.0.0a1/b1/rc1 if we think a non-final release is useful.

woutervh commented 2 years ago

+10 for all points. Better drop old stuff, almost nobody uses abymore, to better support newer stuff.

FYI, recently I started working on fully poetry-based projects (no setup.py/setup.cfg)

mauritsvanrees commented 2 years ago

I have released 7.0.0a1 to PyPI with some big refactorings. Summary:

From my initial list above, we still have doctests and z3c.testsetup. We could still try to get rid of that. But let me close this issue, as I am happy for now.