I'll add, the process for packaging CQLSH similar if not identical to how
the Python driver will be packaged by Apache for pypl.org once the driver
donation in CEP-8
<https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-8%3A+Datastax+Drivers+Donation>
is completed.  The python driver already has an official PYPL distribution
at https://pypi.org/project/cassandra-driver/.

On Wed, Dec 6, 2023 at 3:03 PM Jeff Widman <j...@jeffwidman.com> wrote:

> 👋 I'm the other current maintainer of https://github.com/jeffwidman/cqlsh
> .
>
> *> Knowing nothing about the pypi release/publish process, I'm curious how
> you would stage and then publish the signed convenience package.
> Background: what we publish post-release-vote needs to be signed and
> identical to what is staged when the release vote starts. See the two
> scripts prepare_release.sh and finish_release.sh
> in https://github.com/apache/cassandra-builds/tree/trunk/cassandra-release
> <https://github.com/apache/cassandra-builds/tree/trunk/cassandra-release> ,
> where all the packaging is done in prepare_ and finish_ is just about
> pushing what's in staging to the correct public locations.  I am assuming
> that the CEP would be patching these two files, as well as adding files
> in-tree to the pylib/ directory*
>
> From a tactical implementation standpoint, there's a few ingredients to a
> release:
>
>    1. Packaging code used by PyPI such as `pyproject.toml`:
>    2. Code freeze of the functional code.
>    3. Versioning.
>    4. Secret management of the PyPI credentials
>    5. The actual publishing to PyPI.
>    6. Maintaining the above, ie, fixing breakage and keeping it up to
>    date.
>
> Looking at them in more detail:
>
>    1. Packaging code used by PyPI such as `pyproject.toml` - This should
>    be easy to add into the tree. Brad / myself would be happy to contribute
>    and we should be able to pull most of it directly from
>    https://github.com/jeffwidman/cqlsh.
>    2. Code freeze of the functional code - This already happens today
>    upon every Cassandra release.
>    3. Versioning - Versioning is a pain since currently CQLSH versions
>    are not aligned with Cassandra. Furthermore the internal CQLSH version
>    number doesn't always increment when a new version of Cassandra / CQLSH is
>    released. However, PyPI requires every release artifact to have a unique
>    version number. So we work around this currently by saying "Here's pypi
>    version X, which contains the cqlsh version from Y extracted from Cassandra
>    version Z".
>       1. If you want to keep CQLSH releases in-lockstep with Cassandra,
>       then life would be _much_ simpler if the CQLSH version directly pulled 
> from
>       the Cassandra version.
>       2. However, there's still the problem that sometimes the CQLSH
>       python packaging may have a bug, which forces a new release of CQLSH. 
> Seems
>       a bit heavyweight to require a new release of Cassandra just to fix a 
> bug
>       in the python packaging.
>       3. Another option is to have CQLSH release *not* tied at the hip to
>       Cassandra releases. Extract it to a separate project/repo and then pull 
> in
>       specific releases of CQLSH into the Cassandra final release. Probably 
> too
>       heavyweight right now given we are trying to simplify life, but wanted 
> to
>       mention it.
>       4. I don't feel strongly on the above, other than the current state
>       of affairs of requiring three different versions is worse than either of
>       the above options.
>       4. Secret management of the PyPI credentials
>       1. I'm not sure if Apache projects have a special "apache account"
>       that they typically use, or if they add multiple maintainers as admins 
> on
>       PyPI, and then add/remove them as they join/drop the core team. Either
>       works for me.
>       2. We'd probably want to keep Brad / myself as admins on PyPI as
>       we'll be more attentive to breakage / fixing things but that's really 
> up to
>       the discretion of the core team... I'm fine if you folks prefer to 
> remove
>       our access.
>       3. Making the secrets available to the publishing tool can be
>       managed using PyPI's trusted publishing:
>       
> https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/#configuring-trusted-publishing
>       .
>    5. The actual publishing to PyPI.
>       1. The "staged" releases could be pushed to
>       https://test.pypi.org/project/cqlsh/ and then the final released
>       pushed to the normal https://pypi.org/project/cqlsh/
>       2. The commands to publish to PyPI could be added to the
>       prepare_release.sh and finish_release.sh.
>       3. Alternatively, could add a CI/CD action such as a github action
>       directly to the Cassandra repo that watches for new git tags on the repo
>       and pushes those versions out to PyPI.
>       4. I'm not particularly wedded to a solution, but if I had to
>       choose, I'd go with the GitHub action. The reason being that it's a 
> simple,
>       commonly followed way of doing things within the Python world, so if it
>       breaks, it's easy for a drive-by contributor who's familiar with
>       Python/PyPI to contribute a fix.
>    6. Maintaining the above, ie, fixing breakage and keeping it up to
>    date.
>       1. Brad and I are both happy to help with this on an ongoing basis.
>       2. I suspect the core team won't want to give us commit rights
>       (understandably) so we'll still need someone on the core team to approve
>       any PR's that we contribute. That does worry me a little given that this
>       low-risk PR (https://github.com/apache/cassandra/pull/2389) has sat
>       open for 6 months despite multiple nudges, but that's a bigger 
> conversation
>       than CQLSH.
>       3. There are some things that aren't code-based, such as repo
>       settings or admin rights, and those either require the core team to 
> own, or
>       give myself/Brad the ability to change. Probably easiest / most secure 
> if
>       the core team owns, but that's up to you folks.
>
> Let me know if I'm forgetting anything from an implementation perspective.
>
> --
>
> Apart from the implementation, I did want to briefly get philosophical
> about whether CQLSH should stay in python and support pip as an official
> distribution target.
>
> Many of you approach Cassandra from the perspective of either a Java
> developer or a server administrator deeply familiar with Cassandra. It's
> easy to forget what the developer experience is like when you're brand new
> to Cassandra. For example, when I started using Cassandra, I was a
> python/go developer, hitting some confusing responses from Cassandra. No
> one on my team was very familiar with the Java toolchain no did we have
> access to the underlying database cluster, so it was a relief when we
> discovered `pip install cqlsh` didn't require futzing with Debian packages
> or Java. Debugging a weird response from Cassandra was nothing more than
> `import pdb; pdb.set_trace()` and then run the script to poke around the
> raw responses. No need to tcpdump, export off the server locally so we
> could inspect in wireshark.
>
> Beyond application developers, there's also many DevOps teams tasked with
> setting up / maintaining Cassandra clusters for application teams. I don't
> think that's a good way to organize engineering teams, but regardless, tis
> a fact that many companies go this route. Python is super common in DevOps
> scripting world, more so than Java, so exposing `cqlsh` in Python keeps
> Cassandra approachable to a wider audience.
>
> Since the tool is written in Python, we assumed the PyPI artifact would be
> an official distribution target. It was only after we'd been using it for a
> few months that we realized that the `cqlsh` available through pip was
> quite outdated. That's what originally motivated me to volunteer to help
> maintain the project.
>
> Obviously there's an increased maintenance cost, but my point is let's not
> forget the benefits of making Cassandra accessible to new end users who
> aren't Java-centric.
>
> Just my $0.02.
>
>
>
> On Mon, Aug 14, 2023 at 7:14 AM Mick Semb Wever <m...@apache.org> wrote:
>
>>
>> I'm supportive of this CEP.  And thanks for all the maintenance on this
>> over the years!
>>
>> Knowing nothing about the pypi release/publish process, I'm curious how
>> you would stage and then publish the signed convenience package.
>> Background: what we publish post-release-vote needs to be signed and
>> identical to what is staged when the release vote starts. See the two
>> scripts prepare_release.sh and finish_release.sh in
>> https://github.com/apache/cassandra-builds/tree/trunk/cassandra-release
>> , where all the packaging is done in prepare_ and finish_ is just about
>> pushing what's in staging to the correct public locations.  I am assuming
>> that the CEP would be patching these two files, as well as adding files
>> in-tree to the pylib/ directory
>>
>>
>> On Wed, 9 Aug 2023 at 18:18, Brad <bscho...@gmail.com> wrote:
>>
>>>
>>> As per the CEP process guidelines, I'm starting a formal DISCUSS thread
>>> to resume the conversation started here[1].
>>>
>>> The developers who maintain the Python CQLSH client on the official
>>> Python PYPI repository would like to integrate and donate their open source
>>> work to the Apache Cassandra project so it can be more tightly and
>>> seamlessly integrated.
>>>
>>> The Apache Cassandra project pre-dates the adoption in Python 3.4 of
>>> PyPI as the default package manager. As a result, an unofficial
>>> distribution has been provided by a group of developers who have maintained
>>> the repository there since October 2013.
>>>
>>> The installable version of CQLSH on PyPI.org allows end users to install
>>> a cqlsh client with PIP - no tarball or path setup required. I.e.,
>>>
>>>           $ pip install cqlsh
>>>
>>> This popular package has 50K downloads per month and is today maintained
>>> by Jeff Wideman and Brad Schoening. The PYPI package is updated upon every
>>> major release by simply repackaging the CQLSH that ships with every
>>> Cassandra release.
>>>
>>> CQLSH PyPI Repository:  https://pypi.org/project/cqlsh/
>>> <https://urldefense.com/v3/__https://pypi.org/project/cqlsh/__;!!PbtH5S7Ebw!Zlneg-wAg-i69cUOjOGZ2sppmSq0Yofe9AaPf2BZgtNQ-gfBVWCT8Wem23iAhpBrf4fXNyehbeJCLwQ$>
>>>
>>>
>>> This CEP Proposal suggests incorporating PYPI as a regular part of the
>>> Cassandra release process and making the CQLSH project on PYPI an official
>>> distribution point.
>>>
>>> The full CEP can be reviewed at:
>>>
>>> Wiki: CEP-35: Add PIP support for CQLSH
>>> <https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263425995>
>>> .
>>>
>>> Jira: CASSANDRA-18654
>>> <https://issues.apache.org/jira/browse/CASSANDRA-18654>
>>>
>>>
>>> But in brief, the proposal will:
>>>
>>>    - Add PyPI.org as an official distribution point for CQLSH
>>>    - Allow end users to install CQLSH with simply 'pip install cqlsh'
>>>    on MacOS, Windows and Linux platforms.
>>>    - Donate the modest amount of existing configuration files by the
>>>    authors to Apache Cassandra
>>>    - This only involves the Python CQLSH client, no changes to
>>>    distribution of Java server side code and tools are involved.
>>>
>>> We welcome further discussion and suggestions regarding this proposal on
>>> the  mailing list here.
>>>
>>> Regards,
>>>
>>> Jeff Widman &
>>> Brad Schoening
>>>
>>> [1] https://lists.apache.org/thread/sy3p2b2tncg1bk6x3r0r60y10dm6l18d
>>> <https://lists.apache.org/thread.html/ra7caa1dd42ccaa04bcabfbc33233995c125c655f9a3cdb2c7bd8e9f7%40%3Cdev.cassandra.apache.org%3E>
>>>
>>
>
> --
>
> *Jeff Widman*
> jeffwidman.com <http://www.jeffwidman.com/> | 740-WIDMAN-J (943-6265)
> <><
>

Reply via email to