I don't have any particular experience, but based just on what you shared there, it does feel like a next logical step in the migration to these tools. Off-loading work and simplifying our CI is also always a plus in my opinion.
- ferruzzi ________________________________ From: Jarek Potiuk <ja...@potiuk.com> Sent: Monday, August 18, 2025 4:14 AM To: dev@airflow.apache.org Subject: [EXT] [DISCUSS] Replace constraints with uv.lock mechanisms for dev env freeze CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe. AVERTISSEMENT: Ce courrier électronique provient d’un expéditeur externe. Ne cliquez sur aucun lien et n’ouvrez aucune pièce jointe si vous ne pouvez pas confirmer l’identité de l’expéditeur et si vous n’êtes pas certain que le contenu ne présente aucun risque. Hello here, *TL;DR: I would love to hear comments on the proposal to switch to using uv.lock for our dev env dependency freeze* While working on some small follow-ups after prek upgrade, I think I finally figured out how we can start using `uv.lock` locally and merge it into our constraint mechanism effectively - without over-burdening committers with merging a lot of "dependabot-like" PRs. The key problem that needed to be resolved was who and when would update the uv.lock regularly. I captured my thoughts in https://github.com/apache/airflow/issues/54609 But let me copy the content of it below. I would love to hear the comments - here or in the GitHub issue if you will (I will bring important things from the issue here if they will be raised there): *Currently constraints are used for three purposes:* 1) to take snapshot of latest "working" version of dependencies 2) to limit PRs to "latest known good constraints" - so that newly released packages are not failing most PRs, but fail canary builds instead 3) to give our users a way to install released airflow in reproducible way However, after we switched to uv, the case 2) can be better achieved with uv.lock. Currently we .gitignore uv.lock, but we could commit it to the repository and handle constraint generation differently * constraints could be generated using latest lock * canary builds could use the --resolution highest as today and diverge from latest "frozen" uv.lock * all prs would use the uv.lock and do not use --resolution-highest in those PRs. This has the added benefit that uv sync in PR would automatically upgrade dependencies if the dependencies in pyproject.toml are conflicting with uv.lock - but it would not use --resolution highest, which means that the PRs that modify dependeNcies do not have to get latest dependencies when they are run - that would limit the number of PRs that are experiencing "main/canary" problems *Problem* The only problem to solve is who and when would upgrade the uv.lock and commit it to the repo. Currently constraints are automatically bumped after successful canary runs, but they are in orphan un-protected branches, while uv.lock shares the code with main airflow repo, and we need a "human with ICLA" to review and merge commits there (ASF requirement) *Solution* Proposed solution is to add such a uv.lock upgrade to our "upgrade-important-versions" prek hook. We run it in CI in canary builds and we fail the builds when new versions of important installers change (pip, Python base images, golang) - this happens often-enough to be eventually-consistent pretty fast, but rarely enough to make it into annoying "everyday" upgrade chore. Regular PRs - especially those that would change dependencies will also modify uv.lock - for example when a new dependency is added or removed or bumped. This means that the uv.lock will be generally quite regularly bumped and "eventually consistent" with constraints. *Benefits:* * simplification of breeze build image with constraints (currently it uses complex uv pip install with --constraint, and it could simply use uv sync --all-packages instead if our uv.lock is checked in and maintained * better synchronization of the local venv. Currently uv sync does not guarantee to have the same version of dependencies in local venv. The only way to guarantee it now is to use breeze image - build with constraints or run complex commands with constraints added when you run uv sync * less "3rd-party release" impact on failing PRs. if PRs will not touch the dependency specification where the new release is released, it will continue using the dependency stored in .lock and not the latest dependency released *Cons:* * Probably we should pay more attention to run upgrade-important-versions regularly and even add an option there to manually just perform the sync (for example that will be useful as part of the release procedure, where release manager would have to make sure to run the upgrade-important-versions check when preparing release notes. But it has the advantage that it will be a conscious step that should actually help in making sure that constraints are updated. * sometimes PRs of people will have "big" changes to uv.lock - when they are updating the dependency and alongside the uv.lock will also bump many other unrelated dependencies - this could be mitigated by splitting it into "lock upgrade" and "dependency update" but workflow of that is not very convenient and natural. J.