Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update pinning_deps.rst #1348

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/maintainer/pinning_deps.rst
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,36 @@ If a package is not pinned in `conda-forge-pinning <https://github.com/conda-for
There is additional documentation on this pinning scheme in `the conda docs <https://docs.conda.io/projects/conda-build/en/latest/source/variants.html#build-variants>`_.


.. _what_the_pins_mean:

What the pins mean
==================

Pins, generally, are all about setting benchmarked versions of packages or libraries that serve as dependencies for some other packages or libraries, just so these dependent packages behave as much as the author(s) of the dependent packages would want them to behave.

So conda-forge pins are about declaring the standard version (a specific version) of a package dependency that conda-forge or a `conda recipe <https://github.com/conda-forge/staged-recipes>`_ supports, and how recipes that depend on some specific version of some libraries are set in order to not use other varying versions of the dependency.
Copy link
Contributor

Choose a reason for hiding this comment

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

can you add this link https://conda-forge.org/blog/posts/2020-10-02-versions/ has an more outstanding overview of how conda-forge handles the pinning process?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Awesome! I'll do that.

Many thanks for the input.


.. _abis_and_the_conda-forge-pinning_feedstock:

ABIs and the conda-forge-pinning feedstock
==========================================

conda-forge pinning can be expounded in terms of ABIs (Application Binary Interface), that is, as some programs require specific versions of some API libraries to function correctly - so do some packages require specific versions of some ABIs to function correctly, which is why some libraries used within the conda-forge feedstock are specific to some particular ABI versions.
Copy link
Contributor

Choose a reason for hiding this comment

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

@bashirk Would you mind rewriting this paragraph, I needed to read twice to comprehend.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Great! I'll work on rewriting this to be as comprehensive as possible.

Many thanks for the feedback.


The `conda-forge-pinning feedstock <https://github.com/conda-forge/conda-forge-pinning-feedstock>`_, for instance, has a list of ABIs that have been benchmarked as the dependencies that the recipe supports, these ABIs are declared `here <https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_.

More detailed information on ABIs can be located on this `StackOverflow discussion <https://stackoverflow.com/questions/2171177/what-is-an-application-binary-interface-abi>`_.

.. _pins_and_bounds:

Pins and bounds
===============

Another interesting thing about pinning is the ability to have both lower and upper bound declarations for pins. A package can be declared to depend on a specific version of a dependency, as the minimum version of that dependency the package supports, then, another declaration can be made to set the maximum version of that dependency that the package supports. These are lower and upper bound declarations.

In the `conda-forge-pinning feedstock ABIs <https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_ declaration, many of the libraries that are supported by the recipe include declarations around the maximum version the conda-forge-pinning feedstock supports. The upper bound declarations are made in terms of `max_pin: x.x.x` to ensure that the recipe supports latest versions of these dependencies.


Specifying run_exports
======================

Expand Down