Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

ruff is currently built from source in the nix flake, slowing down dev environment creation and requiring a moving rust version #15939

Open
@anoadragon453

Description

@anoadragon453

We have a flake.nix file which can be used to create a full development environment for Synapse, including python and native dependencies and things like postgres and redis.

The development environment will automatically keep its python environment up to date with poetry using the versions defined in pyproject.yaml. One of those python package is ruff, which we use as a linter.

ruff ships a rust binary, which is dynamically linked against either glibc or musl. As such, ruff expects glibc or muslc headers to exist at a certain location on your Linux box. Due to the way NixOS works, these do not exist under the expected path, causing any ruff binaries we download from PyPI to fail to execute.

Thus, we have the following workaround in flake.nix, which forces ruff to be compiled on the local system:

synapse/flake.nix

Lines 115 to 122 in 20ae617

# This is a work-around for NixOS systems. NixOS is special in
# that you can have multiple versions of packages installed at
# once, including your libc linker!
#
# Some binaries built for Linux expect those to be in a certain
# filepath, but that is not the case on NixOS. In that case, we
# force compiling those binaries locally instead.
env.POETRY_INSTALLER_NO_BINARY = "ruff";

This works, but is slow (as you need to compile a rust binary) and forces the development environment to maintain a rust version which is high enough to compile ruff (which unfortunately is almost always the latest stable. I found today that while we only require rust 1.60.0 in Synapse, the version of ruff we have specified in our pyproject.toml requires rust 1.70.0.

The ideal solution here is for ruff to provide statically linked binaries to download. This has been discussed in astral-sh/ruff#1699, and they are up for it if it does not compromise performance (or alternatively they could provide a ruff-static PyPI package.

Until then, we can't do much on this side.

Metadata

Metadata

Assignees

No one assigned

    Labels

    O-UncommonMost users are unlikely to come across this or unexpected workflowT-OtherQuestions, user support, anything else.Z-Dev-WishlistMakes developers' lives better, but doesn't have direct user impactZ-Upstream-BugThis issue requires a fix in an upstream dependency.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions