23b8fc9d18
## Summary Currently we do not include a Windows manifest on the uv binary for windows builds. This can cause problems such as the one in https://github.com/astral-sh/uv/issues/16877 which can limit what uv can do for some Windows operations (e.g. symlinks) that can have restrictions imposed by the OS unbeknownst to us and make it none obvious to isolate the issue. Given we already do this for the `uv-trampoline`, we should also do it for uv. In the case of uv, I opted for explicit entries in the manifest rather than using the defaults embed_manifest crate provides which are not appropriate in all general cases. The manifest now includes declarations for: * Explicit "system" codepage declaration to retain backwards compat with previous uv releases. We should move to utf-8 codepage in the future to align with `uv-trampoline`, but it's arguably a breaking change in rare cases. We shouldn't have issues with using utf-8 as we don't really rely on *A calls to begin with. * Explicit Windows 10+ support to ensure the executables are not treated as a legacy, preventing application compatibility layers being wrongly applied to it all the way back to NT 6.0 (Windows Vista). Note, other Windows compatibility entries do not imply support, rather they imply awareness as a preventive measure. * Long Path support to avoid Windows operations assuming [MAX_PATH](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation) applies. This still requires the system to have long paths enabled via ``HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled`` dword being set to ``1`` (see [ref](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation#registry-setting-to-enable-long-paths)). * Standard invoker execution levels for CLI applications to disable UAC virtualization after including the manifest. The resulting manifest is the following ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0"> <assemblyIdentity name="uv" type="win32" version="0.9.13.0"></assemblyIdentity> <asmv3:trustInfo> <asmv3:security> <asmv3:requestedPrivileges> <asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false"></asmv3:requestedExecutionLevel> </asmv3:requestedPrivileges> </asmv3:security> </asmv3:trustInfo> <asmv3:application> <asmv3:windowsSettings> <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> </asmv3:windowsSettings> </asmv3:application> <ms_compatibility:compatibility xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" xmlns="urn:schemas-microsoft-com:compatibility.v1"> <ms_compatibility:application xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1"> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></ms_compatibility:supportedOS> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></ms_compatibility:supportedOS> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></ms_compatibility:supportedOS> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></ms_compatibility:supportedOS> </ms_compatibility:application> </ms_compatibility:compatibility> </assembly> ``` For reference, here's `cargo`'s manifest from 1.91 ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel> </requestedPrivileges> </security> </trustInfo> <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings" xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longPathAware>true</ws2:longPathAware> <activeCodePage>UTF-8</activeCodePage> </asmv3:windowsSettings> </asmv3:application> <ms_compatibility:compatibility xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" xmlns="urn:schemas-microsoft-com:compatibility.v1"> <ms_compatibility:application xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1"> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></ms_compatibility:supportedOS> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></ms_compatibility:supportedOS> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></ms_compatibility:supportedOS> <ms_compatibility:supportedOS xmlns:ms_compatibility="urn:schemas-microsoft-com:compatibility.v1" Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></ms_compatibility:supportedOS> </ms_compatibility:application> </ms_compatibility:compatibility> </assembly> ``` Closes #16877 ## Test Plan Before changes on Windows 11 25H2 (without SeCreateSymbolicLinkPrivilege) ```console $ uv init $ uv add jupyterlab-widgets==3.0.16 --link-mode=symlink ... Resolved 2 packages in [TIME] error: Failed to install: jupyterlab_widgets-3.0.16-py3-none-any.whl (jupyterlab-widgets==3.0.16) Caused by: failed to symlink file from [CACHE_DIR]\archive-v0\aQcqEjLJAkVwuSzohqymc\jupyterlab_widgets-3.0.16.data\data\share\jupyter\labextensions\@jupyter-widgets\jupyterlab-manager\static\packages_base_lib_index_js-webpack_sharing_consume_default_jquery_jquery.5dd13f8e980fa3c50bfe.js to [ROOT]\.venv\Lib\site-packages\jupyterlab_widgets-3.0.16.data\data\share\jupyter\labextensions\@jupyter-widgets\jupyterlab-manager\static\packages_base_lib_index_js-webpack_sharing_consume_default_jquery_jquery.5dd13f8e980fa3c50bfe.js: A required privilege is not held by the client. (os error 1314) ``` Before changes on Windows 11 25H2 (with SeCreateSymbolicLinkPrivilege) ```console $ uv init $ uv add jupyterlab-widgets==3.0.16 --link-mode=symlink ... Resolved 2 packages in [TIME] error: Failed to install: jupyterlab_widgets-3.0.16-py3-none-any.whl (jupyterlab-widgets==3.0.16) Caused by: failed to symlink file from [CACHE_DIR]\archive-v0\aQcqEjLJAkVwuSzohqymc\jupyterlab_widgets-3.0.16.data\data\share\jupyter\labextensions\@jupyter-widgets\jupyterlab-manager\static\packages_base_lib_index_js-webpack_sharing_consume_default_jquery_jquery.5dd13f8e980fa3c50bfe.js to [ROOT]\.venv\Lib\site-packages\jupyterlab_widgets-3.0.16.data\data\share\jupyter\labextensions\@jupyter-widgets\jupyterlab-manager\static\packages_base_lib_index_js-webpack_sharing_consume_default_jquery_jquery.5dd13f8e980fa3c50bfe.js: The parameter is incorrect. (os error 87) ``` After changes on Windows 11 25H2 (with or without SeCreateSymbolicLinkPrivilege) ```console $ uv init $ uv add jupyterlab-widgets==3.0.16 --link-mode=symlink ... Resolved 2 packages in [TIME] Installed 1 package in [TIME] + jupyterlab-widgets==3.0.16 ```
332 lines
15 KiB
TOML
332 lines
15 KiB
TOML
[workspace]
|
|
members = ["crates/*"]
|
|
exclude = [
|
|
"scripts",
|
|
# Needs nightly
|
|
"crates/uv-trampoline",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
edition = "2024"
|
|
rust-version = "1.89"
|
|
homepage = "https://pypi.org/project/uv/"
|
|
repository = "https://github.com/astral-sh/uv"
|
|
authors = ["uv"]
|
|
license = "MIT OR Apache-2.0"
|
|
|
|
[workspace.dependencies]
|
|
uv-auth = { version = "0.0.4", path = "crates/uv-auth" }
|
|
uv-bin-install = { version = "0.0.4", path = "crates/uv-bin-install" }
|
|
uv-build-backend = { version = "0.0.4", path = "crates/uv-build-backend" }
|
|
uv-build-frontend = { version = "0.0.4", path = "crates/uv-build-frontend" }
|
|
uv-cache = { version = "0.0.4", path = "crates/uv-cache" }
|
|
uv-cache-info = { version = "0.0.4", path = "crates/uv-cache-info" }
|
|
uv-cache-key = { version = "0.0.4", path = "crates/uv-cache-key" }
|
|
uv-cli = { version = "0.0.4", path = "crates/uv-cli" }
|
|
uv-client = { version = "0.0.4", path = "crates/uv-client" }
|
|
uv-configuration = { version = "0.0.4", path = "crates/uv-configuration" }
|
|
uv-console = { version = "0.0.4", path = "crates/uv-console" }
|
|
uv-dirs = { version = "0.0.4", path = "crates/uv-dirs" }
|
|
uv-dispatch = { version = "0.0.4", path = "crates/uv-dispatch" }
|
|
uv-distribution = { version = "0.0.4", path = "crates/uv-distribution" }
|
|
uv-distribution-filename = { version = "0.0.4", path = "crates/uv-distribution-filename" }
|
|
uv-distribution-types = { version = "0.0.4", path = "crates/uv-distribution-types" }
|
|
uv-extract = { version = "0.0.4", path = "crates/uv-extract" }
|
|
uv-flags = { version = "0.0.4", path = "crates/uv-flags" }
|
|
uv-fs = { version = "0.0.4", path = "crates/uv-fs", features = ["serde", "tokio"] }
|
|
uv-git = { version = "0.0.4", path = "crates/uv-git" }
|
|
uv-git-types = { version = "0.0.4", path = "crates/uv-git-types" }
|
|
uv-globfilter = { version = "0.0.4", path = "crates/uv-globfilter" }
|
|
uv-install-wheel = { version = "0.0.4", path = "crates/uv-install-wheel", default-features = false }
|
|
uv-installer = { version = "0.0.4", path = "crates/uv-installer" }
|
|
uv-keyring = { version = "0.0.4", path = "crates/uv-keyring" }
|
|
uv-logging = { version = "0.0.4", path = "crates/uv-logging" }
|
|
uv-macros = { version = "0.0.4", path = "crates/uv-macros" }
|
|
uv-metadata = { version = "0.0.4", path = "crates/uv-metadata" }
|
|
uv-normalize = { version = "0.0.4", path = "crates/uv-normalize" }
|
|
uv-once-map = { version = "0.0.4", path = "crates/uv-once-map" }
|
|
uv-options-metadata = { version = "0.0.4", path = "crates/uv-options-metadata" }
|
|
uv-performance-memory-allocator = { version = "0.0.4", path = "crates/uv-performance-memory-allocator" }
|
|
uv-pep440 = { version = "0.0.4", path = "crates/uv-pep440", features = ["tracing", "rkyv", "version-ranges"] }
|
|
uv-pep508 = { version = "0.0.4", path = "crates/uv-pep508", features = ["non-pep508-extensions"] }
|
|
uv-platform = { version = "0.0.4", path = "crates/uv-platform" }
|
|
uv-platform-tags = { version = "0.0.4", path = "crates/uv-platform-tags" }
|
|
uv-preview = { version = "0.0.4", path = "crates/uv-preview" }
|
|
uv-publish = { version = "0.0.4", path = "crates/uv-publish" }
|
|
uv-pypi-types = { version = "0.0.4", path = "crates/uv-pypi-types" }
|
|
uv-python = { version = "0.0.4", path = "crates/uv-python" }
|
|
uv-redacted = { version = "0.0.4", path = "crates/uv-redacted" }
|
|
uv-requirements = { version = "0.0.4", path = "crates/uv-requirements" }
|
|
uv-requirements-txt = { version = "0.0.4", path = "crates/uv-requirements-txt" }
|
|
uv-resolver = { version = "0.0.4", path = "crates/uv-resolver" }
|
|
uv-scripts = { version = "0.0.4", path = "crates/uv-scripts" }
|
|
uv-settings = { version = "0.0.4", path = "crates/uv-settings" }
|
|
uv-shell = { version = "0.0.4", path = "crates/uv-shell" }
|
|
uv-small-str = { version = "0.0.4", path = "crates/uv-small-str" }
|
|
uv-state = { version = "0.0.4", path = "crates/uv-state" }
|
|
uv-static = { version = "0.0.4", path = "crates/uv-static" }
|
|
uv-tool = { version = "0.0.4", path = "crates/uv-tool" }
|
|
uv-torch = { version = "0.0.4", path = "crates/uv-torch" }
|
|
uv-trampoline-builder = { version = "0.0.4", path = "crates/uv-trampoline-builder" }
|
|
uv-types = { version = "0.0.4", path = "crates/uv-types" }
|
|
uv-version = { version = "0.9.14", path = "crates/uv-version" }
|
|
uv-virtualenv = { version = "0.0.4", path = "crates/uv-virtualenv" }
|
|
uv-warnings = { version = "0.0.4", path = "crates/uv-warnings" }
|
|
uv-workspace = { version = "0.0.4", path = "crates/uv-workspace" }
|
|
|
|
ambient-id = { version = "0.0.6", default-features = false, features = ["astral-reqwest-middleware"] }
|
|
anstream = { version = "0.6.15" }
|
|
anyhow = { version = "1.0.89" }
|
|
arcstr = { version = "1.2.0" }
|
|
arrayvec = { version = "0.7.6" }
|
|
astral-tokio-tar = { version = "0.5.6" }
|
|
async-channel = { version = "2.3.1" }
|
|
async-compression = { version = "0.4.12", features = ["bzip2", "gzip", "xz", "zstd"] }
|
|
async-trait = { version = "0.1.82" }
|
|
async_http_range_reader = { version = "0.9.1", package = "astral_async_http_range_reader" }
|
|
async_zip = { version = "0.0.17", package = "astral_async_zip", features = ["bzip2", "deflate", "lzma", "tokio", "xz", "zstd"] }
|
|
axoupdater = { version = "0.9.0", default-features = false }
|
|
backon = { version = "1.3.0" }
|
|
base64 = { version = "0.22.1" }
|
|
bitflags = { version = "2.6.0" }
|
|
blake2 = { version = "0.10.6" }
|
|
boxcar = { version = "0.2.5" }
|
|
bytecheck = { version = "0.8.0" }
|
|
cargo-util = { version = "0.2.14" }
|
|
clap = { version = "4.5.17", features = ["derive", "env", "string", "wrap_help"] }
|
|
clap_complete_command = { version = "0.6.1" }
|
|
configparser = { version = "3.1.0" }
|
|
console = { version = "0.16.0", default-features = false, features = ["std"] }
|
|
csv = { version = "1.3.0" }
|
|
ctrlc = { version = "3.4.5" }
|
|
cyclonedx-bom = { version = "0.8.0" }
|
|
dashmap = { version = "6.1.0" }
|
|
data-encoding = { version = "2.6.0" }
|
|
dotenvy = { version = "0.15.7" }
|
|
dunce = { version = "1.0.5" }
|
|
either = { version = "1.13.0" }
|
|
encoding_rs_io = { version = "0.1.7" }
|
|
embed-manifest = { version = "1.5.0" }
|
|
etcetera = { version = "0.11.0" }
|
|
fastrand = { version = "2.3.0" }
|
|
flate2 = { version = "1.0.33", default-features = false, features = ["zlib-rs"] }
|
|
fs-err = { version = "3.0.0", features = ["tokio"] }
|
|
futures = { version = "0.3.30" }
|
|
glob = { version = "0.3.1" }
|
|
globset = { version = "0.4.15" }
|
|
globwalk = { version = "0.9.1" }
|
|
goblin = { version = "0.10.0", default-features = false, features = ["std", "elf32", "elf64", "endian_fd"] }
|
|
h2 = { version = "0.4.7" }
|
|
hashbrown = { version = "0.16.0" }
|
|
hex = { version = "0.4.3" }
|
|
html-escape = { version = "0.2.13" }
|
|
http = { version = "1.1.0" }
|
|
indexmap = { version = "2.5.0" }
|
|
indicatif = { version = "0.18.0" }
|
|
indoc = { version = "2.0.5" }
|
|
itertools = { version = "0.14.0" }
|
|
jiff = { version = "0.2.0", features = ["serde"] }
|
|
junction = { version = "1.2.0" }
|
|
mailparse = { version = "0.16.0" }
|
|
md-5 = { version = "0.10.6" }
|
|
memchr = { version = "2.7.4" }
|
|
miette = { version = "7.2.0", features = ["fancy-no-backtrace"] }
|
|
nanoid = { version = "0.4.0" }
|
|
nix = { version = "0.30.0", features = ["signal"] }
|
|
open = { version = "5.3.2" }
|
|
owo-colors = { version = "4.1.0" }
|
|
path-slash = { version = "0.2.1" }
|
|
pathdiff = { version = "0.2.1" }
|
|
percent-encoding = { version = "2.3.1" }
|
|
petgraph = { version = "0.8.0" }
|
|
proc-macro2 = { version = "1.0.86" }
|
|
procfs = { version = "0.17.0", default-features = false, features = ["flate2"] }
|
|
pubgrub = { version = "0.3.3" , package = "astral-pubgrub" }
|
|
quote = { version = "1.0.37" }
|
|
rayon = { version = "1.10.0" }
|
|
ref-cast = { version = "1.0.24" }
|
|
reflink-copy = { version = "0.1.19" }
|
|
regex = { version = "1.10.6" }
|
|
regex-automata = { version = "0.4.8", default-features = false, features = ["dfa-build", "dfa-search", "perf", "std", "syntax"] }
|
|
reqsign = { version = "0.18.0", features = ["aws", "default-context"], default-features = false }
|
|
reqwest = { version = "0.12.22", default-features = false, features = ["json", "gzip", "deflate", "zstd", "stream", "system-proxy", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] }
|
|
reqwest-middleware = { version = "0.4.2", package = "astral-reqwest-middleware", features = ["multipart"] }
|
|
reqwest-retry = { version = "0.7.0", package = "astral-reqwest-retry" }
|
|
rkyv = { version = "0.8.8", features = ["bytecheck"] }
|
|
rmp-serde = { version = "1.3.0" }
|
|
rust-netrc = { version = "0.1.2" }
|
|
rustc-hash = { version = "2.0.0" }
|
|
rustix = { version = "1.0.0", default-features = false, features = ["fs", "std"] }
|
|
same-file = { version = "1.0.6" }
|
|
schemars = { version = "1.0.0", features = ["url2"] }
|
|
seahash = { version = "4.1.0" }
|
|
secret-service = { version = "5.0.0", features = ["rt-tokio-crypto-rust"] }
|
|
security-framework = { version = "3" }
|
|
self-replace = { version = "1.5.0" }
|
|
serde = { version = "1.0.210", features = ["derive", "rc"] }
|
|
serde-untagged = { version = "0.1.6" }
|
|
serde_json = { version = "1.0.128" }
|
|
sha2 = { version = "0.10.8" }
|
|
smallvec = { version = "1.13.2" }
|
|
spdx = { version = "0.12.0" }
|
|
syn = { version = "2.0.77" }
|
|
sys-info = { version = "0.9.1" }
|
|
tar = { version = "0.4.43" }
|
|
target-lexicon = { version = "0.13.0" }
|
|
tempfile = { version = "3.14.0" }
|
|
textwrap = { version = "0.16.1" }
|
|
thiserror = { version = "2.0.0" }
|
|
astral-tl = { version = "0.7.10" }
|
|
tokio = { version = "1.40.0", features = ["fs", "io-util", "macros", "process", "rt", "signal", "sync"] }
|
|
tokio-stream = { version = "0.1.16" }
|
|
tokio-util = { version = "0.7.12", features = ["compat", "io"] }
|
|
toml = { version = "0.9.2", features = ["fast_hash"] }
|
|
toml_edit = { version = "0.23.2", features = ["serde"] }
|
|
tracing = { version = "0.1.40" }
|
|
tracing-durations-export = { version = "0.3.0", features = ["plot"] }
|
|
tracing-subscriber = { version = "0.3.18" } # Default feature set for uv_build, uv activates extra features
|
|
tracing-test = { version = "0.2.5" }
|
|
tracing-tree = { version = "0.4.0" }
|
|
unicode-width = { version = "0.2.0" }
|
|
unscanny = { version = "0.1.0" }
|
|
url = { version = "2.5.2", features = ["serde"] }
|
|
uuid = { version = "1.16.0" }
|
|
version-ranges = { version = "0.1.3", package = "astral-version-ranges" }
|
|
walkdir = { version = "2.5.0" }
|
|
which = { version = "8.0.0", features = ["regex"] }
|
|
windows = { version = "0.59.0", features = ["std", "Win32_Globalization", "Win32_System_LibraryLoader", "Win32_System_Console", "Win32_System_Kernel", "Win32_System_Diagnostics_Debug", "Win32_Storage_FileSystem", "Win32_Security", "Win32_System_Registry", "Win32_System_IO", "Win32_System_Ioctl"] }
|
|
windows-registry = { version = "0.5.0" }
|
|
wiremock = { version = "0.6.4" }
|
|
wmi = { version = "0.16.0", default-features = false }
|
|
xz2 = { version = "0.1.7" }
|
|
zeroize = { version = "1.8.1" }
|
|
zip = { version = "2.2.3", default-features = false, features = ["deflate", "zstd", "bzip2", "lzma", "xz"] }
|
|
zstd = { version = "0.13.3" }
|
|
|
|
# dev-dependencies
|
|
assert_cmd = { version = "2.0.16" }
|
|
assert_fs = { version = "1.1.2" }
|
|
byteorder = { version = "1.5.0" }
|
|
filetime = { version = "0.2.25" }
|
|
http-body-util = { version = "0.1.2" }
|
|
hyper = { version = "1.4.1", features = ["server", "http1"] }
|
|
hyper-util = { version = "0.1.8", features = ["tokio", "server", "http1"] }
|
|
ignore = { version = "0.4.23" }
|
|
insta = { version = "1.40.0", features = ["json", "filters", "redactions"] }
|
|
predicates = { version = "3.1.2" }
|
|
rcgen = { version = "0.14.5", features = ["crypto", "pem", "ring"], default-features = false }
|
|
rustls = { version = "0.23.29", default-features = false }
|
|
similar = { version = "2.6.0" }
|
|
temp-env = { version = "0.3.6" }
|
|
test-case = { version = "3.3.1" }
|
|
test-log = { version = "0.2.16", features = ["trace"], default-features = false }
|
|
tokio-rustls = { version = "0.26.2", default-features = false }
|
|
whoami = { version = "1.6.0" }
|
|
|
|
[workspace.metadata.cargo-shear]
|
|
ignored = ["flate2", "xz2", "h2", "uv-performance-memory-allocator"]
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "warn"
|
|
unreachable_pub = "warn"
|
|
|
|
[workspace.lints.clippy]
|
|
pedantic = { level = "warn", priority = -2 }
|
|
# Allowed pedantic lints
|
|
char_lit_as_u8 = "allow"
|
|
collapsible_else_if = "allow"
|
|
collapsible_if = "allow"
|
|
implicit_hasher = "allow"
|
|
map_unwrap_or = "allow"
|
|
match_same_arms = "allow"
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
module_name_repetitions = "allow"
|
|
must_use_candidate = "allow"
|
|
similar_names = "allow"
|
|
struct_excessive_bools = "allow"
|
|
too_many_arguments = "allow"
|
|
too_many_lines = "allow"
|
|
used_underscore_binding = "allow"
|
|
# Disallowed restriction lints
|
|
print_stdout = "warn"
|
|
print_stderr = "warn"
|
|
dbg_macro = "warn"
|
|
empty_drop = "warn"
|
|
empty_structs_with_brackets = "warn"
|
|
exit = "warn"
|
|
get_unwrap = "warn"
|
|
rc_buffer = "warn"
|
|
rc_mutex = "warn"
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
if_not_else = "allow"
|
|
use_self = "warn"
|
|
|
|
# Diagnostics are not actionable: Enable once https://github.com/rust-lang/rust-clippy/issues/13774 is resolved.
|
|
large_stack_arrays = "allow"
|
|
|
|
[profile.release]
|
|
strip = true
|
|
lto = "fat"
|
|
|
|
# This profile is meant to mimic the `release` profile as closely as
|
|
# possible, but using settings that are more beneficial for iterative
|
|
# development. That is, the `release` profile is intended for actually
|
|
# building the release, where as `profiling` is meant for building `uv`
|
|
# for running benchmarks.
|
|
#
|
|
# The main differences here are to avoid stripping debug information
|
|
# and disabling lto. This does result in a mismatch between our release
|
|
# configuration and our benchmarking configuration, which is unfortunate.
|
|
# But compile times with `lto = true` are completely untenable:
|
|
#
|
|
# $ cargo b --profile profiling -p uv
|
|
# Compiling uv-cli v0.0.1 (/home/andrew/astral/uv/crates/uv-cli)
|
|
# Compiling uv v0.2.34 (/home/andrew/astral/uv/crates/uv)
|
|
# Finished `profiling` profile [optimized + debuginfo] target(s) in 3m 47s
|
|
#
|
|
# Using `lto = "thin"` brings a massive improvement, but it's still slow:
|
|
#
|
|
# $ cargo b --profile profiling -p uv
|
|
# Compiling uv v0.2.34 (/home/andrew/astral/uv/crates/uv)
|
|
# Finished `profiling` profile [optimized + debuginfo] target(s) in 53.98s
|
|
#
|
|
# But with `lto = false`:
|
|
#
|
|
# $ cargo b --profile profiling -p uv
|
|
# Compiling uv v0.2.34 (/home/andrew/astral/uv/crates/uv)
|
|
# Finished `profiling` profile [optimized + debuginfo] target(s) in 30.09s
|
|
#
|
|
# We get more reasonable-ish compile times. At least, it's not enough
|
|
# time to get up and get a cup of coffee before it completes.
|
|
#
|
|
# This setup does risk that we are measuring something in benchmarks
|
|
# that we are shipping, but in order to make those two the same, we'd
|
|
# either need to make compile times way worse for development, or take
|
|
# a hit to binary size and a slight hit to runtime performance in our
|
|
# release builds.
|
|
[profile.profiling]
|
|
inherits = "release"
|
|
strip = false
|
|
debug = "full"
|
|
lto = false
|
|
|
|
[profile.fast-build]
|
|
inherits = "dev"
|
|
opt-level = 1
|
|
debug = 0
|
|
strip = "debuginfo"
|
|
|
|
# Profile to build a minimally sized binary for uv-build
|
|
[profile.minimal-size]
|
|
inherits = "release"
|
|
opt-level = "z"
|
|
# This will still show a panic message, we only skip the unwind
|
|
panic = "abort"
|
|
codegen-units = 1
|
|
|
|
# The profile that 'cargo dist' will build with.
|
|
[profile.dist]
|
|
inherits = "release"
|