diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 52350d3ea..393c1df15 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,10 +17,6 @@ variables: # Apply timeout to pytest-based tests PYTEST_TIMEOUT: "300" - # Pipenv cache - PIPENV_VENV_IN_PROJECT: "true" - PIPENV_CACHE_DIR: ".cache/" - # No need for TLS because everything runs on the same machine DOCKER_TLS_CERTDIR: "" stages: @@ -33,7 +29,7 @@ stages: before_script: - . $HOME/.nix-profile/etc/profile.d/nix.sh || true - - nix-shell --run "pipenv sync" + - nix-shell --run "poetry install" - export LEGACY_VERSION=$(nix-shell --run "./tools/version.sh legacy/firmware/version.h") - export CORE_VERSION=$(nix-shell --run "./tools/version.sh core/embed/firmware/version.h") diff --git a/.travis.yml b/.travis.yml index cff75e1b8..118b76630 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,17 +22,17 @@ env: install: - pip install --upgrade pip wheel setuptools - - pip install pipenv - - pipenv sync - # make sure pipenv is installable without protobuf - install protoc later + - pip install poetry + - poetry install + # make sure poetry is installable without protobuf - install protoc later - curl -LO "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" - unzip "protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" -d protoc - export PATH="$(pwd)/protoc/bin:$PATH" script: - - pipenv run make style_check - - pipenv run make defs_check - - pipenv run make gen_check + - poetry run make style_check + - poetry run make defs_check + - poetry run make gen_check - ci/check_fixup.sh notifications: diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 5f849d993..000000000 --- a/Pipfile +++ /dev/null @@ -1,77 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -name = "pypi" -verify_ssl = true - -[packages] -# all -trezor = {editable = true,path = "./python"} -scons = "*" -protobuf = "*" -pyblake2 = "*" -Pyro4 = "*" -nanopb = "==0.4.3" -virtualenv = "==20.0.23" # https://github.com/pypa/virtualenv/issues/1873 - -## test tools -pytest = "*" -mock = "*" -coverage = "<5" # coverage 5+ uses binary sqlite format -flaky = ">=3.6.1" # https://github.com/box/flaky/issues/156 -pytest-ordering = "*" -pytest-random-order = "*" -pytest-timeout = "*" -tox = "*" -dominate = "*" -flake8-requirements = ">=1.3.2" - -# hardware tests -pyserial = "*" - -## test requirements -shamir-mnemonic = "*" -fido2 = ">=0.8.0" - -## typing -mypy = "*" -typing-extensions = ">=3.7.4" - -## style -isort = "<5" # 5 changes lots of stuff that need to be addressed first: https://timothycrosley.github.io/isort/docs/upgrade_guides/5.0.0/ -flake8 = ">=3.7.0" -black = "*" -mako = ">=1.0.7" -munch = ">=2.3.2" -autoflake = "*" - -# common -demjson = "*" -graphviz = "*" - -## cointool -click = ">=6" -ed25519 = ">=1.4" -requests = ">=2.19" -termcolor = ">=0.1.2" -Pillow = ">=5.2.0" - -# crypto -ecdsa = ">=0.13.3" -curve25519-donna = "*" -pyasn1 = "*" - -# legacy -setuptools = ">=24.2.0" -typing = "*" - -# storage -cryptography = "*" -hypothesis = "*" -attrs = "*" -inotify = "*" - -[dev-packages] -scan-build = "*" - -[pipenv] -allow_prereleases = true diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index f15a7c93a..000000000 --- a/Pipfile.lock +++ /dev/null @@ -1,824 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "9cc4c6e7ef24ed10b223c63551933794ca37d1a40c0327f52506552af506e9c5" - }, - "pipfile-spec": 6, - "requires": {}, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "appdirs": { - "hashes": [ - "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", - "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128" - ], - "version": "==1.4.4" - }, - "attrs": { - "hashes": [ - "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594", - "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc" - ], - "index": "pypi", - "version": "==20.2.0" - }, - "autoflake": { - "hashes": [ - "sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea" - ], - "index": "pypi", - "version": "==1.4" - }, - "black": { - "hashes": [ - "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea" - ], - "index": "pypi", - "version": "==20.8b1" - }, - "certifi": { - "hashes": [ - "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3", - "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41" - ], - "version": "==2020.6.20" - }, - "cffi": { - "hashes": [ - "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d", - "sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b", - "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4", - "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f", - "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3", - "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579", - "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537", - "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e", - "sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05", - "sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171", - "sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca", - "sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522", - "sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c", - "sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc", - "sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d", - "sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808", - "sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828", - "sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869", - "sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d", - "sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9", - "sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0", - "sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc", - "sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15", - "sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c", - "sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a", - "sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3", - "sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1", - "sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768", - "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d", - "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b", - "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e", - "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d", - "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730", - "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394", - "sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1", - "sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591" - ], - "version": "==1.14.3" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "click": { - "hashes": [ - "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", - "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" - ], - "index": "pypi", - "version": "==7.1.2" - }, - "colorama": { - "hashes": [ - "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff", - "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.4.3" - }, - "construct": { - "hashes": [ - "sha256:97ba13edcd98546f10f7555af41c8ce7ae9d8221525ec4062c03f9adbf940661" - ], - "markers": "python_version >= '3.6'", - "version": "==2.10.56" - }, - "coverage": { - "hashes": [ - "sha256:08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6", - "sha256:0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650", - "sha256:141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5", - "sha256:19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d", - "sha256:23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351", - "sha256:245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755", - "sha256:331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef", - "sha256:386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca", - "sha256:3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca", - "sha256:60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9", - "sha256:63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc", - "sha256:6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5", - "sha256:6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f", - "sha256:7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe", - "sha256:826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888", - "sha256:93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5", - "sha256:9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce", - "sha256:af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5", - "sha256:bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e", - "sha256:bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e", - "sha256:c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9", - "sha256:dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437", - "sha256:df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1", - "sha256:e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c", - "sha256:e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24", - "sha256:e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47", - "sha256:eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2", - "sha256:eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28", - "sha256:ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c", - "sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7", - "sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0", - "sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025" - ], - "index": "pypi", - "version": "==4.5.4" - }, - "cryptography": { - "hashes": [ - "sha256:21b47c59fcb1c36f1113f3709d37935368e34815ea1d7073862e92f810dc7499", - "sha256:451cdf60be4dafb6a3b78802006a020e6cd709c22d240f94f7a0696240a17154", - "sha256:4549b137d8cbe3c2eadfa56c0c858b78acbeff956bd461e40000b2164d9167c6", - "sha256:48ee615a779ffa749d7d50c291761dc921d93d7cf203dca2db663b4f193f0e49", - "sha256:559d622aef2a2dff98a892eef321433ba5bc55b2485220a8ca289c1ecc2bd54f", - "sha256:5d52c72449bb02dd45a773a203196e6d4fae34e158769c896012401f33064396", - "sha256:65beb15e7f9c16e15934569d29fb4def74ea1469d8781f6b3507ab896d6d8719", - "sha256:680da076cad81cdf5ffcac50c477b6790be81768d30f9da9e01960c4b18a66db", - "sha256:762bc5a0df03c51ee3f09c621e1cee64e3a079a2b5020de82f1613873d79ee70", - "sha256:89aceb31cd5f9fc2449fe8cf3810797ca52b65f1489002d58fe190bfb265c536", - "sha256:983c0c3de4cb9fcba68fd3f45ed846eb86a2a8b8d8bc5bb18364c4d00b3c61fe", - "sha256:99d4984aabd4c7182050bca76176ce2dbc9fa9748afe583a7865c12954d714ba", - "sha256:9d9fc6a16357965d282dd4ab6531013935425d0dc4950df2e0cf2a1b1ac1017d", - "sha256:a7597ffc67987b37b12e09c029bd1dc43965f75d328076ae85721b84046e9ca7", - "sha256:ab010e461bb6b444eaf7f8c813bb716be2d78ab786103f9608ffd37a4bd7d490", - "sha256:b12e715c10a13ca1bd27fbceed9adc8c5ff640f8e1f7ea76416352de703523c8", - "sha256:b2bded09c578d19e08bd2c5bb8fed7f103e089752c9cf7ca7ca7de522326e921", - "sha256:b372026ebf32fe2523159f27d9f0e9f485092e43b00a5adacf732192a70ba118", - "sha256:cb179acdd4ae1e4a5a160d80b87841b3d0e0be84af46c7bb2cd7ece57a39c4ba", - "sha256:e97a3b627e3cb63c415a16245d6cef2139cca18bb1183d1b9375a1c14e83f3b3", - "sha256:f0e099fc4cc697450c3dd4031791559692dd941a95254cb9aeded66a7aa8b9bc", - "sha256:f99317a0fa2e49917689b8cf977510addcfaaab769b3f899b9c481bbd76730c2" - ], - "index": "pypi", - "version": "==3.1.1" - }, - "curve25519-donna": { - "hashes": [ - "sha256:1818a9d5356a05c022cd504f44fe1d2f641a5c020f8a4c51b2294e02bd9c1bf0" - ], - "index": "pypi", - "version": "==1.3" - }, - "demjson": { - "hashes": [ - "sha256:31de2038a0fdd9c4c11f8bf3b13fe77bc2a128307f965c8d5fb4dc6d6f6beb79" - ], - "index": "pypi", - "version": "==2.2.4" - }, - "distlib": { - "hashes": [ - "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb", - "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1" - ], - "version": "==0.3.1" - }, - "dominate": { - "hashes": [ - "sha256:456facce7a7ccfd9363948109cf1e978d48c58e46a46b01c71b4c0adc73b1928", - "sha256:60d9035567067574914febbf2cb50bd6eee09b8636a2b98c79e67c15c06cb7cf" - ], - "index": "pypi", - "version": "==2.5.2" - }, - "ecdsa": { - "hashes": [ - "sha256:494c6a853e9ed2e9be33d160b41d47afc50a6629b993d2b9c5ad7bb226add892", - "sha256:ca359c971594dceebf334f3d623dae43163ab161c7d09f28cae70a86df26eb7a" - ], - "index": "pypi", - "version": "==0.16.0" - }, - "ed25519": { - "hashes": [ - "sha256:02053ee019ceef0df97294be2d4d5a8fc120fc86e81e08bec1245fc0f9403358" - ], - "index": "pypi", - "version": "==1.5" - }, - "fido2": { - "hashes": [ - "sha256:449068f6876f397c8bb96ebc6a75c81c2692f045126d3f13ece21d409acdf7c3" - ], - "index": "pypi", - "version": "==0.8.1" - }, - "filelock": { - "hashes": [ - "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", - "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" - ], - "version": "==3.0.12" - }, - "flake8": { - "hashes": [ - "sha256:15e351d19611c887e482fb960eae4d44845013cc142d42896e9862f775d8cf5c", - "sha256:f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208" - ], - "index": "pypi", - "version": "==3.8.3" - }, - "flake8-requirements": { - "hashes": [ - "sha256:375066874d658098365cc49cb35d13cedc0543bba33c0167601fd9170946ce10" - ], - "index": "pypi", - "version": "==1.3.2" - }, - "flaky": { - "hashes": [ - "sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d", - "sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c" - ], - "index": "pypi", - "version": "==3.7.0" - }, - "graphviz": { - "hashes": [ - "sha256:088562ef6e3dad5e8dde9389caf4a84f768e65dcaa08238cfcdf36d2b30ccf61", - "sha256:f5aad52a652c06825dcc5ee018d920fca26aef339386866094597fb3f2f222ce" - ], - "index": "pypi", - "version": "==0.14.1" - }, - "hypothesis": { - "hashes": [ - "sha256:a473b8428d13a695129e94bf17c43fa6c8a75449ef9121edb32b5ccaf862f16b", - "sha256:ce97675bb09d3ee843421e030d31dc9613145faee91c3fa7879bdb15af0acbd3" - ], - "index": "pypi", - "version": "==5.36.0" - }, - "idna": { - "hashes": [ - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.10" - }, - "iniconfig": { - "hashes": [ - "sha256:80cf40c597eb564e86346103f609d74efce0f6b4d4f30ec8ce9e2c26411ba437", - "sha256:e5f92f89355a67de0595932a6c6c02ab4afddc6fcdc0bfc5becd0d60884d3f69" - ], - "version": "==1.0.1" - }, - "inotify": { - "hashes": [ - "sha256:397f8785450e41f606fe4eb6f5e8e0a1c70b354b56495225fc6c6fe7e07db0c9", - "sha256:974a623a338482b62e16d4eb705fb863ed33ec178680fc3e96ccdf0df6c02a07" - ], - "index": "pypi", - "version": "==0.2.10" - }, - "isort": { - "hashes": [ - "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", - "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" - ], - "index": "pypi", - "version": "==4.3.21" - }, - "libusb1": { - "hashes": [ - "sha256:240f65ac70ba3fab77749ec84a412e4e89624804cb80d6c9d394eef5af8878d6" - ], - "version": "==1.8" - }, - "mako": { - "hashes": [ - "sha256:8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27", - "sha256:93729a258e4ff0747c876bd9e20df1b9758028946e976324ccd2d68245c7b6a9" - ], - "index": "pypi", - "version": "==1.1.3" - }, - "markupsafe": { - "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.1.1" - }, - "mccabe": { - "hashes": [ - "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" - ], - "version": "==0.6.1" - }, - "mnemonic": { - "hashes": [ - "sha256:4e37eb02b2cbd56a0079cabe58a6da93e60e3e4d6e757a586d9f23d96abea931", - "sha256:a8d78c5100acfa7df9bab6b9db7390831b0e54490934b718ff9efd68f0d731a6" - ], - "version": "==0.19" - }, - "mock": { - "hashes": [ - "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0", - "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72" - ], - "index": "pypi", - "version": "==4.0.2" - }, - "more-itertools": { - "hashes": [ - "sha256:6f83822ae94818eae2612063a5101a7311e68ae8002005b5e05f03fd74a86a20", - "sha256:9b30f12df9393f0d28af9210ff8efe48d10c94f73e5daf886f10c4b0b0b4f03c" - ], - "markers": "python_version >= '3.5'", - "version": "==8.5.0" - }, - "munch": { - "hashes": [ - "sha256:2d735f6f24d4dba3417fa448cae40c6e896ec1fdab6cdb5e6510999758a4dbd2", - "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd" - ], - "index": "pypi", - "version": "==2.5.0" - }, - "mypy": { - "hashes": [ - "sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c", - "sha256:3fdda71c067d3ddfb21da4b80e2686b71e9e5c72cca65fa216d207a358827f86", - "sha256:5dd13ff1f2a97f94540fd37a49e5d255950ebcdf446fb597463a40d0df3fac8b", - "sha256:6731603dfe0ce4352c555c6284c6db0dc935b685e9ce2e4cf220abe1e14386fd", - "sha256:6bb93479caa6619d21d6e7160c552c1193f6952f0668cdda2f851156e85186fc", - "sha256:81c7908b94239c4010e16642c9102bfc958ab14e36048fa77d0be3289dda76ea", - "sha256:9c7a9a7ceb2871ba4bac1cf7217a7dd9ccd44c27c2950edbc6dc08530f32ad4e", - "sha256:a4a2cbcfc4cbf45cd126f531dedda8485671545b43107ded25ce952aac6fb308", - "sha256:b7fbfabdbcc78c4f6fc4712544b9b0d6bf171069c6e0e3cb82440dd10ced3406", - "sha256:c05b9e4fb1d8a41d41dec8786c94f3b95d3c5f528298d769eb8e73d293abc48d", - "sha256:d7df6eddb6054d21ca4d3c6249cae5578cb4602951fd2b6ee2f5510ffb098707", - "sha256:e0b61738ab504e656d1fe4ff0c0601387a5489ca122d55390ade31f9ca0e252d", - "sha256:eff7d4a85e9eea55afa34888dfeaccde99e7520b51f867ac28a48492c0b1130c", - "sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a" - ], - "index": "pypi", - "version": "==0.782" - }, - "mypy-extensions": { - "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" - ], - "version": "==0.4.3" - }, - "nanopb": { - "hashes": [ - "sha256:4370ef3c65e4c04c74f38ecebf746ab24baa8f4f0ced24f8f4b54c166e8f6bec", - "sha256:4abd7124efcdbc896b59102a84aa28584bded93f7e586e090ee81a675831360c" - ], - "index": "pypi", - "version": "==0.4.3" - }, - "nose": { - "hashes": [ - "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac", - "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a", - "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98" - ], - "version": "==1.3.7" - }, - "packaging": { - "hashes": [ - "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8", - "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4" - }, - "pathspec": { - "hashes": [ - "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0", - "sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061" - ], - "version": "==0.8.0" - }, - "pillow": { - "hashes": [ - "sha256:0295442429645fa16d05bd567ef5cff178482439c9aad0411d3f0ce9b88b3a6f", - "sha256:94cf49723928eb6070a892cb39d6c156f7b5a2db4e8971cb958f7b6b104fb4c4", - "sha256:1ca594126d3c4def54babee699c055a913efb01e106c309fa6b04405d474d5ae", - "sha256:edf31f1150778abd4322444c393ab9c7bd2af271dd4dafb4208fb613b1f3cdc9", - "sha256:52125833b070791fcb5710fabc640fc1df07d087fc0c0f02d3661f76c23c5b8b", - "sha256:d350f0f2c2421e65fbc62690f26b59b0bcda1b614beb318c81e38647e0f673a1", - "sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce", - "sha256:c92302a33138409e8f1ad16731568c55c9053eee71bb05b6b744067e1b62380f", - "sha256:c79f9c5fb846285f943aafeafda3358992d64f0ef58566e23484132ecd8d7d63", - "sha256:9ad7f865eebde135d526bb3163d0b23ffff365cf87e767c649550964ad72785d", - "sha256:5e51ee2b8114def244384eda1c82b10e307ad9778dac5c83fb0943775a653cd8", - "sha256:ec29604081f10f16a7aea809ad42e27764188fc258b02259a03a8ff7ded3808d", - "sha256:97f9e7953a77d5a70f49b9a48da7776dc51e9b738151b22dacf101641594a626", - "sha256:8dad18b69f710bf3a001d2bf3afab7c432785d94fcf819c16b5207b1cfd17d38", - "sha256:612cfda94e9c8346f239bf1a4b082fdd5c8143cf82d685ba2dba76e7adeeb233", - "sha256:f7e30c27477dffc3e85c2463b3e649f751789e0f6c8456099eea7ddd53be4a8a", - "sha256:6d7741e65835716ceea0fd13a7d0192961212fd59e741a46bbed7a473c634ed6", - "sha256:09d7f9e64289cb40c2c8d7ad674b2ed6105f55dc3b09aa8e4918e20a0311e7ad", - "sha256:725aa6cfc66ce2857d585f06e9519a1cc0ef6d13f186ff3447ab6dff0a09bc7f", - "sha256:0a80dd307a5d8440b0a08bd7b81617e04d870e40a3e46a32d9c246e54705e86f", - "sha256:9c87ef410a58dd54b92424ffd7e28fd2ec65d2f7fc02b76f5e9b2067e355ebf6", - "sha256:a060cf8aa332052df2158e5a119303965be92c3da6f2d93b6878f0ebca80b2f6", - "sha256:06aba4169e78c439d528fdeb34762c3b61a70813527a2c57f0540541e9f433a8", - "sha256:6edb5446f44d901e8683ffb25ebdfc26988ee813da3bf91e12252b57ac163727", - "sha256:e901964262a56d9ea3c2693df68bc9860b8bdda2b04768821e4c44ae797de117", - "sha256:431b15cffbf949e89df2f7b48528be18b78bfa5177cb3036284a5508159492b5", - "sha256:d08b23fdb388c0715990cbc06866db554e1822c4bdcf6d4166cf30ac82df8c41", - "sha256:25930fadde8019f374400f7986e8404c8b781ce519da27792cbe46eabec00c4d" - ], - "index": "pypi", - "version": "==7.2.0" - }, - "pluggy": { - "hashes": [ - "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", - "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.13.1" - }, - "protobuf": { - "hashes": [ - "sha256:0bba42f439bf45c0f600c3c5993666fcb88e8441d011fad80a11df6f324eef33", - "sha256:1e834076dfef9e585815757a2c7e4560c7ccc5962b9d09f831214c693a91b463", - "sha256:339c3a003e3c797bc84499fa32e0aac83c768e67b3de4a5d7a5a9aa3b0da634c", - "sha256:361acd76f0ad38c6e38f14d08775514fbd241316cce08deb2ce914c7dfa1184a", - "sha256:3dee442884a18c16d023e52e32dd34a8930a889e511af493f6dc7d4d9bf12e4f", - "sha256:4d1174c9ed303070ad59553f435846a2f877598f59f9afc1b89757bdf846f2a7", - "sha256:5db9d3e12b6ede5e601b8d8684a7f9d90581882925c96acf8495957b4f1b204b", - "sha256:6a82e0c8bb2bf58f606040cc5814e07715b2094caeba281e2e7d0b0e2e397db5", - "sha256:8c35bcbed1c0d29b127c886790e9d37e845ffc2725cc1db4bd06d70f4e8359f4", - "sha256:91c2d897da84c62816e2f473ece60ebfeab024a16c1751aaf31100127ccd93ec", - "sha256:9c2e63c1743cba12737169c447374fab3dfeb18111a460a8c1a000e35836b18c", - "sha256:9edfdc679a3669988ec55a989ff62449f670dfa7018df6ad7f04e8dbacb10630", - "sha256:c0c5ab9c4b1eac0a9b838f1e46038c3175a95b0f2d944385884af72876bd6bc7", - "sha256:c8abd7605185836f6f11f97b21200f8a864f9cb078a193fe3c9e235711d3ff1e", - "sha256:d69697acac76d9f250ab745b46c725edf3e98ac24763990b24d58c16c642947a", - "sha256:df3932e1834a64b46ebc262e951cd82c3cf0fa936a154f0a42231140d8237060", - "sha256:e7662437ca1e0c51b93cadb988f9b353fa6b8013c0385d63a70c8a77d84da5f9", - "sha256:f68eb9d03c7d84bd01c790948320b768de8559761897763731294e3bc316decb" - ], - "index": "pypi", - "version": "==3.13.0" - }, - "py": { - "hashes": [ - "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2", - "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.9.0" - }, - "pyasn1": { - "hashes": [ - "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", - "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", - "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", - "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", - "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", - "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", - "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", - "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", - "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", - "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", - "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" - ], - "index": "pypi", - "version": "==0.4.8" - }, - "pyblake2": { - "hashes": [ - "sha256:3757f7ad709b0e1b2a6b3919fa79fe3261f166fc375cd521f2be480f8319dde9", - "sha256:407e02c7f8f36fcec1b7aa114ddca0c1060c598142ea6f6759d03710b946a7e3", - "sha256:4d47b4a2c1d292b1e460bde1dda4d13aa792ed2ed70fcc263b6bc24632c8e902", - "sha256:5ccc7eb02edb82fafb8adbb90746af71460fbc29aa0f822526fc976dff83e93f", - "sha256:8043267fbc0b2f3748c6920591cd0b8b5609dcce60c504c32858aa36206386f2", - "sha256:982295a87907d50f4723db6bc724660da76b6547826d52160171d54f95b919ac", - "sha256:baa2190bfe549e36163aa44664d4ee3a9080b236fc5d42f50dc6fd36bbdc749e", - "sha256:c53417ee0bbe77db852d5fd1036749f03696ebc2265de359fe17418d800196c4", - "sha256:fbc9fcde75713930bc2a91b149e97be2401f7c9c56d735b46a109210f58d7358" - ], - "index": "pypi", - "version": "==1.1.2" - }, - "pycodestyle": { - "hashes": [ - "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367", - "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.6.0" - }, - "pycparser": { - "hashes": [ - "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", - "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.20" - }, - "pyflakes": { - "hashes": [ - "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92", - "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.2.0" - }, - "pyparsing": { - "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.4.7" - }, - "pyro4": { - "hashes": [ - "sha256:46847ca703de3f483fbd0b2d22622f36eff03e6ef7ec7704d4ecaa3964cb2220", - "sha256:f195a4a9403f58807e66ca269c771e1d268064945f65cfbbf59a1feb12a1695f" - ], - "index": "pypi", - "version": "==4.80" - }, - "pyserial": { - "hashes": [ - "sha256:6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627", - "sha256:e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8" - ], - "index": "pypi", - "version": "==3.4" - }, - "pytest": { - "hashes": [ - "sha256:0e37f61339c4578776e090c3b8f6b16ce4db333889d65d0efb305243ec544b40", - "sha256:c8f57c2a30983f469bf03e68cdfa74dc474ce56b8f280ddcb080dfd91df01043" - ], - "index": "pypi", - "version": "==6.0.2" - }, - "pytest-ordering": { - "hashes": [ - "sha256:27fba3fc265f5d0f8597e7557885662c1bdc1969497cd58aff6ed21c3b617de2", - "sha256:3f314a178dbeb6777509548727dc69edf22d6d9a2867bf2d310ab85c403380b6", - "sha256:561ad653626bb171da78e682f6d39ac33bb13b3e272d406cd555adb6b006bda6" - ], - "index": "pypi", - "version": "==0.6" - }, - "pytest-random-order": { - "hashes": [ - "sha256:6b2159342a4c8c10855bc4fc6d65ee890fc614cb2b4ff688979b008a82a0ff52", - "sha256:72279a7f823969e18b10e438950f58330d17e0fcffb57cbd7929770cd687ecb2" - ], - "index": "pypi", - "version": "==1.0.4" - }, - "pytest-timeout": { - "hashes": [ - "sha256:20b3113cf6e4e80ce2d403b6fb56e9e1b871b510259206d40ff8d609f48bda76", - "sha256:541d7aa19b9a6b4e475c759fd6073ef43d7cdc9a92d95644c260076eb257a063" - ], - "index": "pypi", - "version": "==1.4.2" - }, - "regex": { - "hashes": [ - "sha256:0dc64ee3f33cd7899f79a8d788abfbec168410be356ed9bd30bbd3f0a23a7204", - "sha256:1269fef3167bb52631ad4fa7dd27bf635d5a0790b8e6222065d42e91bede4162", - "sha256:14a53646369157baa0499513f96091eb70382eb50b2c82393d17d7ec81b7b85f", - "sha256:3a3af27a8d23143c49a3420efe5b3f8cf1a48c6fc8bc6856b03f638abc1833bb", - "sha256:46bac5ca10fb748d6c55843a931855e2727a7a22584f302dd9bb1506e69f83f6", - "sha256:4c037fd14c5f4e308b8370b447b469ca10e69427966527edcab07f52d88388f7", - "sha256:51178c738d559a2d1071ce0b0f56e57eb315bcf8f7d4cf127674b533e3101f88", - "sha256:5ea81ea3dbd6767873c611687141ec7b06ed8bab43f68fad5b7be184a920dc99", - "sha256:6961548bba529cac7c07af2fd4d527c5b91bb8fe18995fed6044ac22b3d14644", - "sha256:75aaa27aa521a182824d89e5ab0a1d16ca207318a6b65042b046053cfc8ed07a", - "sha256:7a2dd66d2d4df34fa82c9dc85657c5e019b87932019947faece7983f2089a840", - "sha256:8a51f2c6d1f884e98846a0a9021ff6861bdb98457879f412fdc2b42d14494067", - "sha256:9c568495e35599625f7b999774e29e8d6b01a6fb684d77dee1f56d41b11b40cd", - "sha256:9eddaafb3c48e0900690c1727fba226c4804b8e6127ea409689c3bb492d06de4", - "sha256:bbb332d45b32df41200380fff14712cb6093b61bd142272a10b16778c418e98e", - "sha256:bc3d98f621898b4a9bc7fecc00513eec8f40b5b83913d74ccb445f037d58cd89", - "sha256:c11d6033115dc4887c456565303f540c44197f4fc1a2bfb192224a301534888e", - "sha256:c50a724d136ec10d920661f1442e4a8b010a4fe5aebd65e0c2241ea41dbe93dc", - "sha256:d0a5095d52b90ff38592bbdc2644f17c6d495762edf47d876049cfd2968fbccf", - "sha256:d6cff2276e502b86a25fd10c2a96973fdb45c7a977dca2138d661417f3728341", - "sha256:e46d13f38cfcbb79bfdb2964b0fe12561fe633caf964a77a5f8d4e45fe5d2ef7" - ], - "version": "==2020.7.14" - }, - "requests": { - "hashes": [ - "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", - "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898" - ], - "index": "pypi", - "version": "==2.24.0" - }, - "scons": { - "hashes": [ - "sha256:722ed104b5c624ecdc89bd4e02b094d2b14d99d47b5d0501961e47f579a2007c", - "sha256:9b4696a806fb73f402fbf5e37ab0e8b6cd0dcef990a91210d7ed4aacbcc5231d" - ], - "index": "pypi", - "version": "==4.0.1" - }, - "serpent": { - "hashes": [ - "sha256:72753820246a7d8486e8b385353e3bbf769abfceec2e850fa527a288b084ff7a", - "sha256:b2e8fa890481ca068faf9913c7019db5a8c30aa5e7e5870846996749872cecb3" - ], - "markers": "python_version >= '3.2'", - "version": "==1.30.2" - }, - "shamir-mnemonic": { - "hashes": [ - "sha256:1cc08d276e05b13cd32bd3b0c5d1cb6c30254e0086e0f6857ec106d4cceff121", - "sha256:5e7cc1354697e304b7868fc01085bcd4b30bb2020b77b6cc5ceeb0c032d513a7" - ], - "index": "pypi", - "version": "==0.1.0" - }, - "six": { - "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.15.0" - }, - "sortedcontainers": { - "hashes": [ - "sha256:4e73a757831fc3ca4de2859c422564239a31d8213d09a2a666e375807034d2ba", - "sha256:c633ebde8580f241f274c1f8994a665c0e54a17724fecd0cae2f079e09c36d3f" - ], - "version": "==2.2.2" - }, - "termcolor": { - "hashes": [ - "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b" - ], - "index": "pypi", - "version": "==1.1.0" - }, - "toml": { - "hashes": [ - "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f", - "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88" - ], - "version": "==0.10.1" - }, - "tox": { - "hashes": [ - "sha256:e6318f404aff16522ff5211c88cab82b39af121735a443674e4e2e65f4e4637b", - "sha256:eb629ddc60e8542fd4a1956b2462e3b8771d49f1ff630cecceacaa0fbfb7605a" - ], - "index": "pypi", - "version": "==3.20.0" - }, - "trezor": { - "editable": true, - "path": "./python" - }, - "typed-ast": { - "hashes": [ - "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355", - "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919", - "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa", - "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652", - "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75", - "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01", - "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d", - "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1", - "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907", - "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c", - "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3", - "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b", - "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614", - "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb", - "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b", - "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41", - "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6", - "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34", - "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe", - "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4", - "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7" - ], - "version": "==1.4.1" - }, - "typing": { - "hashes": [ - "sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9", - "sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5" - ], - "index": "pypi", - "version": "==3.7.4.3" - }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" - ], - "index": "pypi", - "version": "==3.7.4.3" - }, - "urllib3": { - "hashes": [ - "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a", - "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.25.10" - }, - "virtualenv": { - "hashes": [ - "sha256:5102fbf1ec57e80671ef40ed98a84e980a71194cedf30c87c2b25c3a9e0b0107", - "sha256:ccfb8e1e05a1174f7bd4c163700277ba730496094fe1a58bea9d4ac140a207c8" - ], - "index": "pypi", - "version": "==20.0.23" - } - }, - "develop": { - "scan-build": { - "hashes": [ - "sha256:79edcbcdec433682528258870ed1efbf66d3ebcf857ecca335c830d8adbf17eb" - ], - "index": "pypi", - "version": "==2.0.19" - } - } -} diff --git a/build-docker.sh b/build-docker.sh index 8cdb3e453..b26d7097b 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -43,9 +43,9 @@ for BITCOIN_ONLY in 0 1; do ln -s /build build && git checkout $TAG && \ git submodule update --init --recursive && \ - pipenv install && \ - pipenv run make clean vendor build_firmware && \ - pipenv run ../python/tools/firmware-fingerprint.py \ + poetry install && \ + poetry run make clean vendor build_firmware && \ + poetry run ../python/tools/firmware-fingerprint.py \ -o build/firmware/firmware.bin.fingerprint \ build/firmware/firmware.bin && \ chown -R $USER:$GROUP /build" @@ -72,12 +72,12 @@ for BITCOIN_ONLY in 0 1; do ln -s /build build && git checkout $TAG && \ git submodule update --init --recursive && \ - pipenv install && \ - pipenv run script/cibuild && \ + poetry install && \ + poetry run script/cibuild && \ mkdir -p build/firmware && \ cp firmware/trezor.bin build/firmware/firmware.bin && \ cp firmware/trezor.elf build/firmware/firmware.elf && \ - pipenv run ../python/tools/firmware-fingerprint.py \ + poetry run ../python/tools/firmware-fingerprint.py \ -o build/firmware/firmware.bin.fingerprint \ build/firmware/firmware.bin && \ chown -R $USER:$GROUP /build" diff --git a/ci/build.yml b/ci/build.yml index ca274ae47..64952848d 100644 --- a/ci/build.yml +++ b/ci/build.yml @@ -10,11 +10,11 @@ core fw regular build: stage: build needs: [] script: - - nix-shell --run "pipenv run make -C core build_boardloader" - - nix-shell --run "pipenv run make -C core build_bootloader" - - nix-shell --run "pipenv run make -C core build_prodtest" - - nix-shell --run "pipenv run make -C core build_firmware" - - nix-shell --run "pipenv run make -C core sizecheck" + - nix-shell --run "poetry run make -C core build_boardloader" + - nix-shell --run "poetry run make -C core build_bootloader" + - nix-shell --run "poetry run make -C core build_prodtest" + - nix-shell --run "poetry run make -C core build_firmware" + - nix-shell --run "poetry run make -C core sizecheck" - cp core/build/firmware/firmware.bin trezor-fw-regular-$CORE_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -26,7 +26,7 @@ core fw regular debug build: stage: build needs: [] script: - - nix-shell --run "PYOPT=0 pipenv run make -C core build_firmware" + - nix-shell --run "PYOPT=0 poetry run make -C core build_firmware" - cp core/build/firmware/firmware.bin trezor-fw-regular-debug-$CORE_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -40,9 +40,9 @@ core fw btconly build: variables: BITCOIN_ONLY: "1" script: - - nix-shell --run "pipenv run make -C core build_firmware" + - nix-shell --run "poetry run make -C core build_firmware" - mv core/build/firmware/firmware.bin core/build/firmware/firmware-bitcoinonly.bin - - nix-shell --run "pipenv run ./tools/check-bitcoin-only core/build/firmware/firmware-bitcoinonly.bin" + - nix-shell --run "poetry run ./tools/check-bitcoin-only core/build/firmware/firmware-bitcoinonly.bin" - cp core/build/firmware/firmware-bitcoinonly.bin trezor-fw-btconly-$CORE_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -57,7 +57,7 @@ core fw btconly debug build: BITCOIN_ONLY: "1" PYOPT: "0" script: - - nix-shell --run "pipenv run make -C core build_firmware" + - nix-shell --run "poetry run make -C core build_firmware" - cp core/build/firmware/firmware.bin trezor-fw-btconly-debug-$CORE_VERSION-$CI_COMMIT_SHORT_SHA.bin only: # currently used only for deploys - /^core\// @@ -74,7 +74,7 @@ core fw btconly t1 build: BITCOIN_ONLY: "1" TREZOR_MODEL: "1" script: - - nix-shell --run "pipenv run make -C core build_firmware" + - nix-shell --run "poetry run make -C core build_firmware" - cp core/build/firmware/firmware.bin trezor-fw-btconly-t1-$CORE_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -86,7 +86,7 @@ core unix regular build: stage: build needs: [] script: - - nix-shell --run "pipenv run make -C core build_unix" + - nix-shell --run "poetry run make -C core build_unix" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -98,7 +98,7 @@ core unix frozen regular build: stage: build needs: [] script: - - nix-shell --run "pipenv run make -C core build_unix_frozen" + - nix-shell --run "poetry run make -C core build_unix_frozen" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -112,7 +112,7 @@ core unix frozen btconly debug build: PYOPT: "0" BITCOIN_ONLY: "1" script: - - nix-shell --run "pipenv run make -C core build_unix_frozen" + - nix-shell --run "poetry run make -C core build_unix_frozen" - mv core/build/unix/trezor-emu-core core/build/unix/trezor-emu-core-bitcoinonly artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -126,7 +126,7 @@ core unix frozen debug build: variables: PYOPT: "0" script: - - nix-shell --run "pipenv run make -C core build_unix_frozen" + - nix-shell --run "poetry run make -C core build_unix_frozen" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" untracked: true @@ -138,12 +138,13 @@ core macos frozen regular build: tags: - darwin script: - - nix-shell --run "pipenv run make -C core build_unix_frozen" + - nix-shell --run "poetry run make -C core build_unix_frozen" - export NAME="trezor-emu-core.darwin" - cp -v core/build/unix/trezor-emu-core ./$NAME - chmod +x $NAME - echo '"$(dirname "$BASH_SOURCE")"/trezor-emu-core.darwin' > trezor-emulator.command - chmod u+x trezor-emulator.command + allow_failure: true artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -162,7 +163,7 @@ crypto build: - ci/**/* - crypto/**/* script: - - nix-shell --run "pipenv run make -C crypto" + - nix-shell --run "poetry run make -C crypto" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -181,8 +182,8 @@ legacy fw regular build: variables: MEMORY_PROTECT: "0" script: - - nix-shell --run "pipenv run legacy/script/cibuild" - - nix-shell --run "pipenv run make -C legacy/demo" + - nix-shell --run "poetry run legacy/script/cibuild" + - nix-shell --run "poetry run make -C legacy/demo" - mv legacy/firmware/trezor.bin trezor-fw-regular-$LEGACY_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -197,7 +198,7 @@ legacy fw regular debug build: DEBUG_LINK: "1" MEMORY_PROTECT: "0" script: - - nix-shell --run "pipenv run legacy/script/cibuild" + - nix-shell --run "poetry run legacy/script/cibuild" - mv legacy/firmware/trezor.bin trezor-fw-regular-debug-$LEGACY_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -212,9 +213,9 @@ legacy fw btconly build: BITCOIN_ONLY: "1" MEMORY_PROTECT: "0" script: - - nix-shell --run "pipenv run legacy/script/cibuild" + - nix-shell --run "poetry run legacy/script/cibuild" - mv legacy/firmware/trezor.bin legacy/firmware/trezor-bitcoinonly.bin - - nix-shell --run "pipenv run ./tools/check-bitcoin-only legacy/firmware/trezor-bitcoinonly.bin" + - nix-shell --run "poetry run ./tools/check-bitcoin-only legacy/firmware/trezor-bitcoinonly.bin" - mv legacy/firmware/trezor-bitcoinonly.bin trezor-fw-btconly-$LEGACY_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -230,8 +231,8 @@ legacy fw btconly debug build: MEMORY_PROTECT: "0" DEBUG_LINK: "1" script: - - nix-shell --run "pipenv run legacy/script/cibuild" - - nix-shell --run "pipenv run ./tools/check-bitcoin-only legacy/firmware/trezor.bin" + - nix-shell --run "poetry run legacy/script/cibuild" + - nix-shell --run "poetry run ./tools/check-bitcoin-only legacy/firmware/trezor.bin" - mv legacy/firmware/trezor.bin trezor-fw-btconly-debug-$LEGACY_VERSION-$CI_COMMIT_SHORT_SHA.bin artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -246,7 +247,7 @@ legacy emu regular debug build: DEBUG_LINK: "1" EMULATOR: "1" script: - - nix-shell --run "pipenv run legacy/script/cibuild" + - nix-shell --run "poetry run legacy/script/cibuild" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -261,7 +262,7 @@ legacy emu btconly debug build: DEBUG_LINK: "1" EMULATOR: "1" script: - - nix-shell --run "pipenv run legacy/script/cibuild" + - nix-shell --run "poetry run legacy/script/cibuild" - mv legacy/firmware/trezor.elf legacy/firmware/trezor-bitcoinonly.elf artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" diff --git a/ci/deploy.yml b/ci/deploy.yml index 03b167b96..f8720af93 100644 --- a/ci/deploy.yml +++ b/ci/deploy.yml @@ -6,7 +6,7 @@ release core fw regular deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core fw regular build script: @@ -25,7 +25,7 @@ release core fw btconly deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core fw btconly build script: @@ -44,7 +44,7 @@ release core fw regular debug deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core fw regular debug build script: @@ -63,7 +63,7 @@ release core fw btconly debug deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core fw btconly debug build script: @@ -84,7 +84,7 @@ release legacy fw regular deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - legacy fw regular build script: @@ -103,7 +103,7 @@ release legacy fw btconly deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - legacy fw btconly build script: @@ -122,7 +122,7 @@ release legacy fw regular debug deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - legacy fw regular debug build script: @@ -141,7 +141,7 @@ release legacy fw btconly debug deploy: stage: deploy variables: DEPLOY_DIRECTORY: "releases/firmwares" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - legacy fw btconly debug build script: @@ -162,7 +162,7 @@ release core unix debug deploy: stage: deploy variables: DEPLOY_PATH: "${DEPLOY_BASE_DIR}/releases/emulators" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core unix frozen debug build script: @@ -181,7 +181,7 @@ release legacy unix debug deploy: stage: deploy variables: DEPLOY_PATH: "${DEPLOY_BASE_DIR}/releases/emulators" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - legacy emu regular debug build script: @@ -200,7 +200,7 @@ release core macos debug deploy: stage: deploy variables: DEPLOY_PATH: "${DEPLOY_BASE_DIR}/releases/emulators/macos" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core unix frozen debug build script: @@ -220,7 +220,7 @@ ui tests core fixtures deploy: stage: deploy variables: DEPLOY_PATH: "${DEPLOY_BASE_DIR}/ui_tests/" - before_script: [] # no pipenv + before_script: [] # no poetry needs: - core device ui test script: diff --git a/ci/hardware_tests/default.nix b/ci/hardware_tests/default.nix index 2e7f797cb..fb10f7949 100644 --- a/ci/hardware_tests/default.nix +++ b/ci/hardware_tests/default.nix @@ -5,7 +5,7 @@ stdenv.mkDerivation rec { buildInputs = [ uhubctl ffmpeg - pipenv + poetry libusb1 dejavu_fonts ]; diff --git a/ci/posttest.yml b/ci/posttest.yml index b4c396940..0b933da96 100644 --- a/ci/posttest.yml +++ b/ci/posttest.yml @@ -10,8 +10,8 @@ core unix coverage posttest: - core u2f test - core fido2 test script: - - nix-shell --run "pipenv run make -C core res" # we need to regenerate resources.py - - nix-shell --run "pipenv run make -C core coverage" + - nix-shell --run "poetry run make -C core res" # we need to regenerate resources.py + - nix-shell --run "poetry run make -C core coverage" coverage: '/COVERAGE: \d+%/' artifacts: name: core-unix-coverage-posttest @@ -28,7 +28,7 @@ core unix ui changes: needs: - core device ui test script: - - nix-shell --run "cd tests/ui_tests ; pipenv run python reporting/report_master_diff.py" + - nix-shell --run "cd tests/ui_tests ; poetry run python reporting/report_master_diff.py" - mv tests/ui_tests/reporting/reports/master_diff/ . artifacts: name: core-unix-ui-changes diff --git a/ci/prebuild.yml b/ci/prebuild.yml index ee2822690..15b13da16 100644 --- a/ci/prebuild.yml +++ b/ci/prebuild.yml @@ -10,7 +10,7 @@ style prebuild: - "**/*.h" - "**/*.py" script: - - nix-shell --run "pipenv run make style_check" + - nix-shell --run "poetry run make style_check" common prebuild: stage: prebuild @@ -21,7 +21,7 @@ common prebuild: - "**/*.json" - "**/*.proto" script: - - nix-shell --run "pipenv run make defs_check" + - nix-shell --run "poetry run make defs_check" gen prebuild: stage: prebuild @@ -36,7 +36,7 @@ gen prebuild: - "**/*.py" - "**/*.pyi" script: - - nix-shell --run "pipenv run make gen_check" + - nix-shell --run "poetry run make gen_check" release commit messages prebuild: stage: prebuild diff --git a/ci/shell.nix b/ci/shell.nix index 6369698d9..61549a195 100644 --- a/ci/shell.nix +++ b/ci/shell.nix @@ -20,7 +20,6 @@ stdenv.mkDerivation { libjpeg libusb1 openssl - pipenv pkgconfig poetry protobuf3_6 diff --git a/ci/test.yml b/ci/test.yml index be55026f4..d59043c06 100644 --- a/ci/test.yml +++ b/ci/test.yml @@ -7,17 +7,17 @@ core unit test: needs: - core unix regular build script: - - nix-shell --run "pipenv run make -C core test" + - nix-shell --run "poetry run make -C core test" core device ui test: stage: test needs: - core unix frozen debug build script: - - nix-shell --run "pipenv run make -C core test_emu_ui" + - nix-shell --run "poetry run make -C core test_emu_ui" after_script: - mv tests/ui_tests/reporting/reports/test/ test_ui_report - - nix-shell --run "pipenv run python ci/prepare_ui_artifacts.py" + - nix-shell --run "poetry run python ci/prepare_ui_artifacts.py" - diff tests/ui_tests/fixtures.json tests/ui_tests/fixtures.suggestion.json artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -40,7 +40,7 @@ core device test: variables: TREZOR_PROFILING: 1 script: - - nix-shell --run "pipenv run make -C core test_emu" + - nix-shell --run "poetry run make -C core test_emu" - mv core/src/.coverage core/.coverage.test_emu artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -61,7 +61,7 @@ core btconly device test: MICROPYTHON: "build/unix/trezor-emu-core-bitcoinonly" TREZOR_PYTEST_SKIP_ALTCOINS: 1 script: - - nix-shell --run "pipenv run make -C core test_emu" + - nix-shell --run "poetry run make -C core test_emu" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -79,7 +79,7 @@ core monero test: variables: TREZOR_PROFILING: 1 script: - - nix-shell --run "pipenv run make -C core test_emu_monero" + - nix-shell --run "poetry run make -C core test_emu_monero" - mv core/src/.coverage core/.coverage.test_emu_monero artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -96,8 +96,8 @@ core u2f test: variables: TREZOR_PROFILING: 1 script: - - nix-shell --run "pipenv run make -C tests/fido_tests/u2f-tests-hid" - - nix-shell --run "pipenv run make -C core test_emu_u2f" + - nix-shell --run "poetry run make -C tests/fido_tests/u2f-tests-hid" + - nix-shell --run "poetry run make -C core test_emu_u2f" - mv core/src/.coverage core/.coverage.test_emu_u2f artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -115,7 +115,7 @@ core fido2 test: TREZOR_PROFILING: 1 script: - pgrep trezor-emu-core || true - - nix-shell --run "pipenv run make -C core test_emu_fido2" + - nix-shell --run "poetry run make -C core test_emu_fido2" - pgrep trezor-emu-core || true - mv core/src/.coverage core/.coverage.test_emu_fido2 artifacts: @@ -134,7 +134,7 @@ core click test: needs: - core unix frozen debug build script: - - nix-shell --run "pipenv run make -C core test_emu_click" + - nix-shell --run "poetry run make -C core test_emu_click" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -153,7 +153,7 @@ core upgrade test: TREZOR_UPGRADE_TEST: "core" script: - nix-shell --run "tests/download_emulators.sh" - - nix-shell --run "pipenv run pytest --junitxml=tests/junit.xml tests/upgrade_tests" + - nix-shell --run "poetry run pytest --junitxml=tests/junit.xml tests/upgrade_tests" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -168,7 +168,7 @@ core persistence test: needs: - core unix frozen debug build script: - - nix-shell --run "pipenv run pytest --junitxml=tests/junit.xml tests/persistence_tests" + - nix-shell --run "poetry run pytest --junitxml=tests/junit.xml tests/persistence_tests" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -194,7 +194,7 @@ crypto test: - ./crypto/tests/aestst - ./crypto/tests/test_check - ./crypto/tests/test_openssl 1000 - - nix-shell --run "cd crypto && ITERS=10 pipenv run pytest --junitxml=tests/junit.xml tests" + - nix-shell --run "cd crypto && ITERS=10 poetry run pytest --junitxml=tests/junit.xml tests" - nix-shell --run "CK_TIMEOUT_MULTIPLIER=20 valgrind -q --error-exitcode=1 ./crypto/tests/test_check" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -215,7 +215,7 @@ legacy test: variables: EMULATOR: "1" script: - - nix-shell --run "pipenv run legacy/script/test" + - nix-shell --run "poetry run legacy/script/test" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -234,7 +234,7 @@ legacy btconly test: EMULATOR_BINARY: "firmware/trezor-bitcoinonly.elf" TREZOR_PYTEST_SKIP_ALTCOINS: 1 script: - - nix-shell --run "pipenv run legacy/script/test" + - nix-shell --run "poetry run legacy/script/test" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -253,7 +253,7 @@ legacy upgrade test: TREZOR_UPGRADE_TEST: "legacy" script: - nix-shell --run "tests/download_emulators.sh" - - nix-shell --run "pipenv run pytest --junitxml=tests/junit.xml tests/upgrade_tests" + - nix-shell --run "poetry run pytest --junitxml=tests/junit.xml tests/upgrade_tests" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -274,14 +274,13 @@ python test: LANG: "C.UTF-8" only: changes: - - Pipfile.lock - poetry.lock - .gitlab-ci.yml - ci/**/* - common/**/* - python/**/* script: - - nix-shell --run "cd python && pipenv run tox" + - nix-shell --run "cd python && poetry run tox" # Storage @@ -295,8 +294,8 @@ storage test: - storage/**/* needs: [] script: - - nix-shell --run "pipenv run make -C storage/tests build" - - nix-shell --run "pipenv run make -C storage/tests tests_all" + - nix-shell --run "poetry run make -C storage/tests build" + - nix-shell --run "poetry run make -C storage/tests tests_all" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" paths: @@ -321,10 +320,10 @@ hardware legacy regular device test: script: - cd ci/hardware_tests - nix-shell --run "./record_video.sh ${CI_COMMIT_SHORT_SHA} start" - - nix-shell --run "cd ../.. && pipenv sync" - - nix-shell --run "pipenv run python bootstrap.py" - - nix-shell --run "pipenv run python bootstrap.py ../../trezor-*.bin" - - nix-shell --run "pipenv run pytest ../../tests/device_tests" + - nix-shell --run "cd ../.. && poetry install" + - nix-shell --run "poetry run python bootstrap.py" + - nix-shell --run "poetry run python bootstrap.py ../../trezor-*.bin" + - nix-shell --run "poetry run pytest ../../tests/device_tests" - nix-shell --run "./record_video.sh ${CI_COMMIT_SHORT_SHA} stop" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" @@ -349,10 +348,10 @@ hardware legacy btconly device test: script: - cd ci/hardware_tests - nix-shell --run "./record_video.sh ${CI_COMMIT_SHORT_SHA} start" - - nix-shell --run "cd ../.. && pipenv sync" - - nix-shell --run "pipenv run python bootstrap.py" - - nix-shell --run "pipenv run python bootstrap.py ../../trezor-*.bin" - - nix-shell --run "pipenv run pytest ../../tests/device_tests" + - nix-shell --run "cd ../.. && poetry install" + - nix-shell --run "poetry run python bootstrap.py" + - nix-shell --run "poetry run python bootstrap.py ../../trezor-*.bin" + - nix-shell --run "poetry run pytest ../../tests/device_tests" - nix-shell --run "./record_video.sh ${CI_COMMIT_SHORT_SHA} stop" artifacts: name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA" diff --git a/docs/core/build/embedded.md b/docs/core/build/embedded.md index f5a5031ca..eebcd0025 100644 --- a/docs/core/build/embedded.md +++ b/docs/core/build/embedded.md @@ -1,7 +1,7 @@ # Build instructions for Embedded (ARM port) -First clone, initialize submodules and install Pipenv as defined [here](index.md). -**Do not forget you need to be in a `pipenv shell` environment!** +First clone, initialize submodules and install Poetry as defined [here](index.md). +**Do not forget you need to be in a `poetry shell` environment!** ## Requirements diff --git a/docs/core/build/emulator.md b/docs/core/build/emulator.md index 685a0fef2..1d893c4a6 100644 --- a/docs/core/build/emulator.md +++ b/docs/core/build/emulator.md @@ -1,7 +1,7 @@ # Build instructions for Emulator (Unix port) -First clone, initialize submodules, install Pipenv and enter the Pipenv shell as -defined [here](index.md). **Do not forget you need to be in a `pipenv shell` +First clone, initialize submodules, install Poetry and enter the Poetry shell as +defined [here](index.md). **Do not forget you need to be in a `poetry shell` environment!** ## Dependencies diff --git a/docs/core/build/index.md b/docs/core/build/index.md index f1928e490..1267c653d 100644 --- a/docs/core/build/index.md +++ b/docs/core/build/index.md @@ -17,19 +17,19 @@ run on your computer. See [Emulator](../emulator/index.md) for more information. ## Existing Project If you are building from an existing checkout, do not forget to refresh the submodules - and the pipenv environment: + and the poetry environment: ```sh git submodule update --init --recursive --force -pipenv sync +poetry install ``` -## Pipenv +## Poetry -We use [Pipenv](https://docs.pipenv.org/en/latest/) to install and track Python dependencies. You need to install it, sync the packages and then use `pipenv run` for every command or enter `pipenv shell` before typing any commands. **The commands in this section suppose you are in a `pipenv shell` environment!** +We use [Poetry](https://python-poetry.org/) to install and track Python dependencies. You need to install it, sync the packages and then use `poetry run` for every command or enter `poetry shell` before typing any commands. **The commands in this section suppose you are in a `poetry shell` environment!** ```sh -sudo pip3 install pipenv -pipenv sync -pipenv shell +sudo pip3 install poetry +poetry install +poetry shell ``` diff --git a/docs/core/emulator/index.md b/docs/core/emulator/index.md index 0a324052e..cbcb98c52 100644 --- a/docs/core/emulator/index.md +++ b/docs/core/emulator/index.md @@ -11,9 +11,9 @@ Emulator significantly speeds up development and has several features to help yo ## How to run 1. [build](../build/emulator.md) the emulator -2. run `emu.py` inside the pipenv environment: - - either enter `pipenv shell` first, and then use `./emu.py` - - or always use `pipenv run ./emu.py` +2. run `emu.py` inside the poetry environment: + - either enter `poetry shell` first, and then use `./emu.py` + - or always use `poetry run ./emu.py` 3. to use [bridge](https://github.com/trezor/trezord-go) with the emulator support, start it with `trezord -e 21324` Now you can use the emulator the same way as you use the device, for example you can visit our Wallet (https://wallet.trezor.io), use our Python CLI tool (`trezorctl`) etc. Simply click to emulate screen touches. diff --git a/docs/git/hooks/pre-push b/docs/git/hooks/pre-push index 9ed1f719f..0871b82d7 100755 --- a/docs/git/hooks/pre-push +++ b/docs/git/hooks/pre-push @@ -8,17 +8,17 @@ echo "Running pre-push git hook." # Runs check for common simple errors before pushing echo "" echo "Checking templates" -if ! pipenv run make templates_check +if ! poetry run make templates_check then - echo >&2 "Templates not updated, run 'pipenv run make templates'. Not pushing." + echo >&2 "Templates not updated, run 'poetry run make templates'. Not pushing." exit 1 fi echo "" echo "Checking style" -if ! pipenv run make style_check +if ! poetry run make style_check then - echo >&2 "Style invalid, run 'pipenv run make style'. Not pushing." + echo >&2 "Style invalid, run 'poetry run make style'. Not pushing." exit 2 fi diff --git a/docs/legacy/index.md b/docs/legacy/index.md index 755db0460..ad8e32042 100644 --- a/docs/legacy/index.md +++ b/docs/legacy/index.md @@ -36,7 +36,7 @@ For firmwares older than 1.8.1, please clone the archived [trezor-mcu](https://g ## Local development build -Make sure you have Python 3.6 or later and [pipenv](https://pipenv.readthedocs.io/en/latest/install/) +Make sure you have Python 3.6 or later and [Poetry](https://python-poetry.org/) installed. If you want to build device firmware, also make sure that you have the [GNU ARM Embedded toolchain](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) installed. @@ -55,14 +55,14 @@ To run the build process, execute the following commands: ```sh # enter the legacy subdirectory cd legacy -# set up pipenv -pipenv sync +# set up poetry +poetry install # set up environment variables. For example, to build emulator with debuglink: export EMULATOR=1 DEBUG_LINK=1 # clear build artifacts -pipenv run ./script/setup +poetry run ./script/setup # run build process -pipenv run ./script/cibuild +poetry run ./script/cibuild ``` A built device firmware will be located in `legacy/firmware/trezor.bin`. A built emulator will be diff --git a/docs/tests/click-tests.md b/docs/tests/click-tests.md index 525cff7d9..9d6f13772 100644 --- a/docs/tests/click-tests.md +++ b/docs/tests/click-tests.md @@ -9,18 +9,18 @@ thread free to interact with the device from the user's perspective. ## Running the full test suite -_Note: You need Pipenv, as mentioned in the core's [documentation](https://docs.trezor.io/trezor-firmware/core/) section._ +_Note: You need Poetry, as mentioned in the core's [documentation](https://docs.trezor.io/trezor-firmware/core/) section._ In the `trezor-firmware` checkout, in the root of the monorepo, install the environment: ```sh -pipenv sync +poetry install ``` Switch to a shell inside theenvironment: ```sh -pipenv shell +poetry shell ``` If you want to test against the emulator, run it in a separate terminal: diff --git a/docs/tests/device-tests.md b/docs/tests/device-tests.md index c996d6169..cecd30bed 100644 --- a/docs/tests/device-tests.md +++ b/docs/tests/device-tests.md @@ -2,27 +2,27 @@ ## 1. Running the full test suite -_Note: You need Pipenv, as mentioned in the core's [documentation](https://docs.trezor.io/trezor-firmware/core/) section._ +_Note: You need Poetry, as mentioned in the core's [documentation](https://docs.trezor.io/trezor-firmware/core/) section._ In the `trezor-firmware` checkout, in the root of the monorepo, install the environment: ```sh -pipenv sync +poetry install ``` And run the automated tests: ```sh -pipenv run make -C core test_emu +poetry run make -C core test_emu ``` ## 2. Running tests manually -Install the pipenv environment as outlined above. Then switch to a shell inside the +Install the poetry environment as outlined above. Then switch to a shell inside the environment: ```sh -pipenv shell +poetry shell ``` If you want to test against the emulator, run it in a separate terminal: @@ -88,7 +88,7 @@ The final executable is significantly slower due to ASAN(Address Sanitizer) inte If you wan't to catch some memory errors use this. ```sh -time ASAN_OPTIONS=verbosity=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true TREZOR_PROFILE="" pipenv run make test_emu +time ASAN_OPTIONS=verbosity=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true TREZOR_PROFILE="" poetry run make test_emu ``` ### Coverage (Emulator only) diff --git a/docs/tests/ui-tests.md b/docs/tests/ui-tests.md index 29ba9335f..56162f654 100644 --- a/docs/tests/ui-tests.md +++ b/docs/tests/ui-tests.md @@ -2,27 +2,27 @@ ## 1. Running the full test suite -_Note: You need Pipenv, as mentioned in the core's [documentation](https://docs.trezor.io/trezor-firmware/core/) section._ +_Note: You need Poetry, as mentioned in the core's [documentation](https://docs.trezor.io/trezor-firmware/core/) section._ In the `trezor-firmware` checkout, in the root of the monorepo, install the environment: ```sh -pipenv sync +poetry install ``` And run the tests: ```sh -pipenv run make -C core test_emu_ui +poetry run make -C core test_emu_ui ``` ## 2. Running tests manually -Install the pipenv environment as outlined above. Then switch to a shell inside the +Install the poetry environment as outlined above. Then switch to a shell inside the environment: ```sh -pipenv shell +poetry shell ``` If you want to test against the emulator, run it in a separate terminal: @@ -51,7 +51,7 @@ pytest tests/device_tests --ui=test -m "not skip_ui" Short version: ```sh -pipenv run make -C core test_emu_ui_record +poetry run make -C core test_emu_ui_record ``` Long version: diff --git a/docs/tests/upgrade-tests.md b/docs/tests/upgrade-tests.md index fe0f09c05..9abba4173 100644 --- a/docs/tests/upgrade-tests.md +++ b/docs/tests/upgrade-tests.md @@ -1,9 +1,9 @@ # Running Upgrade Tests -1. As always, use pipenv environment: +1. As always, use poetry environment: ```sh -pipenv shell +poetry shell ``` 2. Download the emulators, if you have not already: diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 000000000..b5f7fd247 --- /dev/null +++ b/poetry.toml @@ -0,0 +1,3 @@ +cache-dir = ".cache" +[virtualenvs] +in-project = true diff --git a/python/README.md b/python/README.md index fec8132a6..59dbe1760 100644 --- a/python/README.md +++ b/python/README.md @@ -70,15 +70,15 @@ pip3 install "git+https://github.com/trezor/trezor-firmware#egg=trezor&subdirect ### Running from source -Install the [pipenv](https://pipenv.readthedocs.io/en/latest/) tool, checkout -`trezor-firmware` from git, and enter the pipenv shell: +Install the [Poetry](https://python-poetry.org/) tool, checkout +`trezor-firmware` from git, and enter the poetry shell: ```sh -pip3 install pipenv +pip3 install poetry git clone https://github.com/trezor/trezor-firmware cd trezor-firmware -pipenv sync -pipenv shell +poetry install +poetry shell ``` In this environment, trezorlib and the `trezorctl` tool is running from the live