Skip to content

Conversation

zklaus
Copy link
Contributor

@zklaus zklaus commented Apr 11, 2024

Checklist

  • Used a personal fork of the feedstock to propose changes
  • Bumped the build number (if the version is unchanged)
  • Reset the build number to 0 (if the version changed)
  • Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
  • Ensured the license file is being packaged.

RapidJSON has had its last release in 2016. However, development has never really stopped with hundreds of commits since then, seemingly focused on bugfixing and future proofing the library, e.g. by supporting newer architectures and c++ standards.

With this PR I propose that we follow the lead of other packagers like vcpkg [1,2] (shoutout to @timkpaine for providing the links), packaging date based releases from upstream main. The mechanism proposed in the updated meta.yaml is a calver based versioning with YYYY.MM.DD versions and a manually synced corresponding commit hash.

What do you think, @conda-forge/rapidjson?

[1] https://github.com/microsoft/vcpkg/blob/master/ports/rapidjson/vcpkg.json#L3
[2] https://github.com/microsoft/vcpkg/blob/master/ports/rapidjson/portfile.cmake#L5

@conda-forge-webservices
Copy link

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@zklaus
Copy link
Contributor Author

zklaus commented Apr 11, 2024

@conda-forge-admin, please rerender

conda-forge-webservices[bot] and others added 2 commits April 11, 2024 17:03
@zklaus zklaus marked this pull request as ready for review April 12, 2024 07:54
Copy link
Member

@xhochy xhochy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would be OK with this if we upload the new releases to a label, e.g. conda-forge/label/rapidjson_dev

@zklaus
Copy link
Contributor Author

zklaus commented Apr 17, 2024

I would be OK with this if we upload the new releases to a label, e.g. conda-forge/label/rapidjson_dev

I understand your point and would be completely on-board in the usual circumstances where this situation would signify a development version with new features that is less tested than the stable release.
However, rapidjson is really different here. Basically, the maintainer has decided that releases are not for him, despite numerous pleas from the community. However, otherwise the development seems to be done rather conservatively with most commits since v1.1.0 concerned with bugfixes and maintenance, such as updates to ensure compiler compatibility.

I attach a poor-mans changelog composed of a oneline git log of commits since v1.1.0:
rapidjson-changes-since-1.1.0.txt.

That's why other package managers such as vcpkg have adopted date based packages into their mainline channels and why I would advocate for that here as well.

@xhochy
Copy link
Member

xhochy commented Apr 19, 2024

My main concern with putting them on the main label is that once you went to date based labels, you cannot go back anymore.

@timkpaine
Copy link
Member

@xhochy agreed, but vcpkg, conan, homebrew, and more have decided that newer release is better. If and when a new version is released, that bridge can be crossed (perhaps by yanking previous date based releases).

@zklaus
Copy link
Contributor Author

zklaus commented Apr 20, 2024

My main concern with putting them on the main label is that once you went to date based labels, you cannot go back anymore.

That's a valid concern. Perhaps there are ways around? I guess the canonical way in some sense would be epochs (though I am not sure about the state of support for this in conda-forge). Another possibility would be to see this as a continuation of the current 1.1.0 release, perhaps simply with versions 1.1.0.YYYYMMDD? Any official new version will likely be at least 1.2.0.

@xhochy, do you think something along these lines could work?

@timkpaine
Copy link
Member

@zklaus I do like the idea of 1.1.0.YYYYMMDD, this seems to solve both problems (allow new versions but protect against future releases). Hopefully this version scheme wouldn't cause any solver issues or anything?

@xhochy
Copy link
Member

xhochy commented Apr 21, 2024

@xhochy agreed, but vcpkg, conan, homebrew, and more have decided that newer release is better.

I don't see the new release in homebrew. This would have been the most authoritative source of a new versioning scheme for me.

@zklaus
Copy link
Contributor Author

zklaus commented Apr 23, 2024

Looks like homebrew indeed offers 1.1.0 as stable, though they also provide HEAD. Microsoft's vcpkg does date based releases.

But apart from what others do, it's illustrative to look at the upstream issues on this, for example the relatively recent Tencent/rapidjson#2238, which in a comment lists no less than 18 other issues in which the lack of an official release was discussed, and not only as an academic problem, but actual real bugs hurting people, cf Tencent/rapidjson#1006 (comment).

So I think it's highly reasonable to provide a newer version, and to be honest I don't feel much disagreement on that point.

How can we do so without blocking easy adoption of a possible new release and with an optimal user experience?
I think we can adopt a date based versioning scheme, e.g. 1.1.0.YYYYMMDD, or perhaps 1.1.0.postYYYYMMDD (shoutout to @jaimergp, with whom I discussed the issue and who proposed the post version as a candidate). Both would be allowed and serve our needs according to the conda-build docs, which say the version should follow PEP-386, verlib.

Additionally, we could put these new releases on a label like rapidjson_dev. That would keep the stable release in main as the default. However, as discussed, imho there is reason to believe that the "stable" release is not actually any more stable than a date based more recent version; quite the opposite.

@xhochy, could you help me understand the user experience implications of putting things on a dev label? Would it be possible for recipe authors to opt-in to the newer releases? Or would that always impose end-user action to activate the dev label?

Finally, another option (again, thanks @jaimergp!) would be to make a wholly new package, say rapidjson-dev or rapidjson-post or some such which from the get go would just use date based releases. That would give a straightforward opt-in for recipe authors.

@xhochy
Copy link
Member

xhochy commented Apr 29, 2024

@xhochy, could you help me understand the user experience implications of putting things on a dev label? Would it be possible for recipe authors to opt-in to the newer releases? Or would that always impose end-user action to activate the dev label?

The respective feedstock would need the following bit in their recipe/conda_build_config.yaml:

channel_sources:
  - conda-forge/label/rapidjson_dev,conda-forge

1.1.0.postYYYYMMDD

I would generally be OK with this on the main label given that this is a build-time only dependency.

@conda-forge-webservices
Copy link

Hi! This is the friendly automated conda-forge-linting service.

I wanted to let you know that I linted all conda-recipes in your PR (recipe) and found some lint.

Here's what I've got...

For recipe:

  • Failed to even lint the recipe, probably because of a conda-smithy bug 😢. This likely indicates a problem in your meta.yaml, though. To get a traceback to help figure out what's going on, install conda-smithy and run conda smithy recipe-lint . from the recipe directory.

@conda-forge-webservices
Copy link

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@zklaus
Copy link
Contributor Author

zklaus commented Apr 30, 2024

I have updated the versioning scheme to the 1.1.0.postYYYYMMDD variant, so if the CI goes green this could be merged.

As @xhochy explained, putting this on a dev label might be viable in this case because rapidjson is header only. That would be an opt-in variant, where packages need to actively decide to use a newer, date based version, whereas the current approach is opt-out, where packages will automatically receive the newer, date based versions unless they put an upper pin.

@timkpaine, is it ok as is, or would you prefer the opt-in variant of a dev label?

@timkpaine
Copy link
Member

I like this as-is

@xhochy xhochy merged commit 3ee7ac8 into conda-forge:main Apr 30, 2024
@zklaus
Copy link
Contributor Author

zklaus commented Apr 30, 2024

Thanks @xhochy, @timkpaine 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants