mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-23 23:49:47 +08:00
Merge branch 'efroemling:master' into master
This commit is contained in:
commit
1a1003a8c6
128
.efrocachemap
generated
128
.efrocachemap
generated
@ -421,7 +421,7 @@
|
||||
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
|
||||
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
|
||||
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
|
||||
"build/assets/ba_data/data/langdata.json": "7e73466677344c1722aebe94003360d5",
|
||||
"build/assets/ba_data/data/langdata.json": "b83c9445922f68152c5d0efa1f0fe608",
|
||||
"build/assets/ba_data/data/languages/arabic.json": "05040616cb7585e3cce2e9acba96aa75",
|
||||
"build/assets/ba_data/data/languages/belarussian.json": "3d5523d0004293aa2df02f3f6f3b84f8",
|
||||
"build/assets/ba_data/data/languages/chinese.json": "2f67c6b127ae85492ac552af1a91e95a",
|
||||
@ -432,21 +432,21 @@
|
||||
"build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343",
|
||||
"build/assets/ba_data/data/languages/english.json": "9754e816d3bc3214b7e809950d642309",
|
||||
"build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880",
|
||||
"build/assets/ba_data/data/languages/filipino.json": "9c04219ceeb065b3bc751e6ab3731def",
|
||||
"build/assets/ba_data/data/languages/french.json": "ee2a81129519d7030a617308da8c9195",
|
||||
"build/assets/ba_data/data/languages/filipino.json": "aa8c94a49dec96d050be2329c3b6dcba",
|
||||
"build/assets/ba_data/data/languages/french.json": "b7d11199756f0eb4f1a745ceee652b2a",
|
||||
"build/assets/ba_data/data/languages/german.json": "198b9860c5b9df7b8e3e30b03d8755cb",
|
||||
"build/assets/ba_data/data/languages/gibberish.json": "3e68d809bd6ede3b9e2c57c147737e42",
|
||||
"build/assets/ba_data/data/languages/greek.json": "ad3c0d38f34d809824892d6f22808dbf",
|
||||
"build/assets/ba_data/data/languages/hindi.json": "bb3548531daf7bc7fee4a28d48228c32",
|
||||
"build/assets/ba_data/data/languages/hungarian.json": "6b08fea24b72cc805ed0dc59e11c4cd6",
|
||||
"build/assets/ba_data/data/languages/indonesian.json": "9103845242b572aa8ba48e24f81ddb68",
|
||||
"build/assets/ba_data/data/languages/indonesian.json": "ed9038bf4b9216f93eb73e753e162706",
|
||||
"build/assets/ba_data/data/languages/italian.json": "e1d69eb1eec31442bf981121c7cfaf17",
|
||||
"build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597",
|
||||
"build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f",
|
||||
"build/assets/ba_data/data/languages/persian.json": "c209f8f6d3b3dd40d5ca9d36fe0721fe",
|
||||
"build/assets/ba_data/data/languages/polish.json": "59ff98adfb4f515f00769d1ec229c232",
|
||||
"build/assets/ba_data/data/languages/portuguese.json": "615a59bd03f84659158d9f2608a4ab21",
|
||||
"build/assets/ba_data/data/languages/romanian.json": "b3e46efd6f869dbd78014570e037c290",
|
||||
"build/assets/ba_data/data/languages/romanian.json": "ef68520f749cf3641d4e4225a6166349",
|
||||
"build/assets/ba_data/data/languages/russian.json": "41e06eda170fb5960393dd6b58d046e1",
|
||||
"build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69",
|
||||
"build/assets/ba_data/data/languages/slovak.json": "3c08c748c96c71bd9e1d7291fb8817b6",
|
||||
@ -455,7 +455,7 @@
|
||||
"build/assets/ba_data/data/languages/tamil.json": "b9fcc523639f55e05c7f4e7914f3321a",
|
||||
"build/assets/ba_data/data/languages/thai.json": "1d665629361f302693dead39de8fa945",
|
||||
"build/assets/ba_data/data/languages/turkish.json": "fe4c7354ca6e657c2645969325af574a",
|
||||
"build/assets/ba_data/data/languages/ukrainian.json": "76ad64cb4911c8d5a3e4815b865ce5bd",
|
||||
"build/assets/ba_data/data/languages/ukrainian.json": "3f9ee9567a068b760bbf25433177db89",
|
||||
"build/assets/ba_data/data/languages/venetian.json": "96e7607b0aa79b7eb48cac8df77e8e65",
|
||||
"build/assets/ba_data/data/languages/vietnamese.json": "b175cd0f01d0433355f144aeaa333409",
|
||||
"build/assets/ba_data/data/maps/big_g.json": "1dd301d490643088a435ce75df971054",
|
||||
@ -945,11 +945,11 @@
|
||||
"build/assets/ba_data/meshes/zoeTorso.bob": "26a1007e98902178d8c62fd7069d5da5",
|
||||
"build/assets/ba_data/meshes/zoeUpperArm.bob": "a8a881010ac1ee9ec5ca872d5c5e853a",
|
||||
"build/assets/ba_data/meshes/zoeUpperLeg.bob": "95b2502f74c70f934927f67cd505c3ad",
|
||||
"build/assets/ba_data/python-site-packages/certifi/__init__.py": "98360d9e66de68a618eed6098a65405b",
|
||||
"build/assets/ba_data/python-site-packages/certifi/__init__.py": "c935c5aee4052f1c76954ace35723dfe",
|
||||
"build/assets/ba_data/python-site-packages/certifi/__main__.py": "ef02e73f8581609df189a9f61aca365b",
|
||||
"build/assets/ba_data/python-site-packages/certifi/cacert.pem": "4e587dca9ab75057ffef6658ed385ff2",
|
||||
"build/assets/ba_data/python-site-packages/certifi/cacert.pem": "47f35c87a8abc6ace093db7c215f1eab",
|
||||
"build/assets/ba_data/python-site-packages/certifi/core.py": "c1b8c102093ea26587619677c7ec6016",
|
||||
"build/assets/ba_data/python-site-packages/typing_extensions.py": "f1af94a03caf6fc79be0aedc8ab03090",
|
||||
"build/assets/ba_data/python-site-packages/typing_extensions.py": "1f6b4db70adb7ca05dff2b74f6cde8aa",
|
||||
"build/assets/ba_data/textures/achievementBoxer.dds": "5b5c461e67f3a92105b56fe264a7dd28",
|
||||
"build/assets/ba_data/textures/achievementBoxer.ktx": "1055e009423ea1d0bc3b172f9d7328bb",
|
||||
"build/assets/ba_data/textures/achievementBoxer.pvr": "48f212189a6d83d29be410613b4f0005",
|
||||
@ -3038,16 +3038,16 @@
|
||||
"build/assets/pylib-apple/_pylong.py": "e057ab3c9eea264704dff2af204884f8",
|
||||
"build/assets/pylib-apple/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61",
|
||||
"build/assets/pylib-apple/_strptime.py": "ed6521fd413f31f0de7be162af8db9f5",
|
||||
"build/assets/pylib-apple/_sysconfigdata__darwin_darwin.py": "bc494dcb0239846f92c26622e84fb99d",
|
||||
"build/assets/pylib-apple/_sysconfigdata__ios_iphoneos-arm64.py": "f073b8cdfe4179236abb923d538e7fbe",
|
||||
"build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator-arm64.py": "2c3a1b46d9966d740b226d0d603a392a",
|
||||
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvos-arm64.py": "df1d00e8a7b529d64e600c8113d872d7",
|
||||
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator-arm64.py": "f9b8d515e7a6619fea32ab77c341b294",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_darwin_darwin.py": "bd1f109ca34c52afd95632f7ae64171f",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos-arm64.py": "178d3dc412e56aeaa211c8f5237f9462",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator-arm64.py": "fc568dd0c36d2253993b9a48f53535d6",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos-arm64.py": "50e50f852dc4f6acd785fa83c2e6530b",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator-arm64.py": "5e2dd0675c1364fb20fb7777c4c0eeb0",
|
||||
"build/assets/pylib-apple/_sysconfigdata__darwin_darwin.py": "0cf2ec75dca64a6fd736fbf0d7cf21d7",
|
||||
"build/assets/pylib-apple/_sysconfigdata__ios_iphoneos-arm64.py": "00f4ef0ea2ae8fa7994813bca8972016",
|
||||
"build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator-arm64.py": "4a3f247c7dfc903e89fda0bd20ef48fb",
|
||||
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvos-arm64.py": "6a817c7dcc35197e965ef4d1be6a5c94",
|
||||
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator-arm64.py": "d3adfa519698ddd824b4ef721c3460b7",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_darwin_darwin.py": "776b50a7ff9d04c04a73df196b556848",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos-arm64.py": "6700b08928d64c1c1eac4412c377e86e",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator-arm64.py": "4fd4334d6c43fe9f65ae83905c6b8a33",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos-arm64.py": "ad79fe9e0594bbc43adf53c96a4a81dc",
|
||||
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator-arm64.py": "18829d0bbee15874cd46cbe8d85e36e8",
|
||||
"build/assets/pylib-apple/_threading_local.py": "4a9688e3987d7d692db46feb9214945e",
|
||||
"build/assets/pylib-apple/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7",
|
||||
"build/assets/pylib-apple/abc.py": "a0daa1ed187eee8690c1e8438b97da90",
|
||||
@ -3445,7 +3445,7 @@
|
||||
"build/assets/pylib-apple/typing.py": "a5996aa02b21708d88c67946dabd529e",
|
||||
"build/assets/pylib-apple/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf",
|
||||
"build/assets/pylib-apple/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0",
|
||||
"build/assets/pylib-apple/urllib/parse.py": "112c518e8857be22f75ef4cd668fe5b4",
|
||||
"build/assets/pylib-apple/urllib/parse.py": "8fa7882c3e97acfde85cb4486a0ceedf",
|
||||
"build/assets/pylib-apple/urllib/request.py": "2a9f2ec22765c9959240f559bcb2fca3",
|
||||
"build/assets/pylib-apple/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93",
|
||||
"build/assets/pylib-apple/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb",
|
||||
@ -4038,50 +4038,50 @@
|
||||
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
|
||||
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
|
||||
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "bfd2a477d0322f6fb74656f9a0dedae0",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "0d2f166f927785c9abbd7911b1940f4b",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "b0fb1c006ebf24c74084e94308f4dd0a",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "a5d29314d5853e1a904f4b3ae48d6f21",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "d7182ecdcb53449fe67d54af9c088888",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "7bb195668fa054394d03abf4b3ed2952",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "22e16d10a41b36c5db277ec717488596",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "baa648fe7e976df9155b5e0994d334b6",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "8c9b4d2626ce4674efa4a37d8cff6857",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "121545e12decb46689681cda8721f708",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "c72adfcd1ccc8bfc412e62efa98a8e14",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "90ad3bc819d90bcfeb5563692a9606db",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "3ef248a8d70eaaedc6783898651bb668",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "2cdfa98b7b372ee3d19446cf95ebb8ef",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "715854042fe4f2470d67593bbad571d1",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "675ec134554280a37aaa2951adf48dac",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "c5b6443b911d21f020a8ff9c7bf23e98",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3ce98ab785f8c7656f3d7b2ee4491975",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "80c142f30aa63759bbe4d017f83d5977",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "029360ae2dba2279d41022647afd0c52",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "2226d0e2d34051d962320c86464f3a2d",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "2226d0e2d34051d962320c86464f3a2d",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "c2d287b53bdac7e5302fe833ac052d2c",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "b3942d4e7c940d86fc039ae149756d3f",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "c2d287b53bdac7e5302fe833ac052d2c",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "b3942d4e7c940d86fc039ae149756d3f",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "6c3d9a42b9cdc7af45f7273f76010dd5",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "404e2e994a58d2e930f189ab835ada45",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "6c3d9a42b9cdc7af45f7273f76010dd5",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "404e2e994a58d2e930f189ab835ada45",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "848cfd50cf15726e3acefd60204a85c5",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "08c2f91d086e6f3fa73ebc299112358a",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "ec11bac6a42f25e02cd218928625c9b7",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "4dc943a3a551a0615fe33c56ac8b5bd7",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "457df093184e56955a1170340e57cf43",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "108e96eeda885404682b0762552e0f61",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "11691eb6e947ee36f315c979a305533a",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "bdfa516a57bd798e482d20ebd074488c",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "f25bf000209c0d97a852c71afa186c3a",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "d2aae5f895446cd23f2c5bb0656c79a3",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "1f69ddeb02931a14350dca8c9f57d7f1",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "4ef2017d98434d78fc6d16121220241e",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "9c131cc99b84ead5c6c4ca62167cff9b",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "d24cf6110773ef8b4814d666e8c0c435",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "831b1526ece045decbf1e0de5af24052",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "e20c0e2216583337f0f1b6529d0ba11f",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "75a8601f7e9f82af46d93ffc8a256a7b",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "b6dd5a6381c76da06d4e3f28b9ae26d7",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "3de8379bc9d925752559f395c85c1ebc",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "68a9183674846903f4dec83d94023498",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "f0a26bbd08a4ddd9fe331bba6f731dd0",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "f346ea68ff1614e64b5555c5fed60618",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7ae36210f6167ae2cd88905c93800330",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "e1e54514c6322544a41f53c84e441967",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "60f081b960424b9a3dddc33824a5d866",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "6712b886792057c5cac6bfcbbf93fa6f",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "5bce4fd4303d03d5a4d3cba16aaf7dcb",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3f72837a59d31d11e08edb0f395642d2",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "7400ee0e8a3c925af6e4859599fed64c",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "5b1db66f277c057d503aae53991adfc5",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "c471e06d03862e91a2a949806803efbd",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "4f7b8eed54eb4c7d2b6400aaa4dfa37c",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "c471e06d03862e91a2a949806803efbd",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "4f7b8eed54eb4c7d2b6400aaa4dfa37c",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "ec5f39fe33f753cace45ecda7b78e376",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "5ca18c2abecb1b369ddd7ff43880baa0",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "ec5f39fe33f753cace45ecda7b78e376",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "5ca18c2abecb1b369ddd7ff43880baa0",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "789b8d5e80d66c74af1ff0b978301704",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "4fa185d99e799027b324704de3925aca",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "789b8d5e80d66c74af1ff0b978301704",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "4fa185d99e799027b324704de3925aca",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "3b9db190dc436e7bfd4521b94d9b5974",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "cd5c91eecddb1da4e8204e3496466a07",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "9adc2dc1c5c3cdc1ca6fc98fc76644c5",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "cd5c91eecddb1da4e8204e3496466a07",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "dc57789d3ee490d8354b259da3d126e5",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "f6c205dec651096d4b79c33fbc6521d3",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "57eaa29add181299dfeca00638cec027",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "45a0e7f47f87ac16eea7ed3c8344e930",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "3e73473e692c1076ba35230db92718df",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "b4a041b108895d140d7bae117bb6d899",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "6140fbb0c041b1a7b8fa18bca1b61b42",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "6b6b016b72558a9138fccf7f5462f1de",
|
||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "5548f407d97e380069f6c596c4e36cd7",
|
||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
||||
|
||||
36
.github/workflows/cd.yml
vendored
36
.github/workflows/cd.yml
vendored
@ -185,39 +185,3 @@ jobs:
|
||||
with:
|
||||
name: windows_x86_server_(debug)
|
||||
path: build/prefab/full/windows_x86_server
|
||||
|
||||
make_sphinx_docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make docs-sphinx
|
||||
- name: Upload the build
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: sphinx_html_docs
|
||||
path: build/sphinx
|
||||
|
||||
make_docker_image:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make docker-save
|
||||
- name: Upload the build
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docker_server(release)
|
||||
path: build/docker/bombsquad_server_docker.tar
|
||||
64
.github/workflows/nightly.yml
vendored
Normal file
64
.github/workflows/nightly.yml
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
name: Nightly Build
|
||||
on:
|
||||
# Run everyday at 5:30 UTC
|
||||
schedule:
|
||||
- cron: '30 5 * * *'
|
||||
|
||||
jobs:
|
||||
make_docker_gui_debug_image:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: |
|
||||
make docker-gui-debug
|
||||
make docker-save
|
||||
- name: Upload the build
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docker_gui(debug)
|
||||
path: build/docker/bombsquad_gui_debug_docker.tar
|
||||
|
||||
make_docker_server_debug_image:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: |
|
||||
make docker-server-debug
|
||||
make docker-save
|
||||
- name: Upload the build
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docker_server(debug)
|
||||
path: build/docker/bombsquad_server_debug_docker.tar
|
||||
|
||||
make_sphinx_docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make docs-sphinx
|
||||
- name: Upload the build
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: sphinx_html_docs
|
||||
path: build/sphinx
|
||||
273
.github/workflows/release.yml
vendored
Normal file
273
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,273 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
release_linux_x86_64_gui_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-gui-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "linux_x86_64_gui_debug.tar" build/prefab/full/linux_x86_64_gui/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: linux_x86_64_gui_debug.tar
|
||||
|
||||
release_linux_x86_64_server_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-server-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "linux_x86_64_server_debug.tar" build/prefab/full/linux_x86_64_server/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: linux_x86_64_server_debug.tar
|
||||
|
||||
release_linux_arm64_gui_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-linux-arm64-gui-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "linux_arm64_gui_debug.tar" build/prefab/full/linux_arm64_gui/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: linux_arm64_gui_debug.tar
|
||||
|
||||
release_linux_arm64_server_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-linux-arm64-server-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "linux_arm64_server_debug.tar" build/prefab/full/linux_arm64_server/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: linux_arm64_server_debug.tar
|
||||
|
||||
release_mac_x86_64_gui_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-mac-x86-64-gui-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "mac_x86_64_gui_debug.tar" build/prefab/full/mac_x86_64_gui/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: mac_x86_64_gui_debug.tar
|
||||
|
||||
release_mac_x86_64_server_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-mac-x86-64-server-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "mac_x86_64_server_debug.tar" build/prefab/full/mac_x86_64_server/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: mac_x86_64_server_debug.tar
|
||||
|
||||
release_mac_arm64_gui_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-mac-arm64-gui-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "mac_arm64_gui_debug.tar" build/prefab/full/mac_arm64_gui/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: mac_arm64_gui_debug.tar
|
||||
|
||||
release_mac_arm64_server_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-mac-arm64-server-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "mac_arm64_server_debug.tar" build/prefab/full/mac_arm64_server/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: mac_arm64_server_debug.tar
|
||||
|
||||
release_windows_x86_gui_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-windows-x86-gui-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "windows_x86_gui_debug.tar" build/prefab/full/windows_x86_gui/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: windows_x86_gui_debug.tar
|
||||
|
||||
release_windows_x86_server_debug_build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make prefab-windows-x86-server-debug-build
|
||||
- name: Compress the build
|
||||
run: tar -cf "windows_x86_server_debug.tar" build/prefab/full/windows_x86_server/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: windows_x86_server_debug.tar
|
||||
|
||||
release_docker_gui_image:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: |
|
||||
make docker-gui-release
|
||||
make docker-save
|
||||
- name: Rename the build
|
||||
run: mv build/docker/bombsquad_gui_release_docker.tar build/docker/bombsquad_docker_gui.tar
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: build/docker/bombsquad_docker_gui.tar
|
||||
|
||||
release_docker_server_image:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: |
|
||||
make docker-server-release
|
||||
make docker-save
|
||||
- name: Rename the build
|
||||
run: mv build/docker/bombsquad_server_release_docker.tar build/docker/bombsquad_docker_server.tar
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: build/docker/bombsquad_docker_server.tar
|
||||
|
||||
release_sphinx_docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Setup project environment
|
||||
run: make env
|
||||
- name: Make the build
|
||||
run: make docs-sphinx
|
||||
- name: Compress the build
|
||||
run: tar -cf "sphinx_html_docs.tar" build/sphinx/
|
||||
- name: Upload the build
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: sphinx_html_docs.tar
|
||||
19
CHANGELOG.md
19
CHANGELOG.md
@ -1,4 +1,4 @@
|
||||
### 1.7.35 (build 21882, api 8, 2024-05-29)
|
||||
### 1.7.35 (build 21888, api 8, 2024-06-16)
|
||||
- Fixed an issue where the engine would block at exit on some version of Linux
|
||||
until Ctrl-D was pressed in the calling terminal.
|
||||
- V2 accounts have been around for a while now, so the old V1 device login
|
||||
@ -47,20 +47,7 @@
|
||||
two forms. Now it is possible to provide both.
|
||||
- Spaz classes now have a `default_hitpoints` which makes customizing that
|
||||
easier (Thanks rabbitboom!)
|
||||
- (WORK IN PROGRESS) As of this version, servers are *required* to be accessible
|
||||
via ipv4 to appear in the public listing. So they may need to provide an ipv4
|
||||
address in their config if the automatically detected one is ipv6. This should
|
||||
reduce the confusion of ipv6-only servers appearing greyed out for lots of
|
||||
ipv4-only people. Pretty much everyone can connect to ipv4.
|
||||
- (WORK IN PROGRESS) There is now more personalized error feedback for the
|
||||
connectivity checks when poking `Make My Party Public` or when launching the
|
||||
command line server. Hopefully this will help navigate the new dual ipv4/ipv6
|
||||
situation.
|
||||
- (WORK IN PROGRESS) The low level `ConnectionToHostUDP` class can now accept
|
||||
multiple `SockAddr`s; it will attempt to contact the host on all of them and
|
||||
use whichever responds first. This allows us to pass both ipv4 and ipv6
|
||||
addresses when available and transparently use whichever is more performant.
|
||||
- Added `docker-build`, `docker-run`, `docker-clean` and `docker-save` targets
|
||||
- Added `docker-gui-release`, `docker-gui-debug`, `docker-server-release`, `docker-server-debug`, `docker-clean` and `docker-save` targets
|
||||
to Makefile.
|
||||
- Fixed an issue in Assault where being teleported back to base with a sticky
|
||||
bomb stuck to you would do some crazy rubber-band-launching thing (Thanks
|
||||
@ -82,6 +69,8 @@
|
||||
efrocache when anything in the cache-map changed (which is the case for most
|
||||
commits). Please holler if you are still seeing lots more 'Extracting:' lines
|
||||
when running builds after pulling small updates from git.
|
||||
- Added github workflow for making docker image and sphinx docs nightly
|
||||
- Added github workflow for making build release on tag creation
|
||||
|
||||
### 1.7.34 (build 21823, api 8, 2024-04-26)
|
||||
- Bumped Python version from 3.11 to 3.12 for all builds and project tools. One
|
||||
|
||||
@ -64,4 +64,5 @@
|
||||
|
||||
### Loup Garou
|
||||
- Added sphinx documentation generation
|
||||
- Added docker build
|
||||
- Added docker build system
|
||||
- Various CI/CD improvements
|
||||
123
Makefile
123
Makefile
@ -31,7 +31,7 @@ help: env
|
||||
# Set env-var BA_ENABLE_COMPILE_COMMANDS_DB=1 to enable creating/updating a
|
||||
# cmake compile-commands database for use with things like clangd.
|
||||
ifeq ($(BA_ENABLE_COMPILE_COMMANDS_DB),1)
|
||||
PREREQ_COMPILE_COMMANDS_DB = .cache/compile_commands_db/compile_commands.json
|
||||
ENV_COMPILE_COMMANDS_DB = .cache/compile_commands_db/compile_commands.json
|
||||
endif
|
||||
|
||||
# pcommandbatch can be much faster when running hundreds or thousands of
|
||||
@ -46,19 +46,19 @@ else
|
||||
PCOMMANDBATCH = $(PCOMMAND)
|
||||
endif
|
||||
|
||||
# Prereq targets that should be safe to run anytime; even if project-files
|
||||
# Env targets that should be safe to run anytime; even if project-files
|
||||
# are out of date.
|
||||
ENV_REQS_SAFE = .cache/checkenv $(PCOMMANDBATCHBIN) .dir-locals.el .mypy.ini \
|
||||
.pyrightconfig.json .pylintrc .clang-format \
|
||||
ballisticakit-cmake/.clang-format .editorconfig tools/cloudshell \
|
||||
tools/bacloud
|
||||
.pyrightconfig.json .pylintrc .clang-format \
|
||||
ballisticakit-cmake/.clang-format .editorconfig tools/cloudshell \
|
||||
tools/bacloud tools/pcommand
|
||||
|
||||
# Prereq targets that may break if the project needs updating should go here.
|
||||
# Env targets that may break if the project needs updating should go here.
|
||||
# An example is compile-command-databases; these might try to run cmake and
|
||||
# fail if the CMakeList files don't match what's on disk. If such a target was
|
||||
# included in ENV_REQS_SAFE it would try to build *before* project updates
|
||||
# which would leave us stuck in a broken state.
|
||||
ENV_REQS_POST_UPDATE_ONLY = $(PREREQ_COMPILE_COMMANDS_DB)
|
||||
ENV_REQS_POST_UPDATE_ONLY = $(ENV_COMPILE_COMMANDS_DB)
|
||||
|
||||
# Target that should be built before building almost any other target. This
|
||||
# installs tool config files, sets up the Python virtual environment, etc.
|
||||
@ -1183,19 +1183,39 @@ clion-staging: assets-cmake resources meta
|
||||
# #
|
||||
################################################################################
|
||||
|
||||
docker-build: assets-cmake
|
||||
$(PCOMMAND) build_docker
|
||||
# Build the gui release docker image
|
||||
docker-gui-release: assets-cmake
|
||||
$(PCOMMAND) build_docker_gui_release
|
||||
|
||||
docker-run:
|
||||
docker run -it bombsquad_server
|
||||
# Build the gui debug docker image
|
||||
docker-gui-debug: assets-cmake
|
||||
$(PCOMMAND) build_docker_gui_debug
|
||||
|
||||
docker-save: docker-build
|
||||
# Build the server release docker image
|
||||
docker-server-release: assets-cmake
|
||||
$(PCOMMAND) build_docker_server_release
|
||||
|
||||
# Build the server debug docker image
|
||||
docker-server-debug: assets-cmake
|
||||
$(PCOMMAND) build_docker_server_debug
|
||||
|
||||
# Build the gui release docker image for arm64
|
||||
docker-arm64-gui-release: assets-cmake
|
||||
$(PCOMMAND) build_docker_arm64_gui_release
|
||||
|
||||
# Build the server release docker image for arm64
|
||||
docker-arm64-server-release: assets-cmake
|
||||
$(PCOMMAND) build_docker_arm64_server_release
|
||||
|
||||
# Save the bombsquad_server docker image to build/docker/bombsquad_server_docker.tar
|
||||
docker-save:
|
||||
mkdir -p build/docker/
|
||||
docker save bombsquad_server -o build/docker/bombsquad_server_docker.tar
|
||||
$(PCOMMAND) save_docker_images
|
||||
|
||||
# Cleanup docker files
|
||||
docker-clean:
|
||||
rm build/docker/bombsquad_server_docker.tar
|
||||
docker rmi bombsquad_server --force
|
||||
rm -rf build/docker/
|
||||
$(PCOMMAND) remove_docker_images
|
||||
docker system prune
|
||||
|
||||
|
||||
@ -1241,30 +1261,30 @@ CHECK_CLEAN_SAFETY = $(PCOMMAND) check_clean_safety
|
||||
# Some tool configs that need filtering (mainly injecting projroot path).
|
||||
TOOL_CFG_INST = $(PCOMMAND) tool_config_install
|
||||
|
||||
# Anything that affects tool-config generation.
|
||||
# Anything required for tool-config generation.
|
||||
TOOL_CFG_SRC = tools/efrotools/toolconfig.py config/projectconfig.json \
|
||||
.venv/.efro_venv_complete tools/pcommand
|
||||
tools/pcommand
|
||||
|
||||
# Anything that should trigger an environment-check when changed.
|
||||
ENV_SRC = tools/batools/build.py .venv/.efro_venv_complete tools/pcommand
|
||||
ENV_SRC = tools/batools/build.py .venv/.efro_venv_complete
|
||||
|
||||
# Generate a pcommand script hard-coded to use our virtual environment.
|
||||
# This is a prereq dependency so should not itself depend on env.
|
||||
tools/pcommand: tools/efrotools/genwrapper.py tools/efrotools/pyver.py
|
||||
# This is an env dependency so should not itself depend on env.
|
||||
tools/pcommand: tools/efrotools/genwrapper.py .venv/.efro_venv_complete
|
||||
@echo Generating tools/pcommand...
|
||||
@PYTHONPATH=tools python3 -m \
|
||||
efrotools.genwrapper pcommand batools.pcommandmain tools/pcommand
|
||||
|
||||
# Generate a cloudshell script hard-coded to use our virtual environment.
|
||||
# This is a prereq dependency so should not itself depend on env.
|
||||
tools/cloudshell: tools/efrotools/genwrapper.py tools/efrotools/pyver.py
|
||||
# This is an env dependency so should not itself depend on env.
|
||||
tools/cloudshell: tools/efrotools/genwrapper.py .venv/.efro_venv_complete
|
||||
@echo Generating tools/cloudshell...
|
||||
@PYTHONPATH=tools python3 -m \
|
||||
efrotools.genwrapper cloudshell efrotoolsinternal.cloudshell tools/cloudshell
|
||||
|
||||
# Generate a bacloud script hard-coded to use our virtual environment.
|
||||
# This is a prereq dependency so should not itself depend on env.
|
||||
tools/bacloud: tools/efrotools/genwrapper.py tools/efrotools/pyver.py
|
||||
# This is an env dependency so should not itself depend on env.
|
||||
tools/bacloud: tools/efrotools/genwrapper.py .venv/.efro_venv_complete
|
||||
@echo Generating tools/bacloud...
|
||||
@PYTHONPATH=tools python3 -m \
|
||||
efrotools.genwrapper bacloud batools.bacloud tools/bacloud
|
||||
@ -1296,40 +1316,54 @@ SKIP_ENV_CHECKS ?= 0
|
||||
VENV_PYTHON ?= python3.12
|
||||
|
||||
# Increment this to force all downstream venvs to fully rebuild. Useful after
|
||||
# removing requirements since upgrading in place will never uninstall stuff.
|
||||
# removing requirements since upgrading venvs in place will never uninstall
|
||||
# stuff.
|
||||
VENV_STATE = 1
|
||||
|
||||
# Rebuild our virtual environment whenever reqs, Python version, or explicit
|
||||
# state number changes. This is a dependency of env so it should not itself
|
||||
# depend on env. Note that we list pcommand as a requirement but can't use it
|
||||
# in here until the end when the venv is up. Also note that we try to update
|
||||
# venvs in place when possible, but when Python version or venv-state changes
|
||||
# we blow it away and start over to be safe.
|
||||
.venv/.efro_venv_complete: tools/pcommand config/requirements.txt \
|
||||
tools/efrotools/pyver.py
|
||||
# Update our virtual environment whenever reqs changes, Python version
|
||||
# changes, our venv's Python symlink breaks (can happen for minor Python
|
||||
# updates), or explicit state number changes. This is a dependency of env so
|
||||
# should not itself depend on env.
|
||||
.venv/.efro_venv_complete: \
|
||||
config/requirements.txt \
|
||||
tools/efrotools/pyver.py \
|
||||
.venv/bin/$(VENV_PYTHON) \
|
||||
.venv/.efro_venv_state_$(VENV_STATE)
|
||||
# Update venv in place when possible; otherwise create from scratch.
|
||||
@[ -f .venv/bin/$(VENV_PYTHON) ] \
|
||||
&& [ -f .venv/.efro_venv_state_$(VENV_STATE) ] \
|
||||
&& echo Updating existing $(VENV_PYTHON) virtual environment in \'.venv\'... \
|
||||
|| (echo Creating new $(VENV_PYTHON) virtual environment in \'.venv\'... \
|
||||
&& rm -rf .venv)
|
||||
$(VENV_PYTHON) -m venv .venv
|
||||
&& rm -rf .venv && $(VENV_PYTHON) -m venv .venv \
|
||||
&& touch .venv/.efro_venv_state_$(VENV_STATE))
|
||||
.venv/bin/pip install --upgrade pip
|
||||
.venv/bin/pip install -r config/requirements.txt
|
||||
touch .venv/.efro_venv_state_$(VENV_STATE) \
|
||||
.venv/.efro_venv_complete # Done last to enforce fully-built venvs.
|
||||
@$(PCOMMAND) echo \
|
||||
GRN Project virtual environment for BLD $(VENV_PYTHON) RST GRN \
|
||||
at BLD .venv RST GRN is ready to use.
|
||||
@touch .venv/.efro_venv_complete # Done last to signal fully-built venv.
|
||||
@echo Project virtual environment for $(VENV_PYTHON) at .venv is ready to use.
|
||||
|
||||
.cache/checkenv: $(ENV_SRC)
|
||||
# We don't actually create anything with this target, but its existence allows
|
||||
# .efro_venv_complete to run when these bits don't exist, and that target
|
||||
# *does* recreate this stuff. Note to self: previously I tried splitting
|
||||
# things up more and recreating the venv in this target, but that led to
|
||||
# unintuitive dependency behavior. For example, a python update could cause
|
||||
# the .venv/bin/$(VENV_PYTHON) symlink to break, which would cause that target
|
||||
# to blow away and rebuild the venv, but then the reestablished symlink might
|
||||
# have an old modtime (since modtime is that of python itself) which could
|
||||
# cause .efro_venv_complete to think it was already up to date and not run,
|
||||
# leaving us with a half-built venv. So the way we do it now ensures the venv
|
||||
# update always happens in full and seems mostly foolproof.
|
||||
.venv/bin/$(VENV_PYTHON) .venv/.efro_venv_state_$(VENV_STATE):
|
||||
|
||||
.cache/checkenv: $(ENV_SRC) $(PCOMMAND)
|
||||
@if [ $(SKIP_ENV_CHECKS) -ne 1 ]; then \
|
||||
$(PCOMMAND) checkenv && mkdir -p .cache && touch .cache/checkenv; \
|
||||
fi
|
||||
|
||||
$(PCOMMANDBATCHBIN): src/tools/pcommandbatch/pcommandbatch.c \
|
||||
PCOMMANDBATCHSRC = src/tools/pcommandbatch/pcommandbatch.c \
|
||||
src/tools/pcommandbatch/cJSON.c
|
||||
@$(MAKE) tools/pcommand
|
||||
@$(PCOMMAND) build_pcommandbatch $^ $@
|
||||
|
||||
$(PCOMMANDBATCHBIN): $(PCOMMANDBATCHSRC) $(PCOMMAND)
|
||||
@$(PCOMMAND) build_pcommandbatch $(PCOMMANDBATCHSRC) $(PCOMMANDBATCHBIN)
|
||||
|
||||
# CMake build-type lowercase
|
||||
CM_BT_LC = $(shell echo $(CMAKE_BUILD_TYPE) | tr A-Z a-z)
|
||||
@ -1364,6 +1398,7 @@ ballisticakit-cmake/.clang-format: .clang-format
|
||||
# compile commands for all files; lets try to keep it up to date
|
||||
# whenever CMakeLists changes.
|
||||
.cache/compile_commands_db/compile_commands.json: \
|
||||
$(PCOMMANDBATCH) \
|
||||
ballisticakit-cmake/CMakeLists.txt
|
||||
@$(PCOMMANDBATCH) echo BLU Updating compile commands db...
|
||||
@mkdir -p .cache/compile_commands_db
|
||||
|
||||
@ -1,21 +1,26 @@
|
||||
# if provided it will make debug build
|
||||
ARG cmake_build_type=Release
|
||||
|
||||
# system to start with the build with
|
||||
# currently will break for non ubuntu system
|
||||
ARG base_image=ubuntu:24.04
|
||||
# whether to make GUI or headless build (defaults to headless)
|
||||
ARG headless_build=1
|
||||
# system to start with the build with
|
||||
# currently will break for other images
|
||||
ARG base_image=ubuntu:latest
|
||||
|
||||
#-------------------------------BUILDER--------------------------------
|
||||
# Start with the base image
|
||||
FROM ${base_image} AS builder
|
||||
|
||||
# Renew the arg
|
||||
# Renew the args
|
||||
ARG headless_build
|
||||
ARG cmake_build_type
|
||||
|
||||
ENV LANG en_US.utf8
|
||||
# Environment settings
|
||||
ENV LANG=en_US.utf8
|
||||
ENV LANGUAGE=en_US
|
||||
ENV LC_ALL=en_US.utf8
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV CMAKE_BUILD_TYPE=${cmake_build_type}
|
||||
ENV HEADLESS_BUILD=${headless_build}
|
||||
|
||||
# Install build dependencies
|
||||
RUN apt-get update -y && \
|
||||
@ -24,62 +29,75 @@ RUN apt-get update -y && \
|
||||
python3.12-venv \
|
||||
python3-pip \
|
||||
libsdl2-dev \
|
||||
libvorbisfile3 \
|
||||
freeglut3-dev \
|
||||
libglut-dev \
|
||||
libopenal-dev \
|
||||
libvorbis-dev \
|
||||
make \
|
||||
curl \
|
||||
rsync \
|
||||
clang-format \
|
||||
cmake \
|
||||
libvorbis-dev
|
||||
cmake
|
||||
|
||||
# Copy source code
|
||||
COPY ./ /home/ubuntu/ballistica
|
||||
COPY ./ /ballistica
|
||||
|
||||
WORKDIR /home/ubuntu/ballistica
|
||||
# Set the working directory
|
||||
WORKDIR /ballistica
|
||||
|
||||
# Compile the application
|
||||
RUN make cmake-server-build \
|
||||
&& mkdir ./../ballistica_cmake_server \
|
||||
&& mv build/cmake/* ./../ballistica_cmake_server
|
||||
RUN mkdir /ballistica_cmake && \
|
||||
if [ "$HEADLESS_BUILD" != "0" ]; then \
|
||||
make cmake-server-build && \
|
||||
mv build/cmake/*/ballisticakit_headless build/cmake/*/staged/dist; \
|
||||
else \
|
||||
make cmake-build && \
|
||||
mv build/cmake/*/ballisticakit build/cmake/*/staged/; \
|
||||
fi && \
|
||||
mv build/cmake/*/staged/* /ballistica_cmake
|
||||
|
||||
|
||||
#-------------------------------RUNNER--------------------------------
|
||||
# Create a new stage for the runtime environment
|
||||
FROM ${base_image}
|
||||
|
||||
# Environment settings
|
||||
ENV LANG en_US.utf8
|
||||
ENV LANGUAGE=en_US
|
||||
ENV LC_ALL=en_US.utf8
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Renew the arg
|
||||
# Renew the args
|
||||
ARG headless_build
|
||||
ENV HEADLESS_BUILD=${headless_build}
|
||||
ARG cmake_build_type
|
||||
LABEL BUILD_TYPE=${cmake_build_type}
|
||||
|
||||
ARG bombsquad_build=N/A
|
||||
LABEL BOMBSQUAD_BUILD=${bombsquad_build}
|
||||
|
||||
ARG bombsquad_version=N/A
|
||||
LABEL BOMBSQUAD_VERSION=${bombsquad_version}
|
||||
LABEL BOMBSQUAD_BUILD_TYPE=${cmake_build_type}
|
||||
|
||||
# Install runtime dependencies
|
||||
RUN apt-get update -y && \
|
||||
apt-get install -y \
|
||||
python3.12-dev \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& python3.12 -c "import uuid;print(uuid.uuid4())">/etc/machine-id
|
||||
apt-get install -y \
|
||||
python3.12-dev && \
|
||||
if [ "$HEADLESS_BUILD" = "0" ]; then \
|
||||
apt-get install -y \
|
||||
libsdl2-dev \
|
||||
libvorbis-dev \
|
||||
libglut-dev \
|
||||
libopenal-dev; \
|
||||
fi && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
python3.12 -c "import uuid; print(uuid.uuid4())" > /etc/machine-id
|
||||
|
||||
# Copy the compiled application from the builder stage
|
||||
COPY --from=builder /home/ubuntu/ballistica_cmake_server/*/staged \
|
||||
COPY --from=builder /ballistica_cmake \
|
||||
/home/ubuntu/ballistica
|
||||
# ballisticakit_headless in staged is a symlink
|
||||
COPY --from=builder /home/ubuntu/ballistica_cmake_server/*/ballisticakit_headless \
|
||||
/home/ubuntu/ballistica/dist
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /home/ubuntu/ballistica
|
||||
|
||||
RUN ln -s ballisticakit* run
|
||||
|
||||
# Expose the necessary port
|
||||
EXPOSE 43210/udp
|
||||
|
||||
# Set the default command to run the application
|
||||
CMD [ "./ballisticakit_server" ]
|
||||
CMD [ "./run" ]
|
||||
102
config/docker/Dockerfile_arm64
Normal file
102
config/docker/Dockerfile_arm64
Normal file
@ -0,0 +1,102 @@
|
||||
# if provided it will make debug build
|
||||
ARG cmake_build_type=Release
|
||||
# whether to make GUI or headless build (defaults to headless)
|
||||
ARG headless_build=1
|
||||
# system to start with the build with
|
||||
# currently will break for other images
|
||||
ARG base_image=ubuntu:latest
|
||||
|
||||
#-------------------------------BUILDER--------------------------------
|
||||
# Start with the base image
|
||||
FROM --platform=linux/arm64 ${base_image} AS builder
|
||||
|
||||
# Renew the args
|
||||
ARG headless_build
|
||||
ARG cmake_build_type
|
||||
|
||||
# Environment settings
|
||||
ENV LANG=en_US.utf8
|
||||
ENV LANGUAGE=en_US
|
||||
ENV LC_ALL=en_US.utf8
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV CMAKE_BUILD_TYPE=${cmake_build_type}
|
||||
ENV HEADLESS_BUILD=${headless_build}
|
||||
|
||||
# Install build dependencies
|
||||
RUN apt-get install -y --no-install-recommends \
|
||||
python3.12-dev \
|
||||
python3.12-venv \
|
||||
python3-pip \
|
||||
libsdl2-dev \
|
||||
libglut-dev \
|
||||
libopenal-dev \
|
||||
make \
|
||||
curl \
|
||||
rsync \
|
||||
clang-format \
|
||||
clang \
|
||||
cmake \
|
||||
libvorbis-dev \
|
||||
build-essential
|
||||
|
||||
# Copy source code
|
||||
COPY ./ /ballistica
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /ballistica
|
||||
|
||||
# Compile the application
|
||||
RUN mkdir /ballistica_cmake && \
|
||||
if [ "$HEADLESS_BUILD" != "0" ]; then \
|
||||
make cmake-server-build && \
|
||||
mv build/cmake/*/ballisticakit_headless build/cmake/*/staged/dist; \
|
||||
else \
|
||||
make cmake-build && \
|
||||
mv build/cmake/*/ballisticakit build/cmake/*/staged/; \
|
||||
fi && \
|
||||
mv build/cmake/*/staged/* /ballistica_cmake
|
||||
|
||||
#-------------------------------RUNNER--------------------------------
|
||||
# Create a new stage for the runtime environment using ARM64 base image
|
||||
FROM --platform=linux/arm64 ${base_image}
|
||||
|
||||
# Environment settings
|
||||
ENV LANG en_US.utf8
|
||||
ENV LANGUAGE=en_US
|
||||
ENV LC_ALL=en_US.utf8
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Renew the args
|
||||
ARG headless_build
|
||||
ENV HEADLESS_BUILD=${headless_build}
|
||||
ARG cmake_build_type
|
||||
LABEL BOMBSQUAD_BUILD_TYPE=${cmake_build_type}
|
||||
|
||||
# Install runtime dependencies
|
||||
RUN apt-get update -y && \
|
||||
apt-get install -y \
|
||||
python3.12-dev && \
|
||||
if [ "$HEADLESS_BUILD" = "0" ]; then \
|
||||
apt-get install -y \
|
||||
libsdl2-dev \
|
||||
libvorbis-dev \
|
||||
libglut-dev \
|
||||
libopenal-dev; \
|
||||
fi && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
python3.12 -c "import uuid; print(uuid.uuid4())" > /etc/machine-id
|
||||
|
||||
# Copy the compiled application from the builder stage
|
||||
COPY --from=builder /ballistica_cmake \
|
||||
/home/ubuntu/ballistica
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /home/ubuntu/ballistica
|
||||
|
||||
RUN ln -s ballisticakit* run
|
||||
|
||||
# Expose the necessary port
|
||||
EXPOSE 43210/udp
|
||||
|
||||
# Set the default command to run the application
|
||||
CMD [ "./run" ]
|
||||
@ -1,14 +1,14 @@
|
||||
cpplint==1.6.1
|
||||
dmgbuild==1.6.1
|
||||
filelock==3.14.0
|
||||
filelock==3.15.1
|
||||
furo==2024.5.6
|
||||
mypy==1.10.0
|
||||
pbxproj==4.1.0
|
||||
pdoc==14.5.0
|
||||
pur==7.3.1
|
||||
pylint==3.2.2
|
||||
pur==7.3.2
|
||||
pylint==3.2.3
|
||||
pylsp-mypy==0.6.8
|
||||
pytest==8.2.1
|
||||
pytest==8.2.2
|
||||
python-daemon==3.0.1
|
||||
python-lsp-black==2.0.0
|
||||
python-lsp-server==1.11.0
|
||||
@ -17,5 +17,5 @@ Sphinx==7.3.7
|
||||
tomlkit==0.12.5
|
||||
types-certifi==2021.10.8.3
|
||||
types-filelock==3.2.7
|
||||
types-requests==2.32.0.20240523
|
||||
typing_extensions==4.12.0
|
||||
types-requests==2.32.0.20240602
|
||||
typing_extensions==4.12.2
|
||||
|
||||
@ -196,6 +196,8 @@ ctx.filter_file_names = {
|
||||
'ci.yml',
|
||||
'cd.yml',
|
||||
'deploy_docs.yml',
|
||||
'nightly.yml',
|
||||
'release.yml',
|
||||
'LICENSE',
|
||||
'cloudtool',
|
||||
'bacloud',
|
||||
|
||||
@ -52,7 +52,7 @@ if TYPE_CHECKING:
|
||||
|
||||
# Build number and version of the ballistica binary we expect to be
|
||||
# using.
|
||||
TARGET_BALLISTICA_BUILD = 21882
|
||||
TARGET_BALLISTICA_BUILD = 21888
|
||||
TARGET_BALLISTICA_VERSION = '1.7.35'
|
||||
|
||||
|
||||
|
||||
@ -64,8 +64,8 @@ auto BasePlatform::GetPublicDeviceUUID() -> std::string {
|
||||
// We used to plug version in directly here, but that caused uuids to
|
||||
// shuffle too rapidly during periods of rapid development. This
|
||||
// keeps it more constant.
|
||||
// __last_rand_uuid_component_shuffle_date__ 2023 12 13
|
||||
auto rand_uuid_component{"7YM96RZHN6ZCPZGTQONULZO1JU5NMMC7"};
|
||||
// __last_rand_uuid_component_shuffle_date__ 2024 6 13
|
||||
auto rand_uuid_component{"1URRE62C7234VP9L1BUPJ1P7QT7Q8YW3"};
|
||||
|
||||
inputs.emplace_back(rand_uuid_component);
|
||||
auto gil{Python::ScopedInterpreterLock()};
|
||||
|
||||
@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
|
||||
namespace ballistica {
|
||||
|
||||
// These are set automatically via script; don't modify them here.
|
||||
const int kEngineBuildNumber = 21882;
|
||||
const int kEngineBuildNumber = 21888;
|
||||
const char* kEngineVersion = "1.7.35";
|
||||
const int kEngineApiVersion = 8;
|
||||
|
||||
|
||||
@ -644,59 +644,3 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
|
||||
else:
|
||||
if verbose:
|
||||
print(f'{Clr.BLD}{title}:{Clr.RST} Keeping existing build dir.')
|
||||
|
||||
|
||||
def _docker_build(
|
||||
image_name: str,
|
||||
dockerfile_dir: str,
|
||||
bombsquad_version: str | None = None,
|
||||
bombsquad_build: str | int | None = None,
|
||||
cmake_build_type: str | None = None,
|
||||
) -> None:
|
||||
|
||||
build_cmd = [
|
||||
'docker',
|
||||
'image',
|
||||
'build',
|
||||
'-t',
|
||||
image_name,
|
||||
'-f',
|
||||
dockerfile_dir,
|
||||
'.',
|
||||
]
|
||||
if bombsquad_version is not None:
|
||||
build_cmd = build_cmd + [
|
||||
'--build-arg',
|
||||
f'bombsquad_version={bombsquad_version}',
|
||||
]
|
||||
if bombsquad_build is not None:
|
||||
build_cmd = build_cmd + [
|
||||
'--build-arg',
|
||||
f'bombsquad_build={str(bombsquad_build)}',
|
||||
]
|
||||
if cmake_build_type is not None:
|
||||
build_cmd = build_cmd + [
|
||||
'--build-arg',
|
||||
f'cmake_build_type={cmake_build_type}',
|
||||
]
|
||||
subprocess.run(build_cmd, check=True)
|
||||
|
||||
|
||||
def docker_build() -> None:
|
||||
"""Build docker image."""
|
||||
# todo: add option to toggle between prefab and cmake
|
||||
from batools import version
|
||||
|
||||
version_num, build_num = version.get_current_version()
|
||||
image_name = 'bombsquad_server'
|
||||
|
||||
print(
|
||||
f'Building docker image {image_name}'
|
||||
+ 'version {version_num}:{build_num}'
|
||||
)
|
||||
_docker_build(
|
||||
image_name,
|
||||
'config/docker/Dockerfile',
|
||||
version_num,
|
||||
build_num,
|
||||
)
|
||||
|
||||
173
tools/batools/docker.py
Normal file
173
tools/batools/docker.py
Normal file
@ -0,0 +1,173 @@
|
||||
# Released under the MIT License. See LICENSE for details.
|
||||
#
|
||||
"""General functionality related to docker builds."""
|
||||
|
||||
import subprocess
|
||||
|
||||
|
||||
def _docker_build(
|
||||
image_name: str,
|
||||
dockerfile_dir: str,
|
||||
cmake_build_type: str | None = None,
|
||||
labels: dict[str, str] | None = None,
|
||||
platform: str | None = None,
|
||||
headless_build: bool | str | None = None,
|
||||
) -> None:
|
||||
|
||||
build_cmd = [
|
||||
'docker',
|
||||
'buildx',
|
||||
'build',
|
||||
'--tag',
|
||||
image_name,
|
||||
'--file',
|
||||
dockerfile_dir,
|
||||
'--load',
|
||||
'.',
|
||||
]
|
||||
|
||||
if cmake_build_type is not None:
|
||||
build_cmd = build_cmd + [
|
||||
'--build-arg',
|
||||
f'cmake_build_type={cmake_build_type}',
|
||||
]
|
||||
if headless_build is not None:
|
||||
if headless_build:
|
||||
headless_build = '1'
|
||||
else:
|
||||
headless_build = '0'
|
||||
build_cmd = build_cmd + [
|
||||
'--build-arg',
|
||||
f'headless_build={headless_build}',
|
||||
]
|
||||
if platform is not None:
|
||||
build_cmd = build_cmd + [
|
||||
'--platform',
|
||||
platform,
|
||||
]
|
||||
if labels is not None:
|
||||
build_cmd = build_cmd + [
|
||||
f'--label={i}={labels[i]}' for i in labels.keys()
|
||||
]
|
||||
subprocess.run(build_cmd, check=True)
|
||||
|
||||
|
||||
def docker_build(
|
||||
platform: str | None = 'linux/amd64',
|
||||
headless_build: bool | str | None = None,
|
||||
build_type: str | None = None,
|
||||
) -> None:
|
||||
"""Build docker image.
|
||||
platform == 'linux/arm64' or platform == 'linux/amd64'"""
|
||||
from batools import version
|
||||
|
||||
version_num, build_num = version.get_current_version()
|
||||
if headless_build is None:
|
||||
headless_build = True
|
||||
if build_type is None:
|
||||
build_type = 'Release'
|
||||
|
||||
image_name = get_docker_image_name(
|
||||
headless_build=headless_build, build_type=build_type
|
||||
)
|
||||
|
||||
if platform is not None and 'arm64' in platform:
|
||||
config_file = 'config/docker/Dockerfile_arm64'
|
||||
else:
|
||||
config_file = 'config/docker/Dockerfile'
|
||||
|
||||
print(
|
||||
f'Building docker image {image_name} '
|
||||
+ f'version {version_num}:{build_num}'
|
||||
)
|
||||
|
||||
_docker_build(
|
||||
image_name,
|
||||
config_file,
|
||||
labels={
|
||||
'bombsquad_version': version_num,
|
||||
'bombsquad_build': str(build_num),
|
||||
},
|
||||
platform=platform,
|
||||
headless_build=headless_build,
|
||||
cmake_build_type=build_type,
|
||||
)
|
||||
|
||||
|
||||
def get_docker_image_name(headless_build: bool | str, build_type: str) -> str:
|
||||
"""Get name of docker images in predefined format."""
|
||||
name = 'bombsquad'
|
||||
if headless_build:
|
||||
name += '_server'
|
||||
else:
|
||||
name += '_gui'
|
||||
if 'release' in build_type.lower():
|
||||
name += '_release'
|
||||
else:
|
||||
name += '_debug'
|
||||
return name
|
||||
|
||||
|
||||
def docker_save_images() -> None:
|
||||
"""Saves bombsquad images loaded into docker."""
|
||||
output = subprocess.run(
|
||||
['docker', 'images'], capture_output=True, text=True, check=True
|
||||
)
|
||||
save_cmd = ['docker', 'save', '-o']
|
||||
# we expect this directory is already present from Makefile
|
||||
build_save_dir = 'build/docker/'
|
||||
|
||||
img_name = get_docker_image_name(headless_build=True, build_type='Release')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(
|
||||
save_cmd + [build_save_dir + img_name + '_docker.tar', img_name],
|
||||
check=True,
|
||||
)
|
||||
|
||||
img_name = get_docker_image_name(headless_build=True, build_type='Debug')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(
|
||||
save_cmd + [build_save_dir + img_name + '_docker.tar', img_name],
|
||||
check=True,
|
||||
)
|
||||
|
||||
img_name = get_docker_image_name(headless_build=False, build_type='Release')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(
|
||||
save_cmd + [build_save_dir + img_name + '_docker.tar', img_name],
|
||||
check=True,
|
||||
)
|
||||
|
||||
img_name = get_docker_image_name(headless_build=False, build_type='Debug')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(
|
||||
save_cmd + [build_save_dir + img_name + '_docker.tar', img_name],
|
||||
check=True,
|
||||
)
|
||||
|
||||
|
||||
def docker_remove_images() -> None:
|
||||
"""Remove the bombsquad images loaded in docker."""
|
||||
output = subprocess.run(
|
||||
['docker', 'images'], capture_output=True, text=True, check=True
|
||||
)
|
||||
remove_cmd = [
|
||||
'docker',
|
||||
'rmi',
|
||||
]
|
||||
|
||||
img_name = get_docker_image_name(headless_build=True, build_type='Release')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(remove_cmd + [img_name], check=True)
|
||||
|
||||
img_name = get_docker_image_name(headless_build=True, build_type='Debug')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(remove_cmd + [img_name], check=True)
|
||||
|
||||
img_name = get_docker_image_name(headless_build=False, build_type='Release')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(remove_cmd + [img_name], check=True)
|
||||
|
||||
img_name = get_docker_image_name(headless_build=False, build_type='Debug')
|
||||
if img_name in output.stdout:
|
||||
subprocess.run(remove_cmd + [img_name], check=True)
|
||||
@ -104,7 +104,14 @@ from batools.pcommands import (
|
||||
ensure_prefab_platform,
|
||||
prefab_run_var,
|
||||
prefab_binary_path,
|
||||
build_docker,
|
||||
build_docker_gui_release,
|
||||
build_docker_gui_debug,
|
||||
build_docker_server_release,
|
||||
build_docker_server_debug,
|
||||
build_docker_arm64_gui_release,
|
||||
build_docker_arm64_server_release,
|
||||
save_docker_images,
|
||||
remove_docker_images,
|
||||
make_prefab,
|
||||
lazybuild,
|
||||
efro_gradle,
|
||||
|
||||
@ -9,6 +9,8 @@ import sys
|
||||
|
||||
from efrotools import pcommand
|
||||
|
||||
# pylint: disable=too-many-lines
|
||||
|
||||
|
||||
def prune_includes() -> None:
|
||||
"""Check for unnecessary includes in C++ files.
|
||||
@ -667,11 +669,60 @@ def prefab_binary_path() -> None:
|
||||
)
|
||||
|
||||
|
||||
def build_docker() -> None:
|
||||
"""Build the docker image with bombsquad cmake server."""
|
||||
import batools.build
|
||||
def build_docker_gui_release() -> None:
|
||||
"""Build the docker image with bombsquad cmake gui."""
|
||||
import batools.docker
|
||||
|
||||
batools.build.docker_build()
|
||||
batools.docker.docker_build(headless_build=False)
|
||||
|
||||
|
||||
def build_docker_gui_debug() -> None:
|
||||
"""Build the docker image with bombsquad debug cmake gui."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_build(headless_build=False, build_type='Debug')
|
||||
|
||||
|
||||
def build_docker_server_release() -> None:
|
||||
"""Build the docker image with bombsquad cmake server."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_build()
|
||||
|
||||
|
||||
def build_docker_server_debug() -> None:
|
||||
"""Build the docker image with bombsquad debug cmake server."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_build(build_type='Debug')
|
||||
|
||||
|
||||
def build_docker_arm64_gui_release() -> None:
|
||||
"""Build the docker image with bombsquad cmake for arm64."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_build(headless_build=False, platform='linux/arm64')
|
||||
|
||||
|
||||
def build_docker_arm64_server_release() -> None:
|
||||
"""Build the docker image with bombsquad cmake server for arm64."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_build(platform='linux/arm64')
|
||||
|
||||
|
||||
def save_docker_images() -> None:
|
||||
"""Saves bombsquad images loaded into docker."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_save_images()
|
||||
|
||||
|
||||
def remove_docker_images() -> None:
|
||||
"""Remove the bombsquad images loaded in docker."""
|
||||
import batools.docker
|
||||
|
||||
batools.docker.docker_remove_images()
|
||||
|
||||
|
||||
def make_prefab() -> None:
|
||||
|
||||
@ -73,9 +73,9 @@ class RemoteError(Exception):
|
||||
occurs remotely. The error string can consist of a remote stack
|
||||
trace or a simple message depending on the context.
|
||||
|
||||
Communication systems should raise more specific error types locally
|
||||
when more introspection/control is needed; this is intended somewhat
|
||||
as a catch-all.
|
||||
Communication systems should aim to communicate specific errors
|
||||
gracefully as standard message responses when specific details are
|
||||
needed; this is intended more as a catch-all.
|
||||
"""
|
||||
|
||||
def __init__(self, msg: str, peer_desc: str):
|
||||
|
||||
@ -45,7 +45,7 @@ class MessageProtocol:
|
||||
forward_communication_errors: bool = False,
|
||||
forward_clean_errors: bool = False,
|
||||
remote_errors_include_stack_traces: bool = False,
|
||||
log_remote_errors: bool = True,
|
||||
log_errors_on_receiver: bool = True,
|
||||
) -> None:
|
||||
"""Create a protocol with a given configuration.
|
||||
|
||||
@ -62,8 +62,8 @@ class MessageProtocol:
|
||||
|
||||
When an exception is not covered by the optional forwarding
|
||||
mechanisms above, it will come across as efro.error.RemoteError
|
||||
and the exception will be logged on the receiver
|
||||
end - at least by default (see details below).
|
||||
and the exception will be logged on the receiver end - at least
|
||||
by default (see details below).
|
||||
|
||||
If 'remote_errors_include_stack_traces' is True, stringified
|
||||
stack traces will be returned with efro.error.RemoteError
|
||||
@ -77,8 +77,8 @@ class MessageProtocol:
|
||||
goal is usually to avoid returning opaque RemoteErrors and to
|
||||
instead return something meaningful as part of the expected
|
||||
response type (even if that value itself represents a logical
|
||||
error state). If 'log_remote_errors' is False, however, such
|
||||
exceptions will not be logged on the receiver. This can be
|
||||
error state). If 'log_errors_on_receiver' is False, however, such
|
||||
exceptions will *not* be logged on the receiver. This can be
|
||||
useful in combination with 'remote_errors_include_stack_traces'
|
||||
and 'forward_clean_errors' in situations where all error
|
||||
logging/management will be happening on the sender end. Be
|
||||
@ -168,7 +168,7 @@ class MessageProtocol:
|
||||
self.remote_errors_include_stack_traces = (
|
||||
remote_errors_include_stack_traces
|
||||
)
|
||||
self.log_remote_errors = log_remote_errors
|
||||
self.log_errors_on_receiver = log_errors_on_receiver
|
||||
|
||||
@staticmethod
|
||||
def encode_dict(obj: dict) -> str:
|
||||
@ -219,7 +219,7 @@ class MessageProtocol:
|
||||
),
|
||||
error_type=ErrorSysResponse.ErrorType.REMOTE,
|
||||
),
|
||||
self.log_remote_errors,
|
||||
self.log_errors_on_receiver,
|
||||
)
|
||||
|
||||
def _to_dict(
|
||||
|
||||
@ -38,6 +38,7 @@ class MessageReceiver:
|
||||
|
||||
# MyMessageReceiver fills out handler() overloads to ensure all
|
||||
# registered handlers have valid types/return-types.
|
||||
|
||||
@receiver.handler
|
||||
def handle_some_message_type(self, message: SomeMsg) -> SomeResponse:
|
||||
# Deal with this message type here.
|
||||
@ -47,7 +48,7 @@ class MessageReceiver:
|
||||
obj.receiver.handle_raw_message(some_raw_data)
|
||||
|
||||
Any unhandled Exception occurring during message handling will result in
|
||||
an Exception being raised on the sending end.
|
||||
an efro.error.RemoteError being raised on the sending end.
|
||||
"""
|
||||
|
||||
is_async = False
|
||||
|
||||
@ -20,22 +20,33 @@ if TYPE_CHECKING:
|
||||
|
||||
class MessageSender:
|
||||
"""Facilitates sending messages to a target and receiving responses.
|
||||
This is instantiated at the class level and used to register unbound
|
||||
class methods to handle raw message sending.
|
||||
|
||||
These are instantiated at the class level and used to register unbound
|
||||
class methods to handle raw message sending. Generally this class is not
|
||||
used directly, but instead autogenerated subclasses which provide type
|
||||
safe overloads are used instead.
|
||||
|
||||
Example:
|
||||
(In this example, MyMessageSender is an autogenerated class that
|
||||
inherits from MessageSender).
|
||||
|
||||
class MyClass:
|
||||
msg = MyMessageSender(some_protocol)
|
||||
msg = MyMessageSender()
|
||||
|
||||
@msg.send_method
|
||||
def send_raw_message(self, message: str) -> str:
|
||||
# Actually send the message here.
|
||||
|
||||
# MyMessageSender class should provide overloads for send(), send_async(),
|
||||
# etc. to ensure all sending happens with valid types.
|
||||
obj = MyClass()
|
||||
obj.msg.send(SomeMessageType())
|
||||
|
||||
# The MyMessageSender generated class would provides overloads for
|
||||
# send(), send_async(), etc. to provide type-safety for message types
|
||||
# and their associated response types.
|
||||
# Thus, given the statement below, a type-checker would know that
|
||||
# 'response' is a SomeResponseType or whatever is associated with
|
||||
# SomeMessageType.
|
||||
response = obj.msg.send(SomeMessageType())
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, protocol: MessageProtocol) -> None:
|
||||
|
||||
@ -480,6 +480,17 @@ def apple_patch(python_dir: str) -> None:
|
||||
"""New test."""
|
||||
patch_modules_setup(python_dir, 'apple')
|
||||
|
||||
# Filter an instance of 'itms-services' that appeared in Python3.12
|
||||
# and which was getting me rejected from the app store.
|
||||
fname = os.path.join(python_dir, 'Lib', 'urllib', 'parse.py')
|
||||
ftxt = readfile(fname)
|
||||
ftxt = replace_exact(
|
||||
ftxt,
|
||||
"'wss', 'itms-services']",
|
||||
"'wss', 'i!t!m!s!-!s!e!r!v!i!c!e!s'.replace('!', '')]",
|
||||
)
|
||||
writefile(fname, ftxt)
|
||||
|
||||
|
||||
def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
|
||||
"""Muck with the Setup.* files Python uses to build modules."""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user