conda-forge / conda-forge-ci-setup-feedstock

A conda-smithy repository for conda-forge-ci-setup.
BSD 3-Clause "New" or "Revised" License
13 stars 53 forks source link

Variants with multiple channel_sources #280

Closed 0xbe7a closed 1 year ago

0xbe7a commented 1 year ago

Issue

As part of the python312 migration uploaded the python3.12 RC to a seperate channel conda-forge/label/python_rc. The migration yaml then adds a new python version value to a recipes feedstock and zips it with channel_sources. Thereby we can add a new channel_source that just gets used by the python312 build.

conda-build will render seperate variants for each (arch, python version) tuple for most feedstocks like https://github.com/conda-forge/markupsafe-feedstock/tree/main/.ci_support, however for some like https://github.com/conda-forge/brotli-feedstock/tree/main/.ci_support only a single variant for each arch is created.

setup_conda_rc is not yet able to handle this and will always just add channels from the first channel_sources value to the condarc. This results in the conda-forge/label/python_rc channel being missing in the condarc and mamba failing to solve.

As @isuruf pointed out just adding all channels from all values to the condarc will not work due to strict repo priority

See https://github.com/conda-forge/conda-forge-ci-setup-feedstock/pull/279

isuruf commented 1 year ago

Three options.

  1. Make channel_sources a top level loop key in conda-smithy so that any key zipped with it will get a separate .ci_support file. For outputs that are independent of python, this will create multiple variants and may lead to wrong package metadata.
  2. Add a package like _python_rc to conda-forge/label/python_rc, make python=3.12 depend on it and add python=3.12 package to main and then merge your PR.
  3. Add all python pkgs to python_rc label in addition to main and then merge your PR.
0xbe7a commented 1 year ago

I think Option 2 is the most ""elegant"" out of them. I will create a dummy package, that python312 will depend on for now and that only gets published to the python_rc channel.

isuruf commented 1 year ago

We also need to mark the python=3.12 in conda-forge/label/python_rc broken.

h-vetinari commented 1 year ago

We also need to mark the python=3.12 in conda-forge/label/python_rc broken.

Done

h-vetinari commented 1 year ago

2. Add a package like _python_rc to conda-forge/label/python_rc, make python=3.12 depend on it and add python=3.12 package to main and then merge your PR.

I guess "your PR" in this case refers to https://github.com/conda-forge/conda-forge-ci-setup-feedstock/pull/279?

In any case, we're not 100% there yet - I tried to test the new setup in https://github.com/conda-forge/grpc-cpp-feedstock/pull/318 (one of the bigger feedstocks affected), and ran into the missing label:

Unsatisfiable dependencies for platform linux-64: {MatchSpec("python==3.12.0rc3=rc3_hab00c5b_1_cpython"), MatchSpec("_python_rc")}
0xbe7a commented 1 year ago

https://github.com/conda-forge/conda-forge-ci-setup-feedstock/pull/279 https://github.com/regro/conda-forge-feedstock-check-solvable/pull/14

need to be merged before the bot can automatically bump all affected packages