add buildbot extension for autoscaling nix builders

This commit is contained in:
Abel Luck 2026-02-27 12:17:36 +01:00
parent ea12318b88
commit d1976a5fd8
13 changed files with 2300 additions and 8 deletions

114
flake.nix
View file

@ -38,8 +38,16 @@
systems = [ "x86_64-linux" ];
forAllSystems = fn: nixpkgs.lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system});
workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./agent; };
overlay = workspace.mkPyprojectOverlay { sourcePreference = "wheel"; };
agentWorkspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./agent; };
agentOverlay = agentWorkspace.mkPyprojectOverlay { sourcePreference = "wheel"; };
buildbotExtWorkspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./buildbot-ext; };
buildbotExtOverlay = buildbotExtWorkspace.mkPyprojectOverlay { sourcePreference = "wheel"; };
pyprojectOverrides = final: prev: {
py-ubjson = prev.py-ubjson.overrideAttrs (old: {
nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ final.setuptools ];
});
};
in
{
formatter = forAllSystems (
@ -49,20 +57,34 @@
packages = forAllSystems (
pkgs:
let
pythonSet =
agentPythonSet =
(pkgs.callPackage pyproject-nix.build.packages {
python = pkgs.python312;
}).overrideScope
(
pkgs.lib.composeManyExtensions [
pyproject-build-systems.overlays.default
overlay
agentOverlay
pyprojectOverrides
]
);
venv = pythonSet.mkVirtualEnv "nix-builder-autoscaler-env" workspace.deps.default;
buildbotExtPythonSet =
(pkgs.callPackage pyproject-nix.build.packages {
python = pkgs.python312;
}).overrideScope
(
pkgs.lib.composeManyExtensions [
pyproject-build-systems.overlays.default
buildbotExtOverlay
pyprojectOverrides
]
);
venv = agentPythonSet.mkVirtualEnv "nix-builder-autoscaler-env" agentWorkspace.deps.default;
buildbotExtVenv = buildbotExtPythonSet.mkVirtualEnv "buildbot-autoscale-ext-env" buildbotExtWorkspace.deps.default;
in
{
nix-builder-autoscaler = venv;
buildbot-autoscale-ext = buildbotExtVenv;
default = venv;
}
);
@ -94,20 +116,36 @@
checks = forAllSystems (
pkgs:
let
pythonSet =
agentPythonSet =
(pkgs.callPackage pyproject-nix.build.packages {
python = pkgs.python312;
}).overrideScope
(
pkgs.lib.composeManyExtensions [
pyproject-build-systems.overlays.default
overlay
agentOverlay
pyprojectOverrides
]
);
testVenv = pythonSet.mkVirtualEnv "nix-builder-autoscaler-test-env" {
buildbotExtPythonSet =
(pkgs.callPackage pyproject-nix.build.packages {
python = pkgs.python312;
}).overrideScope
(
pkgs.lib.composeManyExtensions [
pyproject-build-systems.overlays.default
buildbotExtOverlay
pyprojectOverrides
]
);
testVenv = agentPythonSet.mkVirtualEnv "nix-builder-autoscaler-test-env" {
nix-builder-autoscaler = [ "dev" ];
};
buildbotExtTestVenv = buildbotExtPythonSet.mkVirtualEnv "buildbot-autoscale-ext-test-env" {
buildbot-autoscale-ext = [ "dev" ];
};
src = ./agent;
buildbotExtSrc = ./buildbot-ext;
in
{
devShell = self.devShells.${pkgs.stdenv.hostPlatform.system}.default;
@ -191,6 +229,66 @@
touch $out/passed
'';
};
buildbot-autoscale-ext-tests = pkgs.stdenv.mkDerivation {
name = "buildbot-autoscale-ext-tests";
src = buildbotExtSrc;
dontConfigure = true;
dontBuild = true;
nativeBuildInputs = [ buildbotExtTestVenv ];
checkPhase = ''
runHook preCheck
export HOME=$(mktemp -d)
pytest buildbot_autoscale_ext/tests/ -v
runHook postCheck
'';
doCheck = true;
installPhase = ''
mkdir -p $out
touch $out/passed
'';
};
buildbot-autoscale-ext-ruff = pkgs.stdenv.mkDerivation {
name = "buildbot-autoscale-ext-ruff";
src = buildbotExtSrc;
dontConfigure = true;
dontBuild = true;
nativeBuildInputs = [ buildbotExtTestVenv ];
checkPhase = ''
runHook preCheck
ruff check buildbot_autoscale_ext/
ruff format --check buildbot_autoscale_ext/
runHook postCheck
'';
doCheck = true;
installPhase = ''
mkdir -p $out
touch $out/passed
'';
};
buildbot-autoscale-ext-pyright = pkgs.stdenv.mkDerivation {
name = "buildbot-autoscale-ext-pyright";
src = buildbotExtSrc;
dontConfigure = true;
dontBuild = true;
nativeBuildInputs = [
buildbotExtTestVenv
pkgs.nodejs
];
checkPhase = ''
runHook preCheck
export HOME=$(mktemp -d)
pyright buildbot_autoscale_ext/
runHook postCheck
'';
doCheck = true;
installPhase = ''
mkdir -p $out
touch $out/passed
'';
};
}
);