From 71778cb72116ab896e89e288fcdede868ea4f395 Mon Sep 17 00:00:00 2001 From: Mason Daugherty Date: Tue, 16 Dec 2025 22:23:25 -0500 Subject: [PATCH] feat(infra): add CI check for out of date lockfiles (#34397) --- .github/workflows/_lint.yml | 6 ++++++ libs/Makefile | 20 +++++++++++++++++++ libs/core/uv.lock | 2 +- libs/langchain/uv.lock | 10 +++++----- libs/langchain_v1/uv.lock | 8 ++++---- libs/model-profiles/uv.lock | 40 ++++++++++++++++++++++++++++++++----- libs/text-splitters/uv.lock | 2 +- 7 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 libs/Makefile diff --git a/.github/workflows/_lint.yml b/.github/workflows/_lint.yml index f1de8b390a5..63d28bfe94a 100644 --- a/.github/workflows/_lint.yml +++ b/.github/workflows/_lint.yml @@ -47,6 +47,12 @@ jobs: cache-suffix: lint-${{ inputs.working-directory }} working-directory: ${{ inputs.working-directory }} + - name: "🔒 Verify Lockfile is Up-to-Date" + working-directory: ${{ inputs.working-directory }} + run: | + unset UV_FROZEN + uv lock --check + - name: "📦 Install Lint & Typing Dependencies" working-directory: ${{ inputs.working-directory }} run: | diff --git a/libs/Makefile b/libs/Makefile new file mode 100644 index 00000000000..23aa554af95 --- /dev/null +++ b/libs/Makefile @@ -0,0 +1,20 @@ +# Makefile for libs/ directory +# Contains targets that operate across multiple packages + +LANGCHAIN_DIRS = core text-splitters langchain langchain_v1 model-profiles + +.PHONY: lock check-lock + +# Regenerate lockfiles for all core packages +lock: + @for dir in $(LANGCHAIN_DIRS); do \ + echo "=== Locking $$dir ==="; \ + (cd $$dir && uv lock); \ + done + +# Verify all lockfiles are up-to-date +check-lock: + @for dir in $(LANGCHAIN_DIRS); do \ + echo "=== Checking $$dir ==="; \ + (cd $$dir && uv lock --check) || exit 1; \ + done diff --git a/libs/core/uv.lock b/libs/core/uv.lock index 919c0f3f3e3..4674b961cc4 100644 --- a/libs/core/uv.lock +++ b/libs/core/uv.lock @@ -1078,7 +1078,7 @@ typing = [ [[package]] name = "langchain-tests" -version = "1.1.0" +version = "1.1.1" source = { directory = "../standard-tests" } dependencies = [ { name = "httpx" }, diff --git a/libs/langchain/uv.lock b/libs/langchain/uv.lock index ed44461a61e..98c23a6b8a5 100644 --- a/libs/langchain/uv.lock +++ b/libs/langchain/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10.0, <4.0.0" resolution-markers = [ "python_full_version >= '3.14' and platform_python_implementation == 'PyPy'", @@ -2458,7 +2458,7 @@ typing = [ [[package]] name = "langchain-core" -version = "1.1.0" +version = "1.2.2" source = { editable = "../core" } dependencies = [ { name = "jsonpatch" }, @@ -2639,7 +2639,7 @@ wheels = [ [[package]] name = "langchain-openai" -version = "1.1.0" +version = "1.1.4" source = { editable = "../partners/openai" } dependencies = [ { name = "langchain-core" }, @@ -2702,7 +2702,7 @@ wheels = [ [[package]] name = "langchain-tests" -version = "1.0.2" +version = "1.1.1" source = { editable = "../standard-tests" } dependencies = [ { name = "httpx" }, @@ -2747,7 +2747,7 @@ typing = [ [[package]] name = "langchain-text-splitters" -version = "1.0.0" +version = "1.1.0" source = { editable = "../text-splitters" } dependencies = [ { name = "langchain-core" }, diff --git a/libs/langchain_v1/uv.lock b/libs/langchain_v1/uv.lock index 6895f38f132..f90f6f8910b 100644 --- a/libs/langchain_v1/uv.lock +++ b/libs/langchain_v1/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10.0, <4.0.0" resolution-markers = [ "python_full_version >= '3.14' and platform_python_implementation == 'PyPy'", @@ -2102,7 +2102,7 @@ wheels = [ [[package]] name = "langchain-core" -version = "1.2.1" +version = "1.2.2" source = { editable = "../core" } dependencies = [ { name = "jsonpatch" }, @@ -2283,7 +2283,7 @@ wheels = [ [[package]] name = "langchain-openai" -version = "1.1.3" +version = "1.1.4" source = { editable = "../partners/openai" } dependencies = [ { name = "langchain-core" }, @@ -2346,7 +2346,7 @@ wheels = [ [[package]] name = "langchain-tests" -version = "1.1.0" +version = "1.1.1" source = { editable = "../standard-tests" } dependencies = [ { name = "httpx" }, diff --git a/libs/model-profiles/uv.lock b/libs/model-profiles/uv.lock index af84abbc60f..ec13dbc28e9 100644 --- a/libs/model-profiles/uv.lock +++ b/libs/model-profiles/uv.lock @@ -459,7 +459,7 @@ wheels = [ [[package]] name = "langchain" -version = "1.1.0" +version = "1.2.0" source = { editable = "../langchain_v1" } dependencies = [ { name = "langchain-core" }, @@ -497,7 +497,7 @@ requires-dist = [ provides-extras = ["community", "anthropic", "openai", "azure-ai", "google-vertexai", "google-genai", "fireworks", "ollama", "together", "mistralai", "huggingface", "groq", "aws", "deepseek", "xai", "perplexity"] [package.metadata.requires-dev] -lint = [{ name = "ruff", specifier = ">=0.12.2,<0.13.0" }] +lint = [{ name = "ruff", specifier = ">=0.14.2,<0.15.0" }] test = [ { name = "langchain-openai", editable = "../partners/openai" }, { name = "langchain-tests", editable = "../standard-tests" }, @@ -512,7 +512,6 @@ test = [ { name = "toml", specifier = ">=0.10.2,<1.0.0" }, ] test-integration = [ - { name = "cassio", specifier = ">=0.1.0,<1.0.0" }, { name = "langchain-core", editable = "../core" }, { name = "langchain-text-splitters", editable = "../text-splitters" }, { name = "langchainhub", specifier = ">=0.1.16,<1.0.0" }, @@ -527,7 +526,7 @@ typing = [ [[package]] name = "langchain-core" -version = "1.1.0" +version = "1.2.2" source = { editable = "../core" } dependencies = [ { name = "jsonpatch" }, @@ -537,6 +536,7 @@ dependencies = [ { name = "pyyaml" }, { name = "tenacity" }, { name = "typing-extensions" }, + { name = "uuid-utils" }, ] [package.metadata] @@ -548,6 +548,7 @@ requires-dist = [ { name = "pyyaml", specifier = ">=5.3.0,<7.0.0" }, { name = "tenacity", specifier = ">=8.1.0,!=8.4.0,<10.0.0" }, { name = "typing-extensions", specifier = ">=4.7.0,<5.0.0" }, + { name = "uuid-utils", specifier = ">=0.12.0,<1.0" }, ] [package.metadata.requires-dev] @@ -653,7 +654,7 @@ typing = [ [[package]] name = "langchain-openai" -version = "1.1.0" +version = "1.1.4" source = { editable = "../partners/openai" } dependencies = [ { name = "langchain-core" }, @@ -1669,6 +1670,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, ] +[[package]] +name = "uuid-utils" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/0e/512fb221e4970c2f75ca9dae412d320b7d9ddc9f2b15e04ea8e44710396c/uuid_utils-0.12.0.tar.gz", hash = "sha256:252bd3d311b5d6b7f5dfce7a5857e27bb4458f222586bb439463231e5a9cbd64", size = 20889, upload-time = "2025-12-01T17:29:55.494Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/43/de5cd49a57b6293b911b6a9a62fc03e55db9f964da7d5882d9edbee1e9d2/uuid_utils-0.12.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3b9b30707659292f207b98f294b0e081f6d77e1fbc760ba5b41331a39045f514", size = 603197, upload-time = "2025-12-01T17:29:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/02/fa/5fd1d8c9234e44f0c223910808cde0de43bb69f7df1349e49b1afa7f2baa/uuid_utils-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:add3d820c7ec14ed37317375bea30249699c5d08ff4ae4dbee9fc9bce3bfbf65", size = 305168, upload-time = "2025-12-01T17:29:31.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c6/8633ac9942bf9dc97a897b5154e5dcffa58816ec4dd780b3b12b559ff05c/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8fce83ecb3b16af29c7809669056c4b6e7cc912cab8c6d07361645de12dd79", size = 340580, upload-time = "2025-12-01T17:29:32.362Z" }, + { url = "https://files.pythonhosted.org/packages/f3/88/8a61307b04b4da1c576373003e6d857a04dade52ab035151d62cb84d5cb5/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec921769afcb905035d785582b0791d02304a7850fbd6ce924c1a8976380dfc6", size = 346771, upload-time = "2025-12-01T17:29:33.708Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fb/aab2dcf94b991e62aa167457c7825b9b01055b884b888af926562864398c/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f3b060330f5899a92d5c723547dc6a95adef42433e9748f14c66859a7396664", size = 474781, upload-time = "2025-12-01T17:29:35.237Z" }, + { url = "https://files.pythonhosted.org/packages/5a/7a/dbd5e49c91d6c86dba57158bbfa0e559e1ddf377bb46dcfd58aea4f0d567/uuid_utils-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:908dfef7f0bfcf98d406e5dc570c25d2f2473e49b376de41792b6e96c1d5d291", size = 343685, upload-time = "2025-12-01T17:29:36.677Z" }, + { url = "https://files.pythonhosted.org/packages/1a/19/8c4b1d9f450159733b8be421a4e1fb03533709b80ed3546800102d085572/uuid_utils-0.12.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c6a24148926bd0ca63e8a2dabf4cc9dc329a62325b3ad6578ecd60fbf926506", size = 366482, upload-time = "2025-12-01T17:29:37.979Z" }, + { url = "https://files.pythonhosted.org/packages/82/43/c79a6e45687647f80a159c8ba34346f287b065452cc419d07d2212d38420/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:64a91e632669f059ef605f1771d28490b1d310c26198e46f754e8846dddf12f4", size = 523132, upload-time = "2025-12-01T17:29:39.293Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a2/b2d75a621260a40c438aa88593827dfea596d18316520a99e839f7a5fb9d/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:93c082212470bb4603ca3975916c205a9d7ef1443c0acde8fbd1e0f5b36673c7", size = 614218, upload-time = "2025-12-01T17:29:40.315Z" }, + { url = "https://files.pythonhosted.org/packages/13/6b/ba071101626edd5a6dabf8525c9a1537ff3d885dbc210540574a03901fef/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:431b1fb7283ba974811b22abd365f2726f8f821ab33f0f715be389640e18d039", size = 546241, upload-time = "2025-12-01T17:29:41.656Z" }, + { url = "https://files.pythonhosted.org/packages/01/12/9a942b81c0923268e6d85bf98d8f0a61fcbcd5e432fef94fdf4ce2ef8748/uuid_utils-0.12.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd7838c40149100299fa37cbd8bab5ee382372e8e65a148002a37d380df7c8", size = 511842, upload-time = "2025-12-01T17:29:43.107Z" }, + { url = "https://files.pythonhosted.org/packages/a9/a7/c326f5163dd48b79368b87d8a05f5da4668dd228a3f5ca9d79d5fee2fc40/uuid_utils-0.12.0-cp39-abi3-win32.whl", hash = "sha256:487f17c0fee6cbc1d8b90fe811874174a9b1b5683bf2251549e302906a50fed3", size = 179088, upload-time = "2025-12-01T17:29:44.492Z" }, + { url = "https://files.pythonhosted.org/packages/38/92/41c8734dd97213ee1d5ae435cf4499705dc4f2751e3b957fd12376f61784/uuid_utils-0.12.0-cp39-abi3-win_amd64.whl", hash = "sha256:9598e7c9da40357ae8fffc5d6938b1a7017f09a1acbcc95e14af8c65d48c655a", size = 183003, upload-time = "2025-12-01T17:29:45.47Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/52ab0359618987331a1f739af837d26168a4b16281c9c3ab46519940c628/uuid_utils-0.12.0-cp39-abi3-win_arm64.whl", hash = "sha256:c9bea7c5b2aa6f57937ebebeee4d4ef2baad10f86f1b97b58a3f6f34c14b4e84", size = 182975, upload-time = "2025-12-01T17:29:46.444Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f7/6c55b7722cede3b424df02ed5cddb25c19543abda2f95fa4cfc34a892ae5/uuid_utils-0.12.0-pp311-pypy311_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e2209d361f2996966ab7114f49919eb6aaeabc6041672abbbbf4fdbb8ec1acc0", size = 593065, upload-time = "2025-12-01T17:29:47.507Z" }, + { url = "https://files.pythonhosted.org/packages/b8/40/ce5fe8e9137dbd5570e0016c2584fca43ad81b11a1cef809a1a1b4952ab7/uuid_utils-0.12.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d9636bcdbd6cfcad2b549c352b669412d0d1eb09be72044a2f13e498974863cd", size = 300047, upload-time = "2025-12-01T17:29:48.596Z" }, + { url = "https://files.pythonhosted.org/packages/fb/9b/31c5d0736d7b118f302c50214e581f40e904305d8872eb0f0c921d50e138/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd8543a3419251fb78e703ce3b15fdfafe1b7c542cf40caf0775e01db7e7674", size = 335165, upload-time = "2025-12-01T17:29:49.755Z" }, + { url = "https://files.pythonhosted.org/packages/f6/5c/d80b4d08691c9d7446d0ad58fd41503081a662cfd2c7640faf68c64d8098/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e98db2d8977c052cb307ae1cb5cc37a21715e8d415dbc65863b039397495a013", size = 341437, upload-time = "2025-12-01T17:29:51.112Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b3/9dccdc6f3c22f6ef5bd381ae559173f8a1ae185ae89ed1f39f499d9d8b02/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8f2bdf5e4ffeb259ef6d15edae92aed60a1d6f07cbfab465d836f6b12b48da8", size = 469123, upload-time = "2025-12-01T17:29:52.389Z" }, + { url = "https://files.pythonhosted.org/packages/fd/90/6c35ef65fbc49f8189729839b793a4a74a7dd8c5aa5eb56caa93f8c97732/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c3ec53c0cb15e1835870c139317cc5ec06e35aa22843e3ed7d9c74f23f23898", size = 335892, upload-time = "2025-12-01T17:29:53.44Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c7/e3f3ce05c5af2bf86a0938d22165affe635f4dcbfd5687b1dacc042d3e0e/uuid_utils-0.12.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:84e5c0eba209356f7f389946a3a47b2cc2effd711b3fc7c7f155ad9f7d45e8a3", size = 360693, upload-time = "2025-12-01T17:29:54.558Z" }, +] + [[package]] name = "watchdog" version = "6.0.0" diff --git a/libs/text-splitters/uv.lock b/libs/text-splitters/uv.lock index e62682babf0..4dcd28eb39d 100644 --- a/libs/text-splitters/uv.lock +++ b/libs/text-splitters/uv.lock @@ -1123,7 +1123,7 @@ wheels = [ [[package]] name = "langchain-core" -version = "1.2.0" +version = "1.2.2" source = { editable = "../core" } dependencies = [ { name = "jsonpatch" },