conda / conda-lock

Lightweight lockfile for conda environments
https://conda.github.io/conda-lock/
Other
459 stars 102 forks source link

Capture failed tests as actual step/job failures #448

Closed riccardoporreca closed 1 year ago

riccardoporreca commented 1 year ago

Should fix #447

This is done by Enabling fail-fast bash behavior, see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference

Description

netlify[bot] commented 1 year ago

Deploy Preview for conda-lock ready!

Name Link
Latest commit fa8434d59a15b99cc2f92b5bf5d42f2e00709e73
Latest deploy log https://app.netlify.com/sites/conda-lock/deploys/64a9f27ef234d500084b169d
Deploy Preview https://deploy-preview-448--conda-lock.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

riccardoporreca commented 1 year ago

See how the jobs are correctly failing given the failing tests, as opposed to e.g. https://github.com/conda/conda-lock/actions/runs/5466015810/jobs/9950322426#step:6:1001

As for the failing tests, they seem to be all related to pydantic, and started to appear following the 2.0 release: https://docs.pydantic.dev/2.0/migration/

Most errors are about virtual package specs:

validation error for VirtualPackageSpec
E       subdirs.linux-64.packages.__glibc
E         Input should be a valid string [type=string_type, input_value=2.17, input_type=float]

and could be addressed by quoting versions, e.g. __glibc: "2.11" instead of __glibc: 2.11.

The other relevant failure is

 >           raise JSONDecodeError("Expecting value", s, err.value) from None
E           json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

perhaps related to

Due to performance overhead and implementation complexity, we have now removed support for specifying json_encoders in the model config.

Happy to include any recommended fix in this PR

riccardoporreca commented 1 year ago

See also https://github.com/pydantic/pydantic/issues/6375

Perhaps a tactical solution for now is to stick to pydantic >=1.8.1,<2.0

maresb commented 1 year ago

I'd rather try and support Pydantic v2.

I wonder how easily we can get rid of frozensets. I might be missing something, but when I occasionally use sets for internal manipulations, I prefer casting the result to a list with sorted before returning, especially for determinism since sets get their orders scrambled, e.g. #450. If immutability is demanded by the type checker, then I cast the sorted list to a tuple.

I'm not sure if this paradigm would break down at some point when applied to conda-lock here, but that'd be my idea for how to solve it. What do you think?

riccardoporreca commented 1 year ago

@maresb, I looked a bit closer into the JSONDecodeError, which I was maybe a bit too quick to attribute to Pydantic V2.

I could reproduce the error locally and here is what I see as proc.stdout in dryrun_install: DryRunInstall = json.loads(proc.stdout), where the first line No package record found! is clearly no valid JSON! Not sure however where this could come from

No package record found!
{
  "actions": {
    "FETCH": [
      {
        "build": "py39hb9d737c_1",
        "build_number": 1,
        "channel": "https://conda.anaconda.org/conda-forge/linux-64",
        "constrains": [],
        "depends": [
          "python >=3.9,<3.10.0a0",
          "python_abi 3.9.* *_cp39",
          "libgcc-ng >=10.3.0",
          "typing-extensions >=3.7.4.3"
        ],
        "fn": "pydantic-1.9.0-py39hb9d737c_1.tar.bz2",
        "license": "MIT",
        "md5": "5e0
[continues]
riccardoporreca commented 1 year ago

This is in fact even visible in the workflow log, e.g. https://github.com/conda/conda-lock/actions/runs/5495255879/jobs/10014527957?pr=448#step:6:400

s = 'No package record found!\n{\n  "actions": {\n    "FETCH": [\n      {\n        "build": "pyha770c72_0",\n        "buil...emp/tmpztcgmr04"\n  },\n  "dry_run": true,\n  "prefix": "/home/runner/work/_temp/tmpztcgmr04",\n  "success": true\n}\n'
maresb commented 1 year ago

Thanks @riccardoporreca, I actually simultaneously came to the same conclusion. I'm not sure what to make of it, but I opened https://github.com/mamba-org/mamba/pull/2662 to hopefully eventually gain some clarity.

I was unable to reproduce locally, so it's really great that you can! Any chance that you could set a breakpoint at conda_lock.conda_solver line 495 and see if you can figure out what's going on? In the debug console, I recommend running shlex.join(proc.args) to get the exact command being executed.

maresb commented 1 year ago

It'd be nice to get to the bottom of this warning, but in case we can't maybe we should just ignore it as per my commit. (Not an ideal solution, so I hope we can do better.)

But now I'm actually a bit nervous about Pydantic. It seems like v2 has some big changes, and we don't have a major version pin.

riccardoporreca commented 1 year ago

I was unable to reproduce locally, so it's really great that you can! Any chance that you could set a breakpoint at conda_lock.conda_solver line 495 and see if you can figure out what's going on?

I was reproducing the steps of the test workflow for creating the environment and installing from requirements.txt. Ultimatelty, there is something in the logic leading to the print statement in https://github.com/mamba-org/mamba/blob/c46647a8807b5d4812b25c199754f4bbe904b679/mamba/mamba/utils.py#L384-L398, so I fully agree to raise the flag to mamba

But now I'm actually a bit nervous about Pydantic. It seems like v2 has some big changes, and we don't have a major version pin.

I can fully understand that!

riccardoporreca commented 1 year ago

Debug info:

shlex.join(proc.args)
"/home/riccardo/miniconda3/envs/test-env/bin/mamba update --override-channels --channel conda-forge --channel file:///tmp/tmpjqbwoa0p -p /tmp/tmpagnu7aom --json --dry-run 'pydantic >=1.9.0,<1.9.1'"

To help reproducing the issue, here is the outcome of conda list -p /tmp/tmpagnu7aom --explicit

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: linux-64
@EXPLICIT
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.3-h58526e2_2.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1u-hd590300_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.42.0-h2797004_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/python-3.9.6-h49503c6_1_cpython.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/click-7.1.2-pyh9f0ad1d_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/itsdangerous-1.1.0-py_0.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.0.1-py39h3811e60_1.tar.bz2
https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.7-py39h07f9747_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/werkzeug-1.0.1-pyh9f0ad1d_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/jinja2-2.11.3-pyhd8ed1ab_2.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/flask-1.1.4-pyhd8ed1ab_0.tar.bz2
maresb commented 1 year ago

Thanks for the debug info! I would have expected to see No package record found! though. Any idea why it's not showing up when you run the command by hand? I have to sign off for the night.

riccardoporreca commented 1 year ago

Thanks for the debug info! I would have expected to see No package record found! though.

Oh, I do see the same if I execute the same command manually, even w/o --dry-run. Hopefully you can also reproduce locally by creating and environment based on the EXPLICIT package list and the run the mamba update command on that environment.

Btw, I could also extract installed_pkg_recs that is looped over in mamba.utils and triggers the message:

[PrefixRecord(_hash=6117309602136572690, name='libstdcxx-ng', version='13.1.0', build='hfd8a6a1_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='067bcc23164642f4c226da631f2a2e1d', url='https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.tar.bz2', sha256='6f9eb2d7a96687938c0001166a3b308460a8eb02b10e9d0dd9e251f0219ea05c', depends=()), PrefixRecord(_hash=4601397831281391658, name='_openmp_mutex', version='4.5', build='2_gnu', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='73aaf86a425cc6e73fcf236a5a46396d', url='https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2', sha256='fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22', depends=('_libgcc_mutex 0.1', 'libgomp >=7.5.0')), PrefixRecord(_hash=4258323768399712393, name='libgomp', version='13.1.0', build='he5830b7_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='56ca14d57ac29a75d23a39eb3ee0ddeb', url='https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.tar.bz2', sha256='5d441d80b57f857ad305a65169a6b915d4fd6735cdc9e9bded35d493c91ef16d', depends=('_libgcc_mutex 0.1',)), PrefixRecord(_hash=-1062740788984534903, name='libgcc-ng', version='13.1.0', build='he5830b7_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='cd93f779ff018dd85c7544c015c9db3c', url='https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.tar.bz2', sha256='fba897a02f35b2b5e6edc43a746d1fa6970a77b422f258246316110af8966911', depends=('_libgcc_mutex 0.1', '_openmp_mutex >=4.5')), PrefixRecord(_hash=-3508787944303369784, name='markupsafe', version='2.0.1', build='py39h3811e60_1', build_number=1, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='bba8fc0d724caa73a96220e48aac3b61', url='https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.0.1-py39h3811e60_1.tar.bz2', sha256='012db594e5921001b571415e1af5f96f0261f0e405dc5bb24108f37424b5bdcc', depends=('libgcc-ng >=9.4.0', 'python >=3.9,<3.10.0a0', 'python_abi 3.9.*')), PrefixRecord(_hash=1864570515959054434, name='flask', version='1.1.4', build='pyhd8ed1ab_0', build_number=0, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='63a883114dff04051d6da14614abad6c', url='https://conda.anaconda.org/conda-forge/noarch/flask-1.1.4-pyhd8ed1ab_0.tar.bz2', sha256='caefc2382372dae76287b2f93c8f143be6a2f6fd1beb9a99d397bdd89885ca0b', depends=('click >=5.1,<8.0', 'itsdangerous >=0.24,<2.0', 'jinja2 >=2.10.1,<3.0', 'python >=3.7', 'werkzeug >=0.15,<2.0')), PrefixRecord(_hash=217662879442330501, name='readline', version='8.2', build='h8228510_1', build_number=1, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='47d31b792659ce70f470b5c82fdfb7a4', url='https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.tar.bz2', sha256='5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7', depends=('libgcc-ng >=12', 'ncurses >=6.3,<7.0a0')), PrefixRecord(_hash=7171625443809266070, name='openssl', version='1.1.1u', build='hd590300_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='cc1c2db83ae28a28871d52b035739488', url='https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1u-hd590300_0.tar.bz2', sha256='b8b2c2cebc4753d23263cae5deaf9112069113030a14076756358ea090194616', depends=('ca-certificates', 'libgcc-ng >=12')), PrefixRecord(_hash=5478892565273133814, name='ld_impl_linux-64', version='2.40', build='h41732ed_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='7aca3059a1729aa76c597603f10b0dd3', url='https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.tar.bz2', sha256='f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd', depends=()), PrefixRecord(_hash=3767926195225194115, name='xz', version='5.2.6', build='h166bdaf_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='2161070d867d1b1204ea749c8eec4ef0', url='https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2', sha256='03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162', depends=('libgcc-ng >=12',)), PrefixRecord(_hash=4806233417525843396, name='setuptools', version='68.0.0', build='pyhd8ed1ab_0', build_number=0, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='5a7739d0f57ee64133c9d32e6507c46d', url='https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.tar.bz2', sha256='083a0913f5b56644051f31ac40b4eeea762a88c00aa12437817191b85a753cec', depends=('python >=3.7',)), PrefixRecord(_hash=6087619369644264193, name='_libgcc_mutex', version='0.1', build='conda_forge', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='d7c89558ba9fa0495403155b64376d81', url='https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2', sha256='fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726', depends=()), PrefixRecord(_hash=7883234331493347149, name='python', version='3.9.6', build='h49503c6_1_cpython', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='3ef028f528fe6cae3a536acb5d31be7a', url='https://conda.anaconda.org/conda-forge/linux-64/python-3.9.6-h49503c6_1_cpython.tar.bz2', sha256='525da63a4195fb8dd68f7edc92b7cc6e7f408a002a747b2dc6c487ce8adf6d52', depends=('ld_impl_linux-64 >=2.36.1', 'libffi >=3.3,<3.4.0a0', 'libgcc-ng >=9.3.0', 'ncurses >=6.2,<7.0.0a0', 'openssl >=1.1.1k,<1.1.2a', 'readline >=8.1,<9.0a0', 'sqlite >=3.36.0,<4.0a0', 'tk >=8.6.10,<8.7.0a0', 'tzdata', 'xz >=5.2.5,<5.3.0a0', 'zlib >=1.2.11,<1.3.0a0')), PrefixRecord(_hash=-896372301984600320, name='tk', version='8.6.12', build='h27826a3_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='5b8c42eb62e9fc961af70bdd6a26e168', url='https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2', sha256='032fd769aad9d4cad40ba261ab222675acb7ec951a8832455fce18ef33fa8df0', depends=('libgcc-ng >=9.4.0', 'libzlib >=1.2.11,<1.3.0a0')), PrefixRecord(_hash=4117789512474915087, name='ncurses', version='6.4', build='hcb278e6_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='681105bccc2a3f7f1a837d47d39c9179', url='https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.tar.bz2', sha256='ccf61e61d58a8a7b2d66822d5568e2dc9387883dd9b2da61e1d787ece4c4979a', depends=('libgcc-ng >=12',)), PrefixRecord(_hash=4130680458484229485, name='sqlite', version='3.42.0', build='h2c6b66d_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='1192f6ec654a5bc4ee1d64bdc4a3e5cc', url='https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.tar.bz2', sha256='9cf59fa9891248e0e3a86a41041156cec367653d423e5d8a09b4c8ab98441a27', depends=('libgcc-ng >=12', 'libsqlite 3.42.0', 'libzlib >=1.2.13,<1.3.0a0', 'ncurses >=6.3,<7.0a0', 'readline >=8.2,<9.0a0')), PrefixRecord(_hash=-5848454029907418160, name='libffi', version='3.3', build='h58526e2_2', build_number=2, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='665369991d8dd290ac5ee92fce3e6bf5', url='https://conda.anaconda.org/conda-forge/linux-64/libffi-3.3-h58526e2_2.tar.bz2', sha256='bfa80758d38a4f50089c38340b4577d476daaf10967ab2dfc2de9650854705f0', depends=('libgcc-ng >=7.5.0', 'libstdcxx-ng >=7.5.0')), PrefixRecord(_hash=-5506156747694922585, name='jinja2', version='2.11.3', build='pyhd8ed1ab_2', build_number=2, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='bdedf6199eec03402a0c5db1f25e891e', url='https://conda.anaconda.org/conda-forge/noarch/jinja2-2.11.3-pyhd8ed1ab_2.tar.bz2', sha256='bd10e86000b606b69bff881268d9d54b347d08d0850593ab24dfc05f7bcb91c6', depends=('markupsafe >=0.23,<2.1', 'python >=3.5', 'setuptools')), PrefixRecord(_hash=1215477188485682399, name='libsqlite', version='3.42.0', build='h2797004_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='fdaae20a1cf7cd62130a0973190a31b7', url='https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.42.0-h2797004_0.tar.bz2', sha256='72e958870f49174ebc0ddcd4129e9a9f48de815f20aa3b553f136b514f29bb3a', depends=('libgcc-ng >=12', 'libzlib >=1.2.13,<1.3.0a0')), PrefixRecord(_hash=-6890465648837371721, name='ca-certificates', version='2023.5.7', build='hbcca054_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='f5c65075fc34438d5b456c7f3f5ab695', url='https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.tar.bz2', sha256='0cf1bb3d0bfc5519b60af2c360fa4888fb838e1476b1e0f65b9dbc48b45c7345', depends=()), PrefixRecord(_hash=-3106167075499420295, name='tzdata', version='2023c', build='h71feb2d_0', build_number=0, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='939e3e74d8be4dac89ce83b20de2492a', url='https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.tar.bz2', sha256='0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55', depends=()), PrefixRecord(_hash=-6914100323875545989, name='pydantic', version='1.7', build='py39h07f9747_0', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='f33be4cbe9070ef3671852aaa304e2f6', url='https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.7-py39h07f9747_0.tar.bz2', sha256='09bbf313f929700e639b7fdc421130d567c958ac625a81e30a8cafbf17c35e8b', depends=('libgcc-ng >=7.5.0', 'python >=3.9,<3.10.0a0', 'python_abi 3.9.*')), PrefixRecord(_hash=-9067982657162894589, name='itsdangerous', version='1.1.0', build='py_0', build_number=0, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='8afda875561afffed1115fd247fdd61e', url='https://conda.anaconda.org/conda-forge/noarch/itsdangerous-1.1.0-py_0.tar.bz2', sha256='55fdad81f4130544e6bad0accacaaa01541c28d046a5a385b8bce34e1093cf9d', depends=('python',)), PrefixRecord(_hash=-3960696335752423681, name='python_abi', version='3.9', build='3_cp39', build_number=0, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='0dd193187d54e585cac7eab942a8847e', url='https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.tar.bz2', sha256='89e8c4436dd04d8b4a0c13c508e930be56973a480a9714171969de953bdafd3a', depends=()), PrefixRecord(_hash=3651643537671295313, name='werkzeug', version='1.0.1', build='pyh9f0ad1d_0', build_number=0, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='a9f0ed0e6ba014c4e42543bda09e0035', url='https://conda.anaconda.org/conda-forge/noarch/werkzeug-1.0.1-pyh9f0ad1d_0.tar.bz2', sha256='6b8d772970f447b686c3fd498ca8df9f3121bfd5988644aeeea63c9dab54b8a4', depends=('python',)), PrefixRecord(_hash=-8793689297694241366, name='click', version='7.1.2', build='pyh9f0ad1d_0', build_number=0, channel=Channel("conda-forge/noarch"), subdir='noarch', md5='bd50a970ce07e660c319fdc4d730d3f1', url='https://conda.anaconda.org/conda-forge/noarch/click-7.1.2-pyh9f0ad1d_0.tar.bz2', sha256='e08b3d5bd79fae9e6e0edcbe41d42c93f9b0f4698df98b22d9119c8f6057cf2d', depends=('python',)), PrefixRecord(_hash=4176514287766983998, name='libzlib', version='1.2.13', build='hd590300_5', build_number=5, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='f36c115f1ee199da648e0597ec2047ad', url='https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.tar.bz2', sha256='370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4', depends=('libgcc-ng >=12',)), PrefixRecord(_hash=1242590324271593394, name='zlib', version='1.2.13', build='hd590300_5', build_number=5, channel=Channel("conda-forge/linux-64"), subdir='linux-64', md5='68c34ec6149623be41a1933ab996a209', url='https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.tar.bz2', sha256='9887a04d7e7cb14bd2b52fa01858f05a6d7f002c890f618d9fcd864adbfecb1b', depends=('libgcc-ng >=12', 'libzlib 1.2.13')), PackageRecord(_hash=-4743696213320253586, name='__linux', version='0', build='0', build_number=0, channel=Channel("@"), subdir='linux-64', fn='__linux', md5='12345678901234567890123456789012', package_type='virtual_system'), PackageRecord(_hash=-8923462647567306477, name='__unix', version='0', build='0', build_number=0, channel=Channel("@"), subdir='linux-64', fn='__unix', md5='12345678901234567890123456789012', package_type='virtual_system')]

Actually, I think the problem is with to_unlink, which is

[('https://conda.anaconda.org/conda-forge/linux-64', '')]

and as such pkg in the loop is ''!

Calling it a night too!

maresb commented 1 year ago

Interesting, my shlex.join(proc.args) command ends with 'pydantic 1.7' rather than your 'pydantic >=1.9.0,<1.9.1'. I can reproduce it by switching to the latter.

So now I'm wondering why we have different version specifications. On my side, following it up the stack, in conda_lock.make_lock_files line 328 I have src_files=['.../environment-preupdate.yml'] as an argument to make_lock_spec. This gives me a LockSpec with

[dep.version for dep in lock_spec.dependencies["linux-64"] if dep.name == "pydantic"] == ['1.7']

This propagates down the stack via conda_lock L380, conda_lock L782, conda_lock L706, conda_solver L148, conda_solver L490.

I'm going to merge this in order to have a working main, but I'm still interested in pursuing this further.

riccardoporreca commented 1 year ago

I'm still interested in pursuing this further.

@maresb, I have found indications of the issue appearing with mamba 1.4.6 (released June 30), and indeed failures appeared in the last week or so. Let me pursue this further, I will report my findings and free up some of your precious time for other conda-lock topics (like pydantic V2 or vendored poetry updates ;)) or for some quality Sunday time :)

riccardoporreca commented 1 year ago

I have created #452 to follow-up on the matter