1{ lib
2, buildPythonPackage
3, click
4, colorama
5, configparser
6, distro
7, fetchFromGitHub
8, fetchpatch
9, gevent
10, jinja2
11, paramiko
12, pytestCheckHook
13, python-dateutil
14, pythonOlder
15, pywinrm
16, pyyaml
17, setuptools
18}:
19
20buildPythonPackage rec {
21 pname = "pyinfra";
22 version = "2.8";
23 format = "setuptools";
24
25 disabled = pythonOlder "3.7";
26
27 src = fetchFromGitHub {
28 owner = "Fizzadar";
29 repo = pname;
30 rev = "refs/tags/v${version}";
31 hash = "sha256-BYd2UYQJD/HsmpnlQjZvjfg17ShPuA3j4rtv6fTQK/A=";
32 };
33
34 patches = [
35 # https://github.com/Fizzadar/pyinfra/pull/1018
36 (fetchpatch {
37 name = "bump-paramiko-major-version.patch";
38 url = "https://github.com/Fizzadar/pyinfra/commit/62a8f081279779c4f1eed246139f615cf5fed642.patch";
39 hash = "sha256-aT9SeSqXOD76LFzf6R/MWTtavcW6fZT7chkVg9aXiBg=";
40 })
41 ];
42
43 propagatedBuildInputs = [
44 click
45 colorama
46 configparser
47 distro
48 gevent
49 jinja2
50 paramiko
51 python-dateutil
52 pywinrm
53 pyyaml
54 setuptools
55 ];
56
57 nativeCheckInputs = [
58 pytestCheckHook
59 ];
60
61 pythonImportsCheck = [
62 "pyinfra"
63 ];
64
65 disabledTests = [
66 # Test requires SSH binary
67 "test_load_ssh_config"
68 ];
69
70 meta = with lib; {
71 description = "Python-based infrastructure automation";
72 longDescription = ''
73 pyinfra automates/provisions/manages/deploys infrastructure. It can be used for
74 ad-hoc command execution, service deployment, configuration management and more.
75 '';
76 homepage = "https://pyinfra.com";
77 downloadPage = "https://pyinfra.com/Fizzadar/pyinfra/releases";
78 changelog = "https://github.com/Fizzadar/pyinfra/blob/v${version}/CHANGELOG.md";
79 maintainers = with maintainers; [ totoroot ];
80 license = licenses.mit;
81 };
82}