diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 45f9870..76f1d15 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -171,6 +171,22 @@ jobs: exit 1 fi + test-version-file-hash-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install from requirements file + id: setup-uv + uses: ./ + with: + version-file: "__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt" + - name: Correct version gets installed + run: | + if [ "$(uv --version)" != "uv 0.8.3" ]; then + echo "Wrong uv version: $(uv --version)" + exit 1 + fi + test-checksum: runs-on: ${{ matrix.inputs.os }} strategy: @@ -618,6 +634,7 @@ jobs: - test-malformed-pyproject-file-fallback - test-uv-file-version - test-version-file-version + - test-version-file-hash-version - test-checksum - test-with-explicit-token - test-uvx diff --git a/__tests__/fixtures/uv-in-requirements-hash-txt-project/hello_world.py b/__tests__/fixtures/uv-in-requirements-hash-txt-project/hello_world.py new file mode 100644 index 0000000..44159b3 --- /dev/null +++ b/__tests__/fixtures/uv-in-requirements-hash-txt-project/hello_world.py @@ -0,0 +1 @@ +print("Hello world") diff --git a/__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt b/__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt new file mode 100644 index 0000000..f0875b3 --- /dev/null +++ b/__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt @@ -0,0 +1,33 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --generate-hashes - -o ex-requirements.txt +click==8.2.1 \ + --hash=sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202 \ + --hash=sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b + # via uvicorn +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + # via uvicorn +uv==0.8.3 \ + --hash=sha256:1121ad1c9389b865d029385031d3fd7d90d343c92a2149a4d4aa20bf469cb27f \ + --hash=sha256:17bcdb0615e37cc5f985f7d7546f755ac6343c1dc8bbe876c892437f14f8f904 \ + --hash=sha256:2ccaae4c749126c99f6404d67a0ae1eae29cbafb05603d09094a775061fdf4e5 \ + --hash=sha256:2e311c029bff2ca07c6ddf877ccc5935cabb78e09b94b53a849542665b6a6fa1 \ + --hash=sha256:391c97577048a40fd8c85b370055df6420f26e81df7fa906f0e0ce1aa2af3527 \ + --hash=sha256:3f904f574dc2d7aa1d96ddf2483480ecd121dc9d060108cadd8bff100b754b64 \ + --hash=sha256:526f2c3bd6f311ce31f6f7b6b7d818b191f41e76bed3aaab671b716220c02d8f \ + --hash=sha256:5313ee776ad65731ffa8ac585246f987d3a2bf72e6153c12add1fff22ad6e500 \ + --hash=sha256:5843cc43bafad05cc710d8e31bd347ee37202462a63d32c30746e9df48cfbda2 \ + --hash=sha256:76de331a07e5ae9b6490e70a9439a072b91b3167a5684510af10c2752c4ece9a \ + --hash=sha256:8486f7576d15cc73509f93f47b3190f44701ea36839906369301b58c8604d5db \ + --hash=sha256:8b16f1bddfdf8f7470924ab34a7b55e4c372d5340c7c1e47e7fc84a743dc541f \ + --hash=sha256:966ec7d7f57521fef0fee685d71e183c9cafb358ddcfe27519dfeaf40550f247 \ + --hash=sha256:989898caeb6e972979543b57547d1c28ab8af81ff8fc15921fd354c17d432749 \ + --hash=sha256:9ce7981f4fbeecf93dc5cf0a5a7915e84956fd99ad3ac977c048fe0cfdb1a17e \ + --hash=sha256:ad13453ab0a1dfa64a221aac8f52199efdcaa52c97134fffd7bcebed794a6f4b \ + --hash=sha256:ae7efe91dcfc24126fa91e0fb69a1daf6c0e494a781ba192bb0cc62d7ab623ee \ + --hash=sha256:daa6e0d657a94f20e962d4a03d833ef7af5c8e51b7c8a2d92ba6cf64a4c07ac1 \ + --hash=sha256:f1eb7c896fc0d80ed534748aaf46697b6ebc8ce401f1c51666ce0b9923c3db9a +uvicorn==0.35.0 \ + --hash=sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a \ + --hash=sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01 diff --git a/__tests__/version/requirements-hashes-file.test.ts b/__tests__/version/requirements-hashes-file.test.ts new file mode 100644 index 0000000..8b6ec26 --- /dev/null +++ b/__tests__/version/requirements-hashes-file.test.ts @@ -0,0 +1,10 @@ +import { getUvVersionFromFile } from "../../src/version/resolve"; + +import { expect, test } from "@jest/globals"; + +test("ignores dependencies starting with uv", async () => { + const parsedVersion = getUvVersionFromFile( + "__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt", + ); + expect(parsedVersion).toBe("0.8.3"); +}); diff --git a/dist/setup/index.js b/dist/setup/index.js index f4fa6f7..7e6df24 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -125910,7 +125910,7 @@ function getUvVersionFromRequirementsFile(filePath) { function getUvVersionFromAllDependencies(allDependencies) { return allDependencies .find((dep) => dep.match(/^uv[=<>~!]/)) - ?.match(/^uv([=<>~!]+.*)$/)?.[1] + ?.match(/^uv([=<>~!]+\S*)/)?.[1] .trim(); } function parsePyprojectDependencies(pyprojectContent) { diff --git a/src/version/requirements-file.ts b/src/version/requirements-file.ts index 1a8b722..751596c 100644 --- a/src/version/requirements-file.ts +++ b/src/version/requirements-file.ts @@ -16,7 +16,7 @@ function getUvVersionFromAllDependencies( ): string | undefined { return allDependencies .find((dep: string) => dep.match(/^uv[=<>~!]/)) - ?.match(/^uv([=<>~!]+.*)$/)?.[1] + ?.match(/^uv([=<>~!]+\S*)/)?.[1] .trim(); }