IQ.Pilot Release Commit @ 98a2c61
This commit is contained in:
@@ -51,8 +51,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/common/git_creds.py": {
|
||||
"mode": 420,
|
||||
"sha256": "957a07c0a852b24d5778ff42216a0159aee25e453699f6e14725e62ef581db4d",
|
||||
"size": 6192
|
||||
"sha256": "aab57b08d1907d0a761111e2a9a415af990475a55307c0ced6f2573664abbc49",
|
||||
"size": 7327
|
||||
},
|
||||
"python/_iqclosure/iqpilot/common/gpio.py": {
|
||||
"mode": 420,
|
||||
@@ -76,8 +76,8 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/common/realtime.py": {
|
||||
"mode": 420,
|
||||
"sha256": "ff112acc1fdc227e2ffa4b0fa74f27b967a488bb72fe21c5be82fc70d1104f02",
|
||||
"size": 3488
|
||||
"sha256": "95b2e4eb3d78b607945cc6fad29c97a2e133eff4c427620d5c04b044f78abe10",
|
||||
"size": 3763
|
||||
},
|
||||
"python/_iqclosure/iqpilot/common/spinner.py": {
|
||||
"mode": 420,
|
||||
@@ -286,13 +286,13 @@
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/manager/process.py": {
|
||||
"mode": 420,
|
||||
"sha256": "4fb7af7d336ccdf7f0f54e50135618d191a56003bf7647d8dd98814c412f0ae4",
|
||||
"size": 11456
|
||||
"sha256": "d036d82e2163a249186238375fb82f8dca250fae2272428ea47a46e4d6a8649d",
|
||||
"size": 11519
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/manager/process_config.py": {
|
||||
"mode": 420,
|
||||
"sha256": "458355df663aed2a81c234ab693658040e11c97ad3abec8a2da222d00ce75a35",
|
||||
"size": 11240
|
||||
"sha256": "810bbd9bf9d211b1c54bfaaf56992b52e9a08a4cd0d1919d43a0a3b907401313",
|
||||
"size": 11656
|
||||
},
|
||||
"python/_iqclosure/iqpilot/system/micd.py": {
|
||||
"mode": 420,
|
||||
@@ -351,28 +351,28 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "e0449bd6ce019d9752980caf4f3cdc8bfe592d31e83fc1dc30c70171d581e0fb",
|
||||
"size": 135536
|
||||
"sha256": "80cd58a10f6356fcad68063a474458653acbae17dfc8a66791256ec1fc109036",
|
||||
"size": 135552
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "21403090115a8c9312a21ae8af0904e74f13d2b87a4801603dabe595efa70217",
|
||||
"sha256": "81e12476cedca56039fe9bf194cc9fd1a80b223c987e212a3208c64ff1390b26",
|
||||
"size": 67664
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "b1e1a82addf9d3de383c80f78e279ac63875d693e938e5f1840f941f5191ffc9",
|
||||
"size": 204624
|
||||
"sha256": "9d7e7fd9d1a3d2ff6ba8140fbe3743502151768f7d2c22625ffe2a78b3c8cd7b",
|
||||
"size": 204640
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "db35b67432069f507401cffc2f299e2b8ae2d1b97c4c316f4a9247253cd8393a",
|
||||
"size": 69752
|
||||
"sha256": "c39b482f192406ab8f3ec4733f2da8131ec1d9d5c791189035e42504d8e6132f",
|
||||
"size": 69768
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "937701d3f6fab98f31c0bfd57f731dadb1e851684096582bab8c36d363d4558e",
|
||||
"size": 203072
|
||||
"sha256": "5524a08ebc9918fabf6d8c7d2ccdb89ac67cbf8f017e4d00989bf88dc9720b12",
|
||||
"size": 203088
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/flockd/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -381,12 +381,12 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "b17aad237c258b7ccb0a5daf89bb097ea09c86dfcd5c71727d83da2c7909bcb2",
|
||||
"size": 202168
|
||||
"sha256": "364a06ba9338c61fe904c6c93e3be7bc567b0881cffaaa62b7cba0d67a5f3c04",
|
||||
"size": 202184
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "9116cf44650d16b16505fec4252f2aa43dade0698e79bbb202f5f45f6941449c",
|
||||
"sha256": "08a7990bb84f88505eb5e58745b339b59ada3cc2b802c5f2396281cb03af1c84",
|
||||
"size": 68080
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/__init__.py": {
|
||||
@@ -396,68 +396,68 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": {
|
||||
"mode": 420,
|
||||
"sha256": "b351039bd804ee830cb97d170b844416a93d16a11d96eea0a06e6e7784956054",
|
||||
"sha256": "ec5e60ae7ebed56e6613216115b25e3f7388afd374619a656642118b0506642a",
|
||||
"size": 2100238
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "225305ece452c6c814a7ff09cb4b3e056e6058abf2ad0f4da45ea9973ee72ad2",
|
||||
"size": 268064
|
||||
"sha256": "b9d5402b525987bc9939bf30113debde997d07a7ab0a5922bf1954cea7cb7757",
|
||||
"size": 268080
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "11cc70c1969f9dd881a70f34acd19b236f5fafa24db3cca8460dfa30a613f2ca",
|
||||
"size": 406216
|
||||
"sha256": "68787d021840f0e1ee1babd3e4e781324c9b4e1bb8de38e78ac9fb57d967ba7c",
|
||||
"size": 406176
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "e53a4d22b74a31ea6701cc391fc9d7df5942062e6d9ecc213710ef3fa56ca6e4",
|
||||
"sha256": "405fbafd6e385b7f6fa5f20b1ef1fa38cbd04952edef764efffbecbbebcd8f14",
|
||||
"size": 68048
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "dad03a293a193ad4d33cfc1c32ffc865e702fd4cb6456143a75511c47ef084cf",
|
||||
"size": 335728
|
||||
"sha256": "2449bf7779155e546ea14a5c10ee16be174da6993f6ab25e2aa59de007b5078b",
|
||||
"size": 335776
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "8b9130dd51450ed3b703a68c995c4ce08dbad4818044138cc7518abbbb9f48da",
|
||||
"size": 271680
|
||||
"sha256": "951fbff54e5fd1c667ca73359ea015e9cf79dcd55abb7f8b1bc857a38e11a54a",
|
||||
"size": 271696
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "31d289bdb733dfebe80961b42a8d6a76347889c7fa97007ec827dac9985874f8",
|
||||
"sha256": "2fa9a1e9352721a03f2eaa4ecf3719787baafc35fb37d71e0b6372656cde6d5f",
|
||||
"size": 134408
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "3f1b2f23b2ef27f0cdeadc291cde98a0affd70658d01e6c943c6dd220f6775ea",
|
||||
"size": 3715848
|
||||
"sha256": "d342ef73b4fd9d60407c60d0c3768668e8bdbb0d9702f163aec4893f8d49af6c",
|
||||
"size": 3715880
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "133d8474b5d458bc6f4d1303f921b9891464a82e88dcd0e1ab0af75d9b309886",
|
||||
"size": 136448
|
||||
"sha256": "cf6cc790e765adc5913c23ff32dea23588c1fb8608c6a8043fbc9b1bb2b662e8",
|
||||
"size": 136472
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "76395e8f587f650a30633194a173797946d86eff4ed97faefb1c937bd3b2a0c7",
|
||||
"sha256": "4d66dbd069d90ee956feac23130c5a14338f3d66492180dd3cd945f8a5c4ddad",
|
||||
"size": 68208
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "7b9bdb554b6ea169c2eeb24c74e7396c314b8120365e2650d0a315e89f9ed370",
|
||||
"sha256": "d5227394abae38d2118d7e1df8a142ad2137a28e02679d29d2426c3ac8a60ba8",
|
||||
"size": 67840
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "34e7846abcd1adf3038bdda93e6fac85e71bd843f51dea03a7c058f1be3fbed4",
|
||||
"size": 135648
|
||||
"sha256": "59cba66846b23370b9c7b20d108db8bf6f1c7dbc8a49958621905e0cb322fbe9",
|
||||
"size": 135664
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "28c6e7b7f1d8ce04fec673fae9b3d61c17e34ead497d6c5c31b7145ce1251feb",
|
||||
"size": 269568
|
||||
"sha256": "cc1be0247694a84b596e1333d53fa23a44fa2353b8b635f95b0329a5ffef5585",
|
||||
"size": 269600
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/uploaderd/__init__.py": {
|
||||
"mode": 420,
|
||||
@@ -466,8 +466,8 @@
|
||||
},
|
||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": {
|
||||
"mode": 493,
|
||||
"sha256": "5b359de266caca30a36922510d6eb8148c371117f9de9884ba40d2cf59c917b9",
|
||||
"size": 204280
|
||||
"sha256": "8a4926ba1d3bcf80326f699b1f9c775cd1fbe9d4c7981ba47d8232a8d4aedf79",
|
||||
"size": 204296
|
||||
},
|
||||
"runtime": {
|
||||
"entries": {
|
||||
@@ -510,25 +510,25 @@
|
||||
}
|
||||
},
|
||||
"signatures": {
|
||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "3woPJlhuOMUSFXoJmkDRMYUaB92k+DN3oVWIF5MXT017jl+2xfqQtzQ/ElREnon3SJQzoUl1b3gziO9w8xfWAA==",
|
||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "9PBGNS4oqUIG/Q1qC5Ahc/2zksGoK9cVaVRJR5LOe/z7j3uLgFxd/5z500NNtm0OxFySGQtJPF+mbuF2iirOBg==",
|
||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "4z564REmz4fZaCTWtm+A2kWE0QpDo706Ue3ZpDF4gZr8/sn+VWgNC54pK4ke1AiKi8Q062sPN2vHBGwoufJzDw==",
|
||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "UZNYlPkre3vkKEBZJWgaKOlyDp0ZZcXHeVomUJtaEeE26xB4jwxJ6af4LTC3ePq2x2Tlk8sBYqifCxhPQe5NAA==",
|
||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "qCQEhyUzeOdkZP1KHk+46aoV4JMYw14RLUt7uk/i1fNrmtDL+PdbzW78VGSN/Rx0/LUcSkqs1JglW88vVfefDg==",
|
||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "VOiMhBDEXKfhkxZ7iYvUZoFxFd4rLoRj+Ve/F+aqZi59PpnJSrMg/YfECDHBokkThk4h1ltPlxa9Dn7qAKc7BQ==",
|
||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "wPTnKdQFxPoPgBvh7YhVRL0uM9+81vpkKKP1RZdCxUWMBn7cB/XfiDHyxq8I6l0g0YCTdWFnRzbxDTnsuOPYBQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "3aW1fuOPBfWsSnz/1f3KpjElnWW29uek0qKzP0rKN0MODmqv3HoIZfWxzKQyrIYivJnCTG6XIAjwH0u3IZCKAw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "VXk+vwJBH9AmA50BbIlhJOLRFl+RTjOmqTw3h6gdt0OO1bIBH0KvBzFuuAQ08fQxqdumffC6I3U4816Lti8YCQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "6CuLsxr/i/vdwmhaMvGUvPLuyf/rCQDKD4FAhefZZA1SNeNQe+JikmQgTKIRK8rsZnysmHYYOufqAY0HblLFBg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "nd4FM7UAwEGVQeuWhybGZmKTmCvvkAvSQTu0XBVTlOic+C0WYHYu7qfFnxvx5LJAp+qWoPB1iHdiY2QwcxGxDg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "TBb/fVj4cvVsiWn4aGgWE0npbkAVr4tl8iyceqZoye1dY3fwofjHOpCY/sbY5j1ZHR2H2garFWefY6bCu3piDA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "GUR2UOxQ0uLBe3dMM2/wy9yvPvXLT+H9UzVEpKQF4v0858XiOVGSetI5poGUgJQRN/uHJLpq4AhVsP5skHtHAQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "qr7jtGz9X/npoWL5rx1RPY+wnCh+O+8ONo05o5MAElB7HUFWMs0Udef8WO2Xox7vTjVWk0c3xoXGfIo3YCe3BA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "N02iLJw3SHYRWTc1OrPhHe/6M8M3utM89Fh8p8e+tTDqsbEkbqTRmMP2Ef8IMH+5r9k24+y3R+OV6tPy6Q/wBg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "o/5/vvZ4pAz2Bo3sFWr40ztcwqJ48/DLtnSEqXeglcEAWlfTiXlMGOrsH1UIdA3MQbiLbx9IgpH6Y1NNh6NwCg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "ovdy4zjoZ9GMMTwAox6mL4RO56ry0yh/v7vzUyQqxe2xZtoxMf4b7CC+ntIkHB/P1Admghd0HXlRNUBRZ+eABQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "hIEtlZhxGDMMhsturD7KzH362pdtH1RZsfL/N7aYR5TsODVR255rjc3gKE7Qdsfh/+MChQ8cFXWErMXlNzrIAw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "1q0GMB/Wq/FuQ5rACM9nLl9norwGsoZwn1BPjp1OZAcXpFOkgLVGYRdUuZi3OKuW/FuFTjWQMrfq4VTc0UYrBg==",
|
||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "37a/+B+GI+mZAk2XtsdIeDYKZmpvnKIR5exngcukpkVeKmyhgkJ+xbMxsmwGcwuIZkvKdcKoXLb3KwZteatdAQ=="
|
||||
"python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "tV3zvq8PZd4MgIU1hjzjpVxS8puOkVUUsJsSYb2fjeOqkBv6KG3oIlN+TPGiwwO7YX8dO8dFivZWGnktKWKPCg==",
|
||||
"python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "kG8Ifpx65b0dhdTdfFhLr65vGa1O5enjiCI9N3aGd5+aOE7DdKJPID4Q3vIIjMZqMdoKPTdBLj3MaPEYXL3pCg==",
|
||||
"python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "1Dh3vRWc91DfHWg7pw9GhZ6O5eT335f4utjxSzHh8Y1wvwButYfsEO5DUZ2KNss5IAKDy7O4/CpnACD/64UYDg==",
|
||||
"python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "6Fdo8Du4ZUMt8241uRDjLVoy1a2flzQNeXMfaVuRaMU8aYZZixqvaYPeanZDPOTvpy6PxaFVZYYnBR/cqokNCw==",
|
||||
"python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "YTL4x/JaFnZCALPoyET84LvOcISGB5vrpTYn5b87kSDdcWPDwiTyEAXUuueOQGRQXVzZJj4UC+zal2DEA2QlAw==",
|
||||
"python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "KHqjlPIClO9hg2LxyOzRismA38ysUPxci0KCiHrydE8W7Nbd3LMMR1/9/rUvPUfRYY/szpkfvkZTlMwo26R5BQ==",
|
||||
"python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "Uas3ReVuTgjJxr1elZ/26R8/6StRaFrMPD16t7GWGj6PTG+CiUOPn4oiiJgfumevnrYw4xGGLRsfZQhFHaUHAA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "39bSI5v9Mg9VQLo3PmfUBmfHE1hKjTD2Jfgak/W3m1FJ7eXROhUjts6bsY5pXsHDx6MTcEw35IUr7Q8v+3bQBg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "hB1aGUsLCYcFSLxGxg1nuRzbrA1Uv/StOQv0V/0L8v73Z7xakXYFW8h/C5xD2/hNIGFMaNc7GLOyc2GwN7tVAg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "LlBVzMoPeK8ypvzgXXYkqmooV6V1lHtS6Ym5VPj/fNFn79hWfhbsjwY9A463hs3QzaxGh5OWwcc1pmFc6USODw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "nq7AH2XYZuAxhGfHfgc3haBGbu5bDwOI15mI++Be3VYsVah0P+Fqd0F5G6dZjIFo5fbuO0FH7/LHOlEnxRQcBw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "m2y/Lozqs16IZsrpL+OOQ0MQCWEB+EuyacYa/TFch4KxwPHVrEnh+zKtGdeIhcd7pVkUd1IRkFVnWGGvBx+pCg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "+njDWbhjEsFL1WzGlL0fN5ygbqGbfwInwaAquDeC5aYgbrwvJOdnwonJgxV0fd0ABzIwfuUFzSMZg6F3qI84BA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "G8sfe52XB1m4Lc197oLD51bwbXOZXkpOtAsgiMHZHwbayEFsPeI2Ls/R4ZOcPYTjztXDKYt68Ig8QJblRanTCQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "jr8rsgKsxDYBuY58XqIqMkb9pW78Jb6rBGaEHLZRtWS6z58td37+PBesMzzg4J1GNov4RKcZfMbaANBui1OnAA==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "QbprGqwfKC9bo4xs8pNieYI/TOwLOUNv4YVHhXPS/2xVU5bS+aDr71aD/o4PF3UmkJrMW/94b8X22Dy19SYEDQ==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "Iv9RL4rXHell9BfRp6PoWxD3TnT+WLugypT3aG4Ukf/iMqPVPizGtqfJY/axQY8jItBGTXcIyfZA9O6juGpfBg==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "KKD5TdLEDBtDy+YoUgglFkpHVJjvn9K4xlzUF7doWIAo1+n3ySTYQ4V7+iJ04H0Axs3Gsp0d0ytDui5qw09+Cw==",
|
||||
"python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "C4po9GxTKUlww19PaUJUi+kUTBTTVYyUMjAvAhNYAVcOS6mpVNMIBX7UCt3XcTtlLU+q+goE0Mw68LvoMza4AQ==",
|
||||
"python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "l1lWA8GLEToT4GDa96aEt6TFO8RDP/WSHgXV+9mge8cHQ82UVrVJKX98andFvKDaNGPjZgR+gK5gslEMt2dVCg=="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
mxOyhKQjRuoHrbPQQSnMJaJzcXKHxcSlSDfdKtivSLLcyR4S/xnfQ+cT/LW9JnoF6qbUc1uKFn8BEKF+HUOADA==
|
||||
HlmJ/WkPaO0L0omQG7BWUtHYKzp2ZTFvaVu4BDpACrkluSoWeyX0suOZlU29fJvRI+nWhBEkRW7807toLyrNAQ==
|
||||
|
||||
@@ -6,6 +6,7 @@ import subprocess
|
||||
from iqpilot.common.params import Params
|
||||
|
||||
PARAM = "GitAuthBlob"
|
||||
PARAMS_DIR = os.environ.get("PARAMS_DIR", "/data/params/d")
|
||||
KEY_DIR = "/data/konn3kt"
|
||||
KEY_PATH = os.path.join(KEY_DIR, "git_auth.key")
|
||||
HELPER_PATH = os.path.join(KEY_DIR, "git_credential_helper.py")
|
||||
@@ -51,6 +52,48 @@ if __name__ == "__main__":
|
||||
'''
|
||||
|
||||
|
||||
def _params_get(name: str) -> bytes | None:
|
||||
# Params -> cereal -> iqdbc: that chain is unavailable mid-bootstrap (this module's
|
||||
# callers install those very packages), so fall back to the params file directly,
|
||||
# exactly like the embedded credential helper does.
|
||||
try:
|
||||
return Params().get(name)
|
||||
except Exception:
|
||||
try:
|
||||
with open(os.path.join(PARAMS_DIR, name), "rb") as f:
|
||||
return f.read()
|
||||
except OSError:
|
||||
return None
|
||||
|
||||
|
||||
def _params_put(name: str, value: bytes) -> None:
|
||||
try:
|
||||
Params().put(name, value)
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
os.makedirs(PARAMS_DIR, exist_ok=True)
|
||||
tmp = os.path.join(PARAMS_DIR, f".tmp_{name}")
|
||||
fd = os.open(tmp, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o644)
|
||||
with os.fdopen(fd, "wb") as f:
|
||||
f.write(value)
|
||||
f.flush()
|
||||
os.fsync(f.fileno())
|
||||
os.replace(tmp, os.path.join(PARAMS_DIR, name))
|
||||
|
||||
|
||||
def _params_remove(name: str) -> None:
|
||||
try:
|
||||
Params().remove(name)
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
os.unlink(os.path.join(PARAMS_DIR, name))
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
def _load_or_create_key() -> bytes:
|
||||
from cryptography.fernet import Fernet
|
||||
try:
|
||||
@@ -80,7 +123,7 @@ def set_credentials(username: str, token: str) -> None:
|
||||
blob = Fernet(_load_or_create_key()).encrypt(
|
||||
json.dumps({"u": username, "t": token}).encode()
|
||||
)
|
||||
Params().put(PARAM, blob)
|
||||
_params_put(PARAM, blob)
|
||||
try:
|
||||
install_credential_helper(DEFAULT_REPO_DIR)
|
||||
except Exception:
|
||||
@@ -89,7 +132,7 @@ def set_credentials(username: str, token: str) -> None:
|
||||
|
||||
def get_credentials() -> tuple[str, str] | None:
|
||||
"""Return (username, token), or None if unset / unreadable."""
|
||||
blob = Params().get(PARAM)
|
||||
blob = _params_get(PARAM)
|
||||
if not blob:
|
||||
return None
|
||||
try:
|
||||
@@ -101,7 +144,7 @@ def get_credentials() -> tuple[str, str] | None:
|
||||
|
||||
|
||||
def clear_credentials() -> None:
|
||||
Params().remove(PARAM)
|
||||
_params_remove(PARAM)
|
||||
|
||||
|
||||
def has_credentials() -> bool:
|
||||
|
||||
@@ -76,6 +76,13 @@ class Ratekeeper:
|
||||
self.avg_dt = MovingAverage(100)
|
||||
self.avg_dt.add_value(self._interval)
|
||||
|
||||
def reset(self) -> None:
|
||||
self._remaining = 0.0
|
||||
self._last_monitor_time = -1.
|
||||
self._next_frame_time = -1.
|
||||
self.avg_dt = MovingAverage(100)
|
||||
self.avg_dt.add_value(self._interval)
|
||||
|
||||
@property
|
||||
def frame(self) -> int:
|
||||
return self._frame
|
||||
@@ -84,6 +91,10 @@ class Ratekeeper:
|
||||
def remaining(self) -> float:
|
||||
return self._remaining
|
||||
|
||||
@property
|
||||
def lag(self) -> float:
|
||||
return max(0., -self._remaining)
|
||||
|
||||
@property
|
||||
def lagging(self) -> bool:
|
||||
expected_dt = self._interval * (1 / 0.9)
|
||||
|
||||
@@ -104,7 +104,7 @@ class ManagerProcess(ABC):
|
||||
self.stop(sig=signal.SIGKILL)
|
||||
self.start()
|
||||
|
||||
def stop(self, retry: bool = True, block: bool = True, sig: signal.Signals | None = None) -> int | None:
|
||||
def stop(self, retry: bool = True, block: bool = True, sig: signal.Signals | None = None, timeout: float = 5) -> int | None:
|
||||
if self.proc is None:
|
||||
return None
|
||||
|
||||
@@ -119,7 +119,7 @@ class ManagerProcess(ABC):
|
||||
if not block:
|
||||
return None
|
||||
|
||||
join_process(self.proc, 5)
|
||||
join_process(self.proc, timeout)
|
||||
|
||||
# If process failed to die send SIGKILL
|
||||
if self.proc.exitcode is None and retry:
|
||||
@@ -245,8 +245,8 @@ class BundleProcess(NativeProcess):
|
||||
_normalize_bundle_modes(self.bundle)
|
||||
super().start()
|
||||
|
||||
def stop(self, retry: bool = True, block: bool = True, sig: signal.Signals | None = None) -> int | None:
|
||||
return super().stop(retry=retry, block=block, sig=signal.SIGTERM if sig is None else sig)
|
||||
def stop(self, retry: bool = True, block: bool = True, sig: signal.Signals | None = None, timeout: float = 5) -> int | None:
|
||||
return super().stop(retry=retry, block=block, sig=signal.SIGTERM if sig is None else sig, timeout=timeout)
|
||||
|
||||
|
||||
class PythonProcess(ManagerProcess):
|
||||
|
||||
@@ -75,6 +75,11 @@ def navd_onroad(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
def navrenderd_onroad(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
return started and params.get_bool("NavigationEnabled") and params.get_bool("OnScreenNavigation")
|
||||
|
||||
def navincidentd_onroad(started: bool, params: Params, CP: car.CarParams) -> bool:
|
||||
return started and params.get_bool("NavigationEnabled") and bool(params.get("WazePoliceApiKey")) and (
|
||||
params.get_int("WazePoliceAlertMode") > 0 or params.get_bool("WazePoliceShadow")
|
||||
)
|
||||
|
||||
def iqmapd_needed(params: Params) -> bool:
|
||||
return (
|
||||
params.get_bool("IQRoadNameOverlay")
|
||||
@@ -195,6 +200,7 @@ procs += [
|
||||
BundleProcess("backup_manager_k3", "iqpilot_hephaestusd_private", "iqpilot_private.konn3kt.backups.backup_orchestrator",
|
||||
and_(only_offroad, hephaestus_ready_shim, not_low_power)),
|
||||
BundleProcess("navd", "iqpilot_navd_private", "iqpilot_private.navd.navd", navd_onroad, restart_if_crash=True),
|
||||
BundleProcess("navincidentd", "iqpilot_navd_private", "iqpilot_private.navd.navincidentd", navincidentd_onroad, restart_if_crash=True),
|
||||
BundleProcess("navrenderd", "iqpilot_navd_private", "iqpilot_private.navd.navrenderd", navrenderd_onroad, restart_if_crash=True),
|
||||
BundleProcess("iqmapd", "iqpilot_navd_private", "iqpilot_private.navd.iqmapd", iqmapd_onroad, restart_if_crash=True),
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -610,7 +610,8 @@ class CarController(CarControllerBase):
|
||||
leadDistance = hud_control.leadDistance if self.CCS is mlbcan else \
|
||||
(min(8, hud_control.leadDistance) if hud_control.leadDistance != 0 else 0)
|
||||
self.leadDistanceBars = min(3, hud_control.leadDistanceBars)
|
||||
acc_hud_status = self.CCS.acc_hud_status_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive, CC.cruiseControl.override)
|
||||
acc_hud_status = self.CCS.acc_hud_status_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive,
|
||||
CC.cruiseControl.override or CS.out.gasPressed)
|
||||
set_speed = hud_control.setSpeed * CV.MS_TO_KPH
|
||||
decel = dVisual(self.CCS, CS)
|
||||
hud_kwargs = {"hud_text": self._mlb_acc_hud_text(hud_control, set_speed),
|
||||
|
||||
@@ -347,4 +347,6 @@ class CarInterface(CarInterfaceBase):
|
||||
@staticmethod
|
||||
def _get_params_iq(stock_cp: structs.CarParams, ret: structs.IQCarParams, candidate, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw], alpha_long: bool, is_release_iq: bool, docs: bool) -> structs.IQCarParams:
|
||||
ret.longitudinalStoppingSpeedOverride = get_longitudinal_stopping_speed_override(candidate, stock_cp.flags)
|
||||
override_excluded_platforms = VolkswagenFlags.MLB | VolkswagenFlags.MEB | VolkswagenFlags.MQB_EVO
|
||||
ret.longActiveWithGasOverride = alpha_long and not bool(stock_cp.flags & override_excluded_platforms)
|
||||
return ret
|
||||
|
||||
@@ -112,7 +112,7 @@ def create_acc_accel_control(packer, bus, acc_type, accel, acc_control, stopping
|
||||
"ACS_Sollbeschl": accel if acc_enabled else 3.01,
|
||||
"ACS_zul_Regelabw": comfortBand if acc_enabled else 1.27,
|
||||
"ACS_max_AendGrad": jerkLimit if acc_enabled else 5.08,
|
||||
"ACS_Schubabsch": 0,
|
||||
"ACS_Schubabsch": 1 if acc_enabled and accel > 0.05 else 0,
|
||||
"ACS_MomEingriff": 0,
|
||||
"ACS_ADR_Schub": 0,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
"""
|
||||
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/
|
||||
"""
|
||||
|
||||
import pytest
|
||||
|
||||
from iqdbc.can import CANPacker
|
||||
from iqdbc.car.volkswagen import pqcan
|
||||
|
||||
|
||||
@pytest.mark.parametrize("accel, acc_control, expected", [
|
||||
(-1.0, 1, False),
|
||||
(0.0, 1, False),
|
||||
(0.05, 1, False),
|
||||
(0.051, 1, True),
|
||||
(1.0, 1, True),
|
||||
(1.0, 0, False),
|
||||
])
|
||||
def test_positive_acceleration_prevents_fuel_cutoff(accel, acc_control, expected):
|
||||
packer = CANPacker("vw_pq")
|
||||
messages = pqcan.create_acc_accel_control(
|
||||
packer, 0, 1, accel, acc_control, False, False, False, 0.2, 0.3, False,
|
||||
)
|
||||
assert len(messages) == 1
|
||||
_, data, _ = messages[0]
|
||||
assert bool(data[1] & 0x80) is expected
|
||||
@@ -100,6 +100,23 @@ class TestVolkswagenPlatformConfigs:
|
||||
assert bool(params.flags & VolkswagenFlagsIQ.IQ_PQ_ACC_FTS_EPB) is expected
|
||||
assert bool(params.safetyConfigs[-1].safetyParam & VolkswagenSafetyFlags.PQ_ACC_FTS_EPB) is expected
|
||||
|
||||
@pytest.mark.parametrize("candidate, alpha_long, expected", (
|
||||
(CAR.VOLKSWAGEN_PASSAT_B7, False, False),
|
||||
(CAR.VOLKSWAGEN_PASSAT_B7, True, True),
|
||||
(CAR.VOLKSWAGEN_GOLF_MK7, False, False),
|
||||
(CAR.VOLKSWAGEN_GOLF_MK7, True, True),
|
||||
(CAR.AUDI_Q5_MK1, True, False),
|
||||
(CAR.VOLKSWAGEN_ID4_MK1, True, False),
|
||||
(CAR.VOLKSWAGEN_GOLF_MK8, True, False),
|
||||
))
|
||||
def test_supported_vw_longitudinal_stays_active_during_gas_override(self, candidate, alpha_long, expected):
|
||||
fingerprints = {bus: {} for bus in range(7)}
|
||||
params = CarInterface.get_params(candidate, fingerprints, [], alpha_long=alpha_long, is_release=False, docs=False)
|
||||
params_iq = CarInterface.get_params_iq(params, candidate, fingerprints, [], alpha_long=alpha_long, is_release_iq=False, docs=False)
|
||||
assert params_iq.longActiveWithGasOverride is expected
|
||||
if expected:
|
||||
assert bool(params.safetyConfigs[-1].safetyParam & VolkswagenSafetyFlags.ALLOW_LONG_ACCEL_WITH_GAS_PRESSED) is alpha_long
|
||||
|
||||
|
||||
@pytest.mark.parametrize("button_type", (
|
||||
structs.CarState.ButtonEvent.Type.setCruise,
|
||||
|
||||
@@ -250,6 +250,8 @@ class TestVolkswagenPqLongSafety(TestVolkswagenPqSafetyBase, common.Longitudinal
|
||||
self._rx(self._user_gas_msg(1))
|
||||
self.safety.set_controls_allowed(True)
|
||||
self.assertTrue(self._tx(self._accel_msg(0.5)))
|
||||
self.assertTrue(self._tx(self._accel_msg(0.0)))
|
||||
self.assertTrue(self._tx(self._accel_msg(-0.5)))
|
||||
|
||||
|
||||
class TestVolkswagenPqLowlineSafety(TestVolkswagenPqSafetyBase):
|
||||
|
||||
1
artifacts/package_sources/tinygrad/.iqpilot-revision
Normal file
1
artifacts/package_sources/tinygrad/.iqpilot-revision
Normal file
@@ -0,0 +1 @@
|
||||
95bfc521351d3acba7338605686155a9ee8b0009
|
||||
93
artifacts/runtime/env_sync.sh
Executable file
93
artifacts/runtime/env_sync.sh
Executable file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
# Python env + proprietary runtime sync for the openpilot tree.
|
||||
#
|
||||
# Two callers, same steps:
|
||||
# - launch_chffrplus.sh sources this at boot and calls sync_python_env. When an
|
||||
# update was already prepared this is a warm no-op; when there is real work
|
||||
# (local dev edits, failed prep) it runs under the boot spinner as before.
|
||||
# - updated.py executes this standalone right after an update is applied to
|
||||
# disk, so the heavy uv/package work happens offroad with the stack idle
|
||||
# instead of at boot alongside everything else starting at once.
|
||||
#
|
||||
# Variables assigned here (VENV_SITE_PACKAGES, BASE_SITE_PACKAGES, ...) are
|
||||
# intentionally global: the sourced caller composes PYTHONPATH from them.
|
||||
|
||||
sync_python_env() {
|
||||
local DIR
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." >/dev/null && pwd )"
|
||||
|
||||
# Best-effort: install the verified runtime before anything starts the services that
|
||||
# need it. This only succeeds on a tree that has built _verified_import.so, so on a
|
||||
# prebuilt release install it is a no-op -- there the runtime arrives with the IQ.OS
|
||||
# flash, whose image bakes it in. What actually fixes the 20+ minute first-install hang
|
||||
# is --no-block on the service starts below: hephaestusd/ble-transportd/flockd each
|
||||
# ExecStartPre-wait up to 600s for /usr/libexec/iqpilot/iqpilot_bundle_runner.
|
||||
if [ -x "$DIR/iqpilot/system/proprietary_runtime/install_verified_runtime.sh" ]; then
|
||||
"$DIR/iqpilot/system/proprietary_runtime/install_verified_runtime.sh" || true
|
||||
fi
|
||||
|
||||
# Install/update proprietary runtime bundles.
|
||||
if [ -f "$DIR/artifacts/runtime/ensure_private_installed.sh" ]; then
|
||||
bash "$DIR/artifacts/runtime/ensure_private_installed.sh" || true
|
||||
elif [ -x "$DIR/scripts/iqpilot/ensure_navd_private_installed.sh" ]; then
|
||||
# Backward-compat fallback for older trees.
|
||||
"$DIR/scripts/iqpilot/ensure_navd_private_installed.sh" || true
|
||||
fi
|
||||
|
||||
PYTHONPATH="$DIR" /usr/local/venv/bin/python3 -c "from iqpilot.common.git_creds import install_credential_helper; install_credential_helper('$DIR')" 2>/dev/null || true
|
||||
PACKAGE_LOCK_SHA="$(sha256sum "$DIR/uv.lock" | awk '{print $1}')"
|
||||
INSTALLED_PACKAGE_LOCK_SHA="$(cat "$DIR/.iqpilot-package-lock-sha256" 2>/dev/null || true)"
|
||||
BASE_SITE_PACKAGES="$(/usr/local/venv/bin/python3 -c 'import site; print(site.getsitepackages()[0])')"
|
||||
PROJECT_RAYLIB="$("$DIR/.venv/bin/python3" -c 'import importlib.metadata; print(importlib.metadata.distribution("raylib").locate_file(""))' 2>/dev/null || true)"
|
||||
if [[ "$PROJECT_RAYLIB" = "$DIR/.venv"/* ]]; then
|
||||
sudo rm -rf "$DIR/.venv"
|
||||
rm -f "$DIR/.iqpilot-package-lock-sha256"
|
||||
INSTALLED_PACKAGE_LOCK_SHA=""
|
||||
fi
|
||||
VENV_SITE_PACKAGES="$("$DIR/.venv/bin/python3" -c 'import site; print(site.getsitepackages()[0])' 2>/dev/null || true)"
|
||||
PACKAGES_READY=0
|
||||
if [ -d "$DIR/artifacts/package_runtime" ] && PYTHONPATH="$DIR/artifacts/package_runtime" /usr/local/venv/bin/python3 -c "import iqdbc, msgq, panda, rednose, teleoprtc, tinygrad" 2>/dev/null; then
|
||||
PACKAGES_READY=1
|
||||
elif [ "$PACKAGE_LOCK_SHA" = "$INSTALLED_PACKAGE_LOCK_SHA" ] && "$DIR/.venv/bin/python3" -c "import iqdbc, msgq, panda, rednose, teleoprtc, tinygrad" 2>/dev/null \
|
||||
&& "$DIR/.venv/bin/python3" "$DIR/iqpilot/system/runtime_packages_verify.py"; then
|
||||
# a top-level import passes on a partially extracted install (lazy backends),
|
||||
# so readiness also requires every wheel RECORD file to exist on disk
|
||||
PACKAGES_READY=1
|
||||
fi
|
||||
if [ "$PACKAGES_READY" != "1" ]; then
|
||||
UV_CACHE_DIR="$DIR/.uv-cache"
|
||||
if [ ! -x "$DIR/.venv/bin/python3" ]; then
|
||||
UV_CACHE_DIR="$UV_CACHE_DIR" uv venv --python /usr/local/venv/bin/python3 "$DIR/.venv" || return 1
|
||||
VENV_SITE_PACKAGES="$("$DIR/.venv/bin/python3" -c 'import site; print(site.getsitepackages()[0])')"
|
||||
fi
|
||||
sudo chown -R "$(id -u):$(id -g)" "$DIR/.venv" "$UV_CACHE_DIR" "$DIR/artifacts/package_sources" 2>/dev/null || true
|
||||
IQDBC_PACKAGE_SOURCE=""
|
||||
PACKAGE_SOURCES=()
|
||||
while IFS=$'\t' read -r package_name package_source; do
|
||||
PACKAGE_SOURCES+=("$package_source")
|
||||
if [ "$package_name" = "iqdbc" ]; then
|
||||
IQDBC_PACKAGE_SOURCE="$package_source"
|
||||
fi
|
||||
done < <(/usr/local/venv/bin/python3 "$DIR/iqpilot/system/runtime_package_sources.py" "$DIR")
|
||||
if [ "${#PACKAGE_SOURCES[@]}" = "0" ] || [ -z "$IQDBC_PACKAGE_SOURCE" ]; then
|
||||
return 1
|
||||
fi
|
||||
PACKAGE_BUILD_PYTHONPATH="$BASE_SITE_PACKAGES:$VENV_SITE_PACKAGES"
|
||||
UV_CACHE_DIR="$UV_CACHE_DIR" PYTHONPATH="$PACKAGE_BUILD_PYTHONPATH" PATH="/usr/local/venv/bin:/usr/bin:$PATH" \
|
||||
uv pip install --python "$DIR/.venv/bin/python" --no-build-isolation --no-deps --reinstall "$IQDBC_PACKAGE_SOURCE" || return 1
|
||||
UV_CACHE_DIR="$UV_CACHE_DIR" PYTHONPATH="$PACKAGE_BUILD_PYTHONPATH" PATH="/usr/local/venv/bin:/usr/bin:$PATH" \
|
||||
uv pip install --python "$DIR/.venv/bin/python" --no-build-isolation --no-deps --reinstall "${PACKAGE_SOURCES[@]}" || return 1
|
||||
printf '%s\n' "$PACKAGE_LOCK_SHA" > "$DIR/.iqpilot-package-lock-sha256"
|
||||
fi
|
||||
if [ -n "$VENV_SITE_PACKAGES" ]; then
|
||||
printf 'import site; site.addsitedir("%s")\n' "$BASE_SITE_PACKAGES" | sudo tee "$VENV_SITE_PACKAGES/iqpilot-system-venv.pth" >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
sync_python_env
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# NOTE: keep this file in lockstep with the launch-time expectations above --
|
||||
# updated.py invokes it standalone and launch_chffrplus.sh sources it.
|
||||
Reference in New Issue
Block a user