| # uv_lock integration test workspace | |
| This directory is a self-contained Bazel workspace used by the | |
| `//tests/integration:uv_lock_test` integration test. | |
| It demonstrates how to use the `lock()` macro from `@rules_python//python/uv` | |
| to pin requirements with `uv pip compile`. | |
| ## Targets | |
| | Target | Description | | |
| |--------|-------------| | |
| | `//:requirements` | Build action that produces the locked requirements file | | |
| | `//:requirements.update` | Update the in-source `requirements.txt` via `bazel run` | | |
| | `//:requirements.run` | Run `uv pip compile` with extra command-line args | | |
| | `//:requirements_diff_test` | Diff test comparing the lock output to the in-source file | | |
| | `//:uv` | The `uv` binary from the registered toolchain | | |
| ## Workflow for debugging | |
| If you want to debug and play around, you can start the server and then run the uv lock command | |
| manually. | |
| ### Start the local PyPI server | |
| In a separate terminal, start the pypiserver that serves the `my-local-pkg` test wheel: | |
| ```shell | |
| bazel run //tests/integration:uv_lock_pypi_server [-- --no-auth] | |
| ``` | |
| The server prints the URL to use (with and without authentication) and the | |
| SHA256 of the wheel. Pass `--no-auth` to allow anonymous access. | |
| ### Lock the requirements | |
| With the server running, lock the requirements from this directory: | |
| ```shell | |
| cd tests/integration/uv_lock | |
| bazel run //:requirements.update \ | |
| --action_env=UV_EXTRA_INDEX_URL="<auth-url>" \ | |
| --action_env=UV_CREDENTIALS_DIR=<creds-dir> | |
| ``` | |
| The `<auth-url>` and `<creds-dir>` values are printed by the pypi-server. | |
| ### Verify the lock output matches the in-source file | |
| ```shell | |
| bazel test //:requirements_diff_test | |
| ``` | |
| ## bazel-in-bazel Testing | |
| When iterating on changes to `lock.bzl`, the integration test can be run | |
| directly from rules_python: | |
| ```shell | |
| bazel test //tests/integration:uv_lock_test_bazel_self \ | |
| --config=fast-tests \ | |
| --test_output=streamed \ | |
| --test_filter=<test_name> | |
| ``` |