mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-26 00:47:10 +08:00
tidying and ci fixes
This commit is contained in:
parent
5c77e7c24f
commit
f0609cfc00
100
.efrocachemap
100
.efrocachemap
@ -420,7 +420,7 @@
|
||||
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/d5/f8/de3b22ac60d0caee44369117c8db",
|
||||
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/c7/37/660e2ceca8b9b2db2cfce5a9f6f0",
|
||||
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/d9/82/92157cb4f21fdd8c911eec910ad4",
|
||||
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/d0/6f/c2718eee7a68ac8acc1b884db2b3",
|
||||
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/50/bb/39239d1860008e70b3205f2d4767",
|
||||
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/ec/97/713007418488dd543cf6edcdd9d2",
|
||||
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/61/03/89070ca765e06da3a419a579f503",
|
||||
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/6f/88/b74dac280d4dbd07dea74abb5fc6",
|
||||
@ -431,8 +431,8 @@
|
||||
"assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/68/93/da8e9874f41a786edf52ba4ccaad",
|
||||
"assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/c0/03/106450033fe01fba06d733b6b107",
|
||||
"assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb",
|
||||
"assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/10/45/197ea6179209f0aa440fe5366a95",
|
||||
"assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/b1/71/34760e818883dfec12b9dde3deab",
|
||||
"assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/69/ee/bd7ab2f7da13e65efc46a9e5f78e",
|
||||
"assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/49/42/328c5ed7a47a5e9c44a1c11bb2f4",
|
||||
"assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/7e/9c/11e9717282006b4cd8cfc02f0764",
|
||||
"assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/23/b6/8f7175147d8a6d5de45c2147e294",
|
||||
"assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/82/eb/37ff44af76812097f9c98f05c730",
|
||||
@ -443,7 +443,7 @@
|
||||
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/07/37/ab65ccee3a555bd40e9661860c58",
|
||||
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/bf/71/11141b8a8c92604da47c7c575034",
|
||||
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/76/be/84e567de0aabd9f9145b62179c2c",
|
||||
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/a6/ad/7ee52772db14f9008044bb877ed1",
|
||||
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/23/18/33f3364310ccc4c03930e2ac50b0",
|
||||
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/d7/06/9d70642d0a4d1e3b1c2149d7a17c",
|
||||
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/8d/8a/dc288451eb6a1120a5868d64b771",
|
||||
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/4e/91/6f2a9a3ce733908e91377a6ddb9a",
|
||||
@ -452,8 +452,8 @@
|
||||
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/91/0a/35c4baf539d5951fc03a794c0e0b",
|
||||
"assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/41/a4/841ab82927c41a6bc8fc9ae5ea11",
|
||||
"assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/9d/51/f699dbd4beb88bc3cff699a287a7",
|
||||
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/c0/4e/c8a66ed415b8b0ce3ff30462b2a2",
|
||||
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/7f/bb/6239adeb551be5e09f3457d7b411",
|
||||
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/37/30/ba543ac18fa6c7f9721942d6984f",
|
||||
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/ab/35/644e4239cfa62a597a905412b90c",
|
||||
"assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/7c/98/c0f7c965a3ac36d86cc17f55428f",
|
||||
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/f2/af/afd1503c7a10cacaa15bc02369b2",
|
||||
"assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed",
|
||||
@ -3995,50 +3995,50 @@
|
||||
"assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e",
|
||||
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34",
|
||||
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a4/c9/4b7f9effbe8c100648900eaa3261",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/00/9b/eaa284f779a3de4213b79cd92107",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/42/55/3cb41badd1d45910283e0b64df88",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/95/ff/5c57780407fcb6b7feb0764706df",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/d8/40/839b1117d4f93b054eb85cb1b0d5",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/bc/15/56d8be246fe39a106db0439833b3",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a9/05/27ca686143f14394c1b8837d7cb2",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a5/86/afe3eee3898e9c9fb189f3b77e85",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ff/95/de9839cdfec8f326131aa05384c3",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/e2/26/17c4ae54581e4b5c0330b0719224",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a4/4c/b89ec4327945297f4d72f9d80d94",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/c6/55b8ba4e0b5c8975712fa0fd1767",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/0b/8b/05d548a8a72955c0cb386d9d60b3",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/60/27/721444bbebc52a864d8a04b2208c",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e2/f2/25cff5d0e4f918a9f6d57dfa5285",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/da/82/ec893df8e6ee94feed9ddb759e6e",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/46/6c/eb3d14ac4a6c363962a8066e39e5",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/54/b4/4f9767d0cea37f328844507e8ea7",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ff/b6/401674aa0a886de14f437947b728",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2d/6d/5f1c3004f2bf9258162379e26054",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/05/99/3cadc83ce9288f9352a3a4a5559c",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/c2/1c132470c13fc8af1f5d94dfbf6c",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/98/a6/42ee7341d4a75c5d58f80d2f4dbc",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3a/b9/f01ad696e634735773da5f841407",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/8d/27bfcaedab349160f55ce618384e",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e3/74/6c47384a303b68378a80e6d00bac",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3c/2c/7eb58e0a6678fe13271ec4e1689f",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ce/a4/37f7da427da665e42b23689ee2b1",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/aa/d3/c1f6f9b2487397ff3b8deacdfb88",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a0/d1/065efb021ade658501fe3ccbd238",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7c/6e/116acc4f5c4d51608f56a74a1a35",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a3/59/9765f24b69af3382eb1ba72a175e",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/23/e7/978c348d104ad002d3cc0cef17e9",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d1/27/1635e8fd16e9e21e673f5cba7eb3",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fa/f1/9f93bc6fa9bbdc6547414528b22c",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4d/a7/b764b6fc1ac50a426e8fec3238df",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/91/d3/9689394fc2464ae3b0be6fb662ca",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/15/2c/29c2e9c783211c5184dc012a7e2a",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/30/84/1b5e42cc51d43c7c0ad256a5d0b8",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/5e/9c/726f930f02dece54d7f1e9be1565",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/c5/9b/fab63617403f92c0eb3af53c5ceb",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/92/b1/79f2c94d070fa8d5a279f67429c8",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/ab/72/2f6f56a9a47658b1b8ffbdd323ca",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/a7/82/3943a555db1dc3e2ca1ac281248b",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/76/4a/06e99575caeee5cf7273599ec9f0",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/4c/af/00c9c503d3f33bdadfb87a14095b",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/74/1c/2ba86b3d3de80ed1d15f0d326260",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/77/f5/604119cad298810d443e696ee4a3",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a3/87/4528de33dd1076f2a3bf535b8508",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/8a/c1/c6d51855fe24f16dad77cc45ef47",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/7f/5e/8897da98948c320f17faf8ea0656",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/63/30/a032035c499475cd0d55e281a7d7",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ae/06/59efc32e87d3283c7de7e7e85888",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/e3/48/b1d8a1628c5d28237d52f8759c48",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/32/1b/f4acb08ea6b95129bd23e703ca49",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0a/fc/6a216a4dd65d0e824f9fdf2244c9",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/6c/cf/453f32b097cf9265a884842ac405",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/58/92/6b1a58f3ba98a938f1dd6ca004dd",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/40/5f/6004485ca667cb2eef90095d3dbb",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d5/51/6049fc3c679136584cbf5ad75d02",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c4/11/9107ce942c7271450ecacdd422df",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e2/86/5c5ebf6c9ee05c38e3d426625ebf",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/1a/85/3fe1abb3209341ef039725477a51",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/77/10/9c8e7c5e6be88532ca2819690d39",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/98/21/935d1bb99fd8bb84b012028759ec",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a4/c1/3cb0db41ee9daccb07aa525d3a71",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/47/e0/0dbe6c9fb6c31c4826b2d9243ed8",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/16/d0/dd7a518e6fd1e022d77c036fffde",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a8/c9/257b60004447d6ceb5b8ad1f902c",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/93/95/9f971fe4eed57cccf67e3f575a18",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/56/42/4ccb8b84ef56f2741520c5b1271a",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/46/1f/efb3c908285041971a0000a3fbba",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/47/3a/f8335b21bdbf5069c4b46e154306",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/98/99/0a5eb773681f20b08aa22e487804",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9e/ea/c6a322e0ea311fd586c96e84d5db",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/19/3e/8ae66894c429a5a31bb278f2ae23",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/40/24d727e0a25c6e3254f168b89602",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d5/f6/e235ab00e48d060949896936ea45",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fe/59/c4f1e0815cdd4bf52399bc8b9ac8",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/4e/4e2e9eb401e21118b543cc267bc7",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/96/16/a5eaac79ea7ca52f963deaa39787",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/7e/80/44ea5ce953d612b27031f0d9ef3b",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/44/ef/1d29afdaaa33d39f67a3daffc34b",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ac/8e/aa6977c496137c902695cf1953af",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e1/5f/2c08ba18c967621fcc297982885c",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/9a/ab/1539aa9be0ad2ab44d0d85f20818",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/b5/e8/3519ffee6476c14130b658c63931",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/d2/55/eeb0bc76a02454ca14fb70775a68",
|
||||
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/7d/3e/229a581cb2454ed856f1d8b564a7",
|
||||
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/d3/db/e73d4dcf1280d5f677c3cf8b47c3"
|
||||
}
|
||||
1
.idea/inspectionProfiles/Default.xml
generated
1
.idea/inspectionProfiles/Default.xml
generated
@ -109,6 +109,7 @@
|
||||
<option value="typing.Sequence.register" />
|
||||
<option value="xml.dom.*" />
|
||||
<option value="type.__getitem__" />
|
||||
<option value="typing_extensions.assert_type" />
|
||||
</list>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
### 1.7.5 (20653, 2022-07-15)
|
||||
### 1.7.5 (20654, 2022-07-18)
|
||||
- Android build now uses the ReLinker library to load the native main.so, which will (hopefully) avoid some random load failures on older Android versions.
|
||||
- Android Google Play build now prints a message at launch if the billing library isn't available or needs to be updated (explaining why purchases won't work in that case).
|
||||
- Various minor bug fixes (mostly cleaning up unnecessary error logging)
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
namespace ballistica {
|
||||
|
||||
// These are set automatically via script; don't modify them here.
|
||||
const int kAppBuildNumber = 20653;
|
||||
const int kAppBuildNumber = 20654;
|
||||
const char* kAppVersion = "1.7.5";
|
||||
|
||||
// Our standalone globals.
|
||||
|
||||
@ -9,9 +9,10 @@ import asyncio
|
||||
from typing import TYPE_CHECKING, overload
|
||||
from dataclasses import dataclass
|
||||
|
||||
from typing_extensions import assert_type
|
||||
import pytest
|
||||
|
||||
from efrotools.statictest import static_type_equals
|
||||
# from efrotools.statictest import static_type_equals
|
||||
from efro.error import CleanError, RemoteError, CommunicationError
|
||||
from efro.dataclassio import ioprepped
|
||||
from efro.message import (Message, Response, MessageProtocol, MessageSender,
|
||||
@ -898,8 +899,10 @@ def test_full_pipeline() -> None:
|
||||
|
||||
# Make sure static typing lines up with what we expect.
|
||||
if os.environ.get('EFRO_TEST_MESSAGE_FAST') != '1':
|
||||
assert static_type_equals(response1, _TResp1)
|
||||
assert static_type_equals(response3, None)
|
||||
# assert static_type_equals(response1, _TResp1)
|
||||
assert_type(response1, _TResp1)
|
||||
# assert static_type_equals(response3, None)
|
||||
assert_type(response3, None)
|
||||
|
||||
assert isinstance(response1, _TResp1)
|
||||
assert isinstance(response2, (_TResp1, _TResp2))
|
||||
@ -935,7 +938,8 @@ def test_full_pipeline() -> None:
|
||||
|
||||
# Make sure static typing lines up with what we expect.
|
||||
if os.environ.get('EFRO_TEST_MESSAGE_FAST') != '1':
|
||||
assert static_type_equals(response6, _TResp1)
|
||||
# assert static_type_equals(response6, _TResp1)
|
||||
assert_type(response6, _TResp1)
|
||||
|
||||
# Now test adding extra data to messages. This should be transferred
|
||||
# into the encoded message, copied to the response, and again back
|
||||
|
||||
@ -38,8 +38,8 @@ class PipRequirement:
|
||||
# installing it. And as far as manually-installed bits, pip itself must
|
||||
# have some way to allow for that, right?...
|
||||
PIP_REQUIREMENTS = [
|
||||
PipRequirement(modulename='pylint', minversion=[2, 14, 4]),
|
||||
PipRequirement(modulename='mypy', minversion=[0, 961]),
|
||||
PipRequirement(modulename='pylint', minversion=[2, 14, 5]),
|
||||
PipRequirement(modulename='mypy', minversion=[0, 971]),
|
||||
PipRequirement(modulename='yapf', minversion=[0, 32, 0]),
|
||||
PipRequirement(modulename='cpplint', minversion=[1, 6, 0]),
|
||||
PipRequirement(modulename='pytest', minversion=[7, 1, 2]),
|
||||
@ -49,10 +49,10 @@ PIP_REQUIREMENTS = [
|
||||
PipRequirement(modulename='requests'),
|
||||
PipRequirement(modulename='pdoc'),
|
||||
PipRequirement(pipname='typing_extensions', minversion=[4, 3, 0]),
|
||||
PipRequirement(pipname='types-filelock', minversion=[3, 2, 6]),
|
||||
PipRequirement(pipname='types-requests', minversion=[2, 27, 29]),
|
||||
PipRequirement(pipname='types-pytz', minversion=[2021, 3, 8]),
|
||||
PipRequirement(pipname='types-PyYAML', minversion=[6, 0, 7]),
|
||||
PipRequirement(pipname='types-filelock', minversion=[3, 2, 7]),
|
||||
PipRequirement(pipname='types-requests', minversion=[2, 28, 2]),
|
||||
PipRequirement(pipname='types-pytz', minversion=[2022, 1, 2]),
|
||||
PipRequirement(pipname='types-PyYAML', minversion=[6, 0, 10]),
|
||||
PipRequirement(pipname='certifi', minversion=[2022, 6, 15]),
|
||||
PipRequirement(pipname='types-certifi', minversion=[2021, 10, 8, 3]),
|
||||
]
|
||||
|
||||
@ -1,229 +0,0 @@
|
||||
# Released under the MIT License. See LICENSE for details.
|
||||
#
|
||||
"""Functionality for harnessing mypy for static type checking in unit tests."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
import tempfile
|
||||
import os
|
||||
import subprocess
|
||||
import logging
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any
|
||||
|
||||
# Global state:
|
||||
# We maintain a single temp dir where our mypy cache and our temp
|
||||
# test files live. Every time we are asked to static-check a line
|
||||
# in a file we haven't seen yet, we copy it into the temp dir,
|
||||
# filter it a bit to add reveal_type() statements, and run mypy on it.
|
||||
# The temp dir should tear itself down when Python exits.
|
||||
_tempdir: str | None = None
|
||||
_statictestfiles: dict[str, StaticTestFile] = {}
|
||||
_nextfilenum: int = 1
|
||||
|
||||
|
||||
class StaticTestFile:
|
||||
"""A file which has been statically tested via mypy."""
|
||||
|
||||
def __init__(self, filename: str):
|
||||
# pylint: disable=global-statement, invalid-name
|
||||
global _tempdir, _nextfilenum
|
||||
# pylint: enable=global-statement, invalid-name
|
||||
|
||||
from efrotools import PYTHON_BIN
|
||||
|
||||
self._filename = filename
|
||||
self.modulename = f'temp{_nextfilenum}'
|
||||
_nextfilenum += 1
|
||||
|
||||
# Types we *want* for lines
|
||||
self.linetypes_wanted: dict[int, str] = {}
|
||||
|
||||
# Types Mypy gave us for lines
|
||||
self.linetypes_mypy: dict[int, str] = {}
|
||||
|
||||
print(f'Running Mypy static testing on "{filename}"...')
|
||||
with open(filename, 'r', encoding='utf-8') as infile:
|
||||
fdata = infile.read()
|
||||
|
||||
# Make sure we're running where the config is..
|
||||
if not os.path.isfile('.mypy.ini'):
|
||||
raise RuntimeError('.mypy.ini not found where expected.')
|
||||
|
||||
# Create a single shared temp dir
|
||||
# (so that we can recycle our mypy cache).
|
||||
if _tempdir is None:
|
||||
# Eww; not cleaning up this temp dir (though the
|
||||
# OS should eventually). Using TemporaryDirectory() gives us
|
||||
# a warning though because we don't explicitly clean it up.
|
||||
_tempdir = tempfile.mkdtemp()
|
||||
# print(f"Created temp dir at {_tempdir.name}")
|
||||
|
||||
# Copy our file into the temp dir with a unique name, find all
|
||||
# instances of static_type_equals(), and run mypy type checks
|
||||
# in those places to get static types.
|
||||
tempfilepath = os.path.join(_tempdir, self.modulename + '.py')
|
||||
with open(tempfilepath, 'w', encoding='utf-8') as outfile:
|
||||
outfile.write(self.filter_file_contents(fdata))
|
||||
results = subprocess.run(
|
||||
[
|
||||
PYTHON_BIN, '-m', 'mypy', '--no-error-summary',
|
||||
'--config-file', '.mypy.ini', '--cache-dir',
|
||||
os.path.join(_tempdir, '.mypy_cache'), tempfilepath
|
||||
],
|
||||
capture_output=True,
|
||||
check=False,
|
||||
)
|
||||
|
||||
# HMM; it seems we always get an errored return code due to
|
||||
# our use of reveal_type() so we can't look at that.
|
||||
# However we can look for error notices in the output and fail there.
|
||||
lines = results.stdout.decode().splitlines()
|
||||
for line in lines:
|
||||
if ': error: ' in line:
|
||||
print('Full mypy output:\n', results.stdout.decode())
|
||||
raise RuntimeError('Errors detected in mypy output.')
|
||||
if 'Revealed type is ' in line:
|
||||
finfo = line.split(' ')[0]
|
||||
fparts = finfo.split(':')
|
||||
assert len(fparts) == 3
|
||||
linenumber = int(fparts[1])
|
||||
linetype = line.split('Revealed type is ')[-1][1:-1]
|
||||
self.linetypes_mypy[linenumber] = linetype
|
||||
|
||||
def filter_file_contents(self, contents: str) -> str:
|
||||
"""Filter the provided file contents and take note of type checks."""
|
||||
import ast
|
||||
lines = contents.splitlines()
|
||||
lines_out: list[str] = []
|
||||
for lineno, line in enumerate(lines):
|
||||
if 'static_type_equals(' not in line:
|
||||
lines_out.append(line)
|
||||
else:
|
||||
|
||||
# Find the location of the end parentheses.
|
||||
assert ')' in line
|
||||
endparen = len(line) - 1
|
||||
while line[endparen] != ')':
|
||||
endparen -= 1
|
||||
|
||||
# Find the offset to the start of the line.
|
||||
offset = 0
|
||||
while line[offset] == ' ':
|
||||
offset += 1
|
||||
|
||||
# Parse this line as AST - we should find an assert
|
||||
# statement containing a static_type_equals() call
|
||||
# with 2 args.
|
||||
try:
|
||||
tree = ast.parse(line[offset:])
|
||||
except Exception:
|
||||
raise RuntimeError(
|
||||
f'{self._filename} line {lineno+1}: unable to '
|
||||
f'parse line (static_type_equals() call cannot'
|
||||
f' be split across lines).') from None
|
||||
assert isinstance(tree, ast.Module)
|
||||
if (len(tree.body) != 1
|
||||
or not isinstance(tree.body[0], ast.Assert)):
|
||||
raise RuntimeError(
|
||||
f'{self._filename} line {lineno+1}: expected '
|
||||
f' a single assert statement.')
|
||||
assertnode = tree.body[0]
|
||||
# noinspection PyUnresolvedReferences
|
||||
callnode = assertnode.test
|
||||
if (not isinstance(callnode, ast.Call)
|
||||
or not isinstance(callnode.func, ast.Name)
|
||||
or callnode.func.id != 'static_type_equals'
|
||||
or len(callnode.args) != 2):
|
||||
raise RuntimeError(
|
||||
f'{self._filename} line {lineno+1}: expected '
|
||||
f' a single static_type_equals() call with 2 args.')
|
||||
|
||||
# Use the column offsets for the 2 args along with our end
|
||||
# paren offset to cut out the substrings representing the args.
|
||||
arg1 = line[callnode.args[0].col_offset +
|
||||
offset:callnode.args[1].col_offset + offset]
|
||||
while arg1[-1] in (' ', ','):
|
||||
arg1 = arg1[:-1]
|
||||
arg2 = line[callnode.args[1].col_offset + offset:endparen]
|
||||
|
||||
# In our filtered file, replace the assert statement with
|
||||
# a reveal_type() for the var, and also take note of the
|
||||
# type they want it to equal.
|
||||
self.linetypes_wanted[lineno + 1] = arg2
|
||||
lines_out.append(' ' * offset + f'reveal_type({arg1})')
|
||||
|
||||
return '\n'.join(lines_out) + '\n'
|
||||
|
||||
|
||||
def static_type_equals(value: Any, statictype: type | str | None) -> bool:
|
||||
"""Check a type statically using mypy.
|
||||
|
||||
If a string is passed as statictype, it is checked against the mypy
|
||||
output for an exact match.
|
||||
If a type is passed, various filtering may apply when searching for
|
||||
a match (for instance, if mypy outputs 'builtins.int*' it will match
|
||||
the 'int' type passed in as statictype).
|
||||
"""
|
||||
import platform
|
||||
from inspect import getframeinfo, stack
|
||||
|
||||
# NOTE: don't currently support windows here; just going to always
|
||||
# pass so we don't have to conditionalize all our individual test
|
||||
# locations.
|
||||
if platform.system() == 'Windows':
|
||||
logging.debug('static_type_equals not supported on windows;'
|
||||
' will always pass...')
|
||||
return True
|
||||
|
||||
# We don't actually use there here; we pull them as strings from the src.
|
||||
del value
|
||||
|
||||
# Get the filename and line number of the calling function.
|
||||
caller = getframeinfo(stack()[1][0])
|
||||
filename = caller.filename
|
||||
linenumber = caller.lineno
|
||||
|
||||
if filename not in _statictestfiles:
|
||||
_statictestfiles[filename] = StaticTestFile(filename)
|
||||
testfile = _statictestfiles[filename]
|
||||
|
||||
mypytype = testfile.linetypes_mypy[linenumber]
|
||||
|
||||
if isinstance(statictype, str):
|
||||
# If they passed a string value as the statictype,
|
||||
# do a comparison with the exact mypy value.
|
||||
wanttype = statictype
|
||||
else:
|
||||
# If they passed a type object, things are a bit trickier because
|
||||
# mypy's name for the type might not match the name we pass it in with.
|
||||
# Try to do some filtering to minimize these differences...
|
||||
wanttype = testfile.linetypes_wanted[linenumber]
|
||||
del statictype
|
||||
|
||||
# Do some filtering of Mypy types so we can compare
|
||||
# to simple python ones.
|
||||
|
||||
# (ie: 'builtins.list[builtins.int*]' -> int)
|
||||
# Note to self: perhaps we'd want a fallback form where we can pass a
|
||||
# type as a string if we want to match the exact mypy value?...
|
||||
mypytype = mypytype.replace('*', '')
|
||||
mypytype = mypytype.replace('?', '')
|
||||
mypytype = mypytype.replace('builtins.int', 'int')
|
||||
mypytype = mypytype.replace('builtins.float', 'float')
|
||||
mypytype = mypytype.replace('builtins.list', 'List')
|
||||
mypytype = mypytype.replace('builtins.bool', 'bool')
|
||||
mypytype = mypytype.replace('typing.Sequence', 'Sequence')
|
||||
|
||||
# So classes declared in the test file can be passed using base names.
|
||||
# ie: temp3.FooClass -> FooClass
|
||||
mypytype = mypytype.replace(testfile.modulename + '.', '')
|
||||
|
||||
if wanttype != mypytype:
|
||||
print(f'Mypy type "{mypytype}" does not match '
|
||||
f'the desired type "{wanttype}" on line {linenumber}.')
|
||||
return False
|
||||
|
||||
return True
|
||||
Loading…
x
Reference in New Issue
Block a user