From 50c201f1aa8488527cbbaadedcd3a49ca832b064 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sun, 11 Jul 2021 01:15:40 +0200 Subject: [PATCH 1/2] platformio: fix build by pinning dependencies Pins the packages aiofiles, click and uvicorn. Also migrates the package to pytestCheckHook. --- pkgs/development/arduino/platformio/core.nix | 124 ++++++++++--------- 1 file changed, 67 insertions(+), 57 deletions(-) diff --git a/pkgs/development/arduino/platformio/core.nix b/pkgs/development/arduino/platformio/core.nix index ee8bbeabbfee..344835b831b3 100644 --- a/pkgs/development/arduino/platformio/core.nix +++ b/pkgs/development/arduino/platformio/core.nix @@ -1,30 +1,74 @@ -{ stdenv, lib, buildPythonApplication -, ajsonrpc -, bottle -, click -, click-completion -, colorama +{ stdenv, lib, python3 +, fetchFromGitHub , git -, jsondiff -, lockfile -, marshmallow -, pyelftools -, pyserial -, pytest -, requests -, semantic-version , spdx-license-list-data -, starlette -, tabulate -, tox -, uvicorn -, wsproto -, zeroconf , version, src }: let - args = lib.concatStringsSep " " ((map (e: "--deselect tests/${e}") [ + python = python3.override { + packageOverrides = self: super: { + aiofiles = super.aiofiles.overridePythonAttrs (oldAttrs: rec { + version = "0.6.0"; + src = oldAttrs.src.override { + inherit version; + sha256 = "e0281b157d3d5d59d803e3f4557dcc9a3dff28a4dd4829a9ff478adae50ca092"; + }; + }); + + click = super.click.overridePythonAttrs (oldAttrs: rec { + version = "7.1.2"; + src = oldAttrs.src.override { + inherit version; + sha256 = "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"; + }; + }); + + uvicorn = super.uvicorn.overridePythonAttrs (oldAttrs: rec { + version = "0.13.2"; + src = fetchFromGitHub { + owner = "encode"; + repo = "uvicorn"; + rev = version; + sha256 = "04zgmp9z46k72ay6cz7plga6d3w3a6x41anabm7ramp7jdqf6na9"; + }; + }); + }; + }; +in +with python.pkgs; buildPythonApplication rec { + pname = "platformio"; + inherit version src; + + propagatedBuildInputs = [ + ajsonrpc + bottle + click + click-completion + colorama + git + lockfile + marshmallow + pyelftools + pyserial + requests + semantic-version + starlette + tabulate + uvicorn + wsproto + zeroconf + ]; + + HOME = "/tmp"; + + checkInputs = [ + jsondiff + pytestCheckHook + tox + ]; + + pytestFlagsArray = (map (e: "--deselect tests/${e}") [ "commands/test_ci.py::test_ci_boards" "commands/test_ci.py::test_ci_build_dir" "commands/test_ci.py::test_ci_keep_build_dir" @@ -88,44 +132,10 @@ let "commands/test_update.py" "test_maintenance.py" "test_ino2cpp.py" - ])); - -in buildPythonApplication rec { - pname = "platformio"; - inherit version src; - - propagatedBuildInputs = [ - ajsonrpc - bottle - click - click-completion - colorama - git - lockfile - marshmallow - pyelftools - pyserial - requests - semantic-version - starlette - tabulate - uvicorn - wsproto - zeroconf + ]) ++ [ + "tests" ]; - HOME = "/tmp"; - - checkInputs = [ pytest tox jsondiff ]; - - checkPhase = '' - runHook preCheck - - py.test -v tests ${args} - - runHook postCheck - ''; - patches = [ ./fix-searchpath.patch ./use-local-spdx-license-list.patch From 4dbe056ea24da745afa3163dd859ea71ef0e6bc5 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sun, 11 Jul 2021 01:17:37 +0200 Subject: [PATCH 2/2] esphome: disable two failing tests esphome is still stuck on hypothesis 5.49 and tries to import things that are gone in 6.0 and later. Using a package override here would be costly as it would cause alot of rebuilds, as hypothesis is an integral part of e.g. pytest. --- pkgs/tools/misc/esphome/default.nix | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pkgs/tools/misc/esphome/default.nix b/pkgs/tools/misc/esphome/default.nix index 945af40a7171..37c37de83999 100644 --- a/pkgs/tools/misc/esphome/default.nix +++ b/pkgs/tools/misc/esphome/default.nix @@ -8,9 +8,13 @@ }: let - esphome-dashboard = pkgs.callPackage ./dashboard.nix {}; + python = python3.override { + packageOverrides = self: super: { + esphome-dashboard = pkgs.callPackage ./dashboard.nix {}; + }; + }; in -python3.pkgs.buildPythonApplication rec { +with python.pkgs; buildPythonApplication rec { pname = "esphome"; version = "1.19.4"; @@ -49,7 +53,7 @@ python3.pkgs.buildPythonApplication rec { # They have validation functions like: # - validate_cryptography_installed # - validate_pillow_installed - propagatedBuildInputs = with python3.pkgs; [ + propagatedBuildInputs = [ click colorama cryptography @@ -73,7 +77,7 @@ python3.pkgs.buildPythonApplication rec { "--set ESPHOME_USE_SUBPROCESS ''" ]; - checkInputs = with python3.pkgs; [ + checkInputs = [ hypothesis mock pytest-asyncio @@ -82,6 +86,13 @@ python3.pkgs.buildPythonApplication rec { pytestCheckHook ]; + disabledTestPaths = [ + # requires hypothesis 5.49, we have 6.x + # ImportError: cannot import name 'ip_addresses' from 'hypothesis.provisional' + "tests/unit_tests/test_core.py" + "tests/unit_tests/test_helpers.py" + ]; + postCheck = '' $out/bin/esphome --help > /dev/null '';