python3Packages.ruff: reuse already built ruff binary (#412112)

This commit is contained in:
Gaétan Lepage 2025-05-31 00:18:56 +02:00 committed by GitHub
commit f00c0c85f3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,8 +1,8 @@
{
buildPythonPackage,
hatchling,
lib,
ruff,
rustPlatform,
installShellFiles,
}:
buildPythonPackage {
@ -10,26 +10,38 @@ buildPythonPackage {
pname
version
src
cargoDeps
postInstall
meta
;
# Do not rely on path lookup at runtime to find the ruff binary
postPatch = ''
substituteInPlace python/ruff/__main__.py \
--replace-fail \
'ruff_exe = "ruff" + sysconfig.get_config_var("EXE")' \
'return "${placeholder "out"}/bin/ruff"'
'';
pyproject = true;
nativeBuildInputs = [
installShellFiles
rustPlatform.cargoSetupHook
rustPlatform.maturinBuildHook
];
build-system = [ hatchling ];
postPatch =
# Do not rely on path lookup at runtime to find the ruff binary.
# Use the propagated binary instead.
''
substituteInPlace python/ruff/__main__.py \
--replace-fail \
'ruff_exe = "ruff" + sysconfig.get_config_var("EXE")' \
'return "${lib.getExe ruff}"'
''
# Sidestep the maturin build system in favour of reusing the binary already built by nixpkgs,
# to avoid rebuilding the ruff binary for every active python package set.
+ ''
substituteInPlace pyproject.toml \
--replace-fail 'requires = ["maturin>=1.0,<2.0"]' 'requires = ["hatchling"]' \
--replace-fail 'build-backend = "maturin"' 'build-backend = "hatchling.build"'
cat >> pyproject.toml <<EOF
[tool.hatch.build]
packages = ['python/ruff']
EOF
'';
postInstall = ''
mkdir -p $out/bin && ln -s ${lib.getExe ruff} $out/bin/ruff
'';
pythonImportsCheck = [ "ruff" ];
}