mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-04 14:33:28 +08:00
one beautiful commit for docker
This commit is contained in:
parent
8ce9b77c4f
commit
ca710b04bc
100
.efrocachemap
generated
100
.efrocachemap
generated
@ -421,9 +421,9 @@
|
|||||||
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
|
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
|
||||||
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
|
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
|
||||||
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
|
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
|
||||||
"build/assets/ba_data/data/langdata.json": "faffc0854bc4c34f4ef427404ec75c4d",
|
"build/assets/ba_data/data/langdata.json": "7e73466677344c1722aebe94003360d5",
|
||||||
"build/assets/ba_data/data/languages/arabic.json": "5c27239be3d4f8daefd9f3bd7e99ff8d",
|
"build/assets/ba_data/data/languages/arabic.json": "05040616cb7585e3cce2e9acba96aa75",
|
||||||
"build/assets/ba_data/data/languages/belarussian.json": "260d190aae3282a726b4a27019972d58",
|
"build/assets/ba_data/data/languages/belarussian.json": "3d5523d0004293aa2df02f3f6f3b84f8",
|
||||||
"build/assets/ba_data/data/languages/chinese.json": "2f67c6b127ae85492ac552af1a91e95a",
|
"build/assets/ba_data/data/languages/chinese.json": "2f67c6b127ae85492ac552af1a91e95a",
|
||||||
"build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39",
|
"build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39",
|
||||||
"build/assets/ba_data/data/languages/croatian.json": "e671b9d0c012be1a30f9c15eb1b81860",
|
"build/assets/ba_data/data/languages/croatian.json": "e671b9d0c012be1a30f9c15eb1b81860",
|
||||||
@ -432,7 +432,7 @@
|
|||||||
"build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343",
|
"build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343",
|
||||||
"build/assets/ba_data/data/languages/english.json": "9754e816d3bc3214b7e809950d642309",
|
"build/assets/ba_data/data/languages/english.json": "9754e816d3bc3214b7e809950d642309",
|
||||||
"build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880",
|
"build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880",
|
||||||
"build/assets/ba_data/data/languages/filipino.json": "920fc429ec9b587edc2c6294fffada71",
|
"build/assets/ba_data/data/languages/filipino.json": "9c04219ceeb065b3bc751e6ab3731def",
|
||||||
"build/assets/ba_data/data/languages/french.json": "ee2a81129519d7030a617308da8c9195",
|
"build/assets/ba_data/data/languages/french.json": "ee2a81129519d7030a617308da8c9195",
|
||||||
"build/assets/ba_data/data/languages/german.json": "198b9860c5b9df7b8e3e30b03d8755cb",
|
"build/assets/ba_data/data/languages/german.json": "198b9860c5b9df7b8e3e30b03d8755cb",
|
||||||
"build/assets/ba_data/data/languages/gibberish.json": "3e68d809bd6ede3b9e2c57c147737e42",
|
"build/assets/ba_data/data/languages/gibberish.json": "3e68d809bd6ede3b9e2c57c147737e42",
|
||||||
@ -443,8 +443,8 @@
|
|||||||
"build/assets/ba_data/data/languages/italian.json": "e1d69eb1eec31442bf981121c7cfaf17",
|
"build/assets/ba_data/data/languages/italian.json": "e1d69eb1eec31442bf981121c7cfaf17",
|
||||||
"build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597",
|
"build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597",
|
||||||
"build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f",
|
"build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f",
|
||||||
"build/assets/ba_data/data/languages/persian.json": "8bd6251e46c8ca7fcd075d989e79f0d9",
|
"build/assets/ba_data/data/languages/persian.json": "c209f8f6d3b3dd40d5ca9d36fe0721fe",
|
||||||
"build/assets/ba_data/data/languages/polish.json": "82ad9f88c7d0499a049d2008c85aa6f1",
|
"build/assets/ba_data/data/languages/polish.json": "59ff98adfb4f515f00769d1ec229c232",
|
||||||
"build/assets/ba_data/data/languages/portuguese.json": "615a59bd03f84659158d9f2608a4ab21",
|
"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": "b3e46efd6f869dbd78014570e037c290",
|
||||||
"build/assets/ba_data/data/languages/russian.json": "41e06eda170fb5960393dd6b58d046e1",
|
"build/assets/ba_data/data/languages/russian.json": "41e06eda170fb5960393dd6b58d046e1",
|
||||||
@ -4038,50 +4038,50 @@
|
|||||||
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
|
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
|
||||||
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
|
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
|
||||||
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
||||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "9ac7439035bfc6e58c09fd333be7bf32",
|
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "0c51eee4af632ca8e9132edfea6c5ef5",
|
||||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "0a6c29a617a2a7f75b5ea74ae31c00ba",
|
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "d086ea46307e571d6278a1ac00e7199f",
|
||||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "090c580f73c18253ad03fa7bdb5410c6",
|
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "4119ef59158a5572098c997a01988d42",
|
||||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "fb8aa86a244b28b683ea8148f63800e2",
|
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "6f59df95b4c858986852123b779ea70c",
|
||||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "a6fb7f0164a400a8bce7c7cb2327f41b",
|
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "62505635f81cb7ed9804ec5b0eb43c5a",
|
||||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c6e86f716993e4db6d40b387c1887bf9",
|
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "8e493b1b5c987401daa7cda81e7faeb9",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "fdb8c01b631d5475740f0101b301ff03",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "bb97152641a4ce2c41722ef4da314086",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "8c58b1dff5c711bf8dfe6bcc0c033e02",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "843f0dfcd9bdc2b6886cdd1ac6ba0fc2",
|
||||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "68b0c339ca50a9d498f044d1b9c25665",
|
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "76fff737c7e5e513aa0c55d6dbe179a4",
|
||||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "4bd338604cf6288636422ef3b62e5d44",
|
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "4e81fe4c953d35f96c81ec19f93525d3",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "d585e0b8f0a2a1edefd52b9d9fb2fd40",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "33d430a5730d2c226765a11f86dd0599",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "316e826a593499760060c1c2c09fe278",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "6cd4a729aacbb3838ea020bdfc7d67d2",
|
||||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7070657c31c247dac4d1b14607a8435f",
|
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "2b5f1112f0328d69f3863fb2e06a730d",
|
||||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "606f7ed5a63fad5acbdba62b8f2e953f",
|
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "b051c7642dfcf446dcd1657c121eac21",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "ccfa7d16a67a8b5e28b832861433b536",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "dc8e5d62bcfc1a645c028a7df7ecb738",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "f98f149307ee2096aa5c82fb666d96b2",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "4548c17cdfe8998aa8ecb31ad973ae74",
|
||||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b3d826dae3e8105e5507a50d53142b56",
|
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "333d8035d9233fee2e2b09c158c720e6",
|
||||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "ffc3963828ad90d6da6237aa374909b9",
|
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3f4453380fd5d175c8fb18d8ca3ece4f",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "21b69244af53ac854f513dbe574e9281",
|
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "8d19f198e01491a98bede19987b8cc8f",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "92edda56e8cc74c3552f87d766a83a8c",
|
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "2270da9585ffdca2c0eab77196c3f7d4",
|
||||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "bb11ac758712a51791340d19121b9791",
|
||||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "2226d0e2d34051d962320c86464f3a2d",
|
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "c47ac1d2e839e4e3b701a7c59080dd09",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "bb11ac758712a51791340d19121b9791",
|
||||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "2226d0e2d34051d962320c86464f3a2d",
|
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "c47ac1d2e839e4e3b701a7c59080dd09",
|
||||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "c2d287b53bdac7e5302fe833ac052d2c",
|
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "9cb1b5b345dd00b58992913677a4ad7e",
|
||||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "b3942d4e7c940d86fc039ae149756d3f",
|
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "8a961e945aeb0120d924ec06a162fb55",
|
||||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "c2d287b53bdac7e5302fe833ac052d2c",
|
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "9cb1b5b345dd00b58992913677a4ad7e",
|
||||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "b3942d4e7c940d86fc039ae149756d3f",
|
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "8a961e945aeb0120d924ec06a162fb55",
|
||||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "6c3d9a42b9cdc7af45f7273f76010dd5",
|
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "5fcc0e89141d36e5b152095bfcc21fa1",
|
||||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "404e2e994a58d2e930f189ab835ada45",
|
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "1b63b3daeff198825740a426fe5f7a9f",
|
||||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "6c3d9a42b9cdc7af45f7273f76010dd5",
|
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "5fcc0e89141d36e5b152095bfcc21fa1",
|
||||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "404e2e994a58d2e930f189ab835ada45",
|
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "1b63b3daeff198825740a426fe5f7a9f",
|
||||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "848cfd50cf15726e3acefd60204a85c5",
|
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "e86e8adff4bf043e2c3796ed499ca134",
|
||||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "2fddab497b60617bcaa467a458e5534c",
|
||||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "08c2f91d086e6f3fa73ebc299112358a",
|
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "b21ff6427895bcd8628ea55a3c2d8609",
|
||||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "2fddab497b60617bcaa467a458e5534c",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "50245294e53c993dd3a25db2868f22e0",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "4594d3bdd6f0d5103da725b67c442ca5",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "84d98c5f0dbab599afd67a0fcf8e28d8",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "37f0e4fef1e9106835c572a12f8a0354",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "08f5b3b61056a65d7f39009426d08c48",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "660139dfa55cdbc071bf43526504823b",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "3e4073e334438027320f3fcc2268357f",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "a1961b9730c58599ef326b6af9da7f93",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "51ac5f179b08a8892580ba915452b40a",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "f534609cbfc3b2743a07c0aafb380f4b",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "a61545d3d93c89c5298536c133745c5d",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "fd05e46d0f3acbf9dfa6a6d3b7f75926",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "1a0c96f28a75527e975af1c023716f0f",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "db3a41fe7b3b22c90229b3ecdeb2e5ec",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "0725628caf7f5baa9a59d1022f62a441",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "9b21b94333a5f61d45c40bcb94a53a53",
|
||||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "5548f407d97e380069f6c596c4e36cd7",
|
"src/assets/ba_data/python/babase/_mgen/enums.py": "5548f407d97e380069f6c596c4e36cd7",
|
||||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
||||||
|
|||||||
30
.github/workflows/nightly.yml
vendored
30
.github/workflows/nightly.yml
vendored
@ -5,7 +5,7 @@ on:
|
|||||||
- cron: '30 5 * * *'
|
- cron: '30 5 * * *'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
make_docker_image:
|
make_docker_gui_debug_image:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -16,12 +16,34 @@ jobs:
|
|||||||
- name: Setup project environment
|
- name: Setup project environment
|
||||||
run: make env
|
run: make env
|
||||||
- name: Make the build
|
- name: Make the build
|
||||||
run: make docker-save
|
run: |
|
||||||
|
make docker-gui-debug
|
||||||
|
make docker-save
|
||||||
- name: Upload the build
|
- name: Upload the build
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: docker_server(release)
|
name: docker_gui(debug)
|
||||||
path: build/docker/bombsquad_server_docker.tar
|
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:
|
make_sphinx_docs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
32
.github/workflows/release.yml
vendored
32
.github/workflows/release.yml
vendored
@ -208,7 +208,7 @@ jobs:
|
|||||||
allowUpdates: true
|
allowUpdates: true
|
||||||
artifacts: windows_x86_server_debug.tar
|
artifacts: windows_x86_server_debug.tar
|
||||||
|
|
||||||
release_docker_image:
|
release_docker_gui_image:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -219,12 +219,38 @@ jobs:
|
|||||||
- name: Setup project environment
|
- name: Setup project environment
|
||||||
run: make env
|
run: make env
|
||||||
- name: Make the build
|
- name: Make the build
|
||||||
run: make docker-save
|
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
|
- name: Upload the build
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
allowUpdates: true
|
allowUpdates: true
|
||||||
artifacts: build/docker/bombsquad_server_docker.tar
|
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:
|
release_sphinx_docs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
### 1.7.35 (build 21880, api 8, 2024-05-19)
|
### 1.7.35 (build 21884, api 8, 2024-06-12)
|
||||||
- Fixed an issue where the engine would block at exit on some version of Linux
|
- Fixed an issue where the engine would block at exit on some version of Linux
|
||||||
until Ctrl-D was pressed in the calling terminal.
|
until Ctrl-D was pressed in the calling terminal.
|
||||||
- V2 accounts have been around for a while now, so the old V1 device login
|
- V2 accounts have been around for a while now, so the old V1 device login
|
||||||
|
|||||||
32
Makefile
32
Makefile
@ -1183,23 +1183,35 @@ clion-staging: assets-cmake resources meta
|
|||||||
# #
|
# #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Build the docker image named bombsquad_server
|
# Build the docker image
|
||||||
docker-build: assets-cmake
|
docker-gui-release: assets-cmake
|
||||||
$(PCOMMAND) build_docker
|
$(PCOMMAND) build_docker_gui_release
|
||||||
|
|
||||||
# Run the bombsquad_server image
|
# Build the docker image
|
||||||
docker-run:
|
docker-gui-debug: assets-cmake
|
||||||
docker run -it bombsquad_server
|
$(PCOMMAND) build_docker_gui_debug
|
||||||
|
|
||||||
|
# Build the docker image
|
||||||
|
docker-server-release: assets-cmake
|
||||||
|
$(PCOMMAND) build_docker_server_release,
|
||||||
|
|
||||||
|
# Build the docker image
|
||||||
|
docker-server-debug: assets-cmake
|
||||||
|
$(PCOMMAND) build_docker_server_debug
|
||||||
|
|
||||||
|
# Build the docker image for arm64
|
||||||
|
docker-arm64-gui-release: assets-cmake
|
||||||
|
$(PCOMMAND) build_docker_arm64
|
||||||
|
|
||||||
# Save the bombsquad_server docker image to build/docker/bombsquad_server_docker.tar
|
# Save the bombsquad_server docker image to build/docker/bombsquad_server_docker.tar
|
||||||
docker-save: docker-build
|
docker-save:
|
||||||
mkdir -p build/docker/
|
mkdir -p build/docker/
|
||||||
docker save bombsquad_server -o build/docker/bombsquad_server_docker.tar
|
$(PCOMMAND) save_docker_images
|
||||||
|
|
||||||
# Cleanup docker files
|
# Cleanup docker files
|
||||||
docker-clean:
|
docker-clean:
|
||||||
rm build/docker/bombsquad_server_docker.tar
|
rm -rf build/docker/
|
||||||
docker rmi bombsquad_server --force
|
$(PCOMMAND) remove_docker_images
|
||||||
docker system prune
|
docker system prune
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,21 +1,24 @@
|
|||||||
# if provided it will make debug build
|
# if provided it will make debug build
|
||||||
ARG cmake_build_type=Release
|
ARG cmake_build_type=Release
|
||||||
|
# whether to make GUI or headless build (defaults to headless)
|
||||||
# system to start with the build with
|
ARG headless_build=1
|
||||||
# currently will break for non ubuntu system
|
# system to start with the build with
|
||||||
ARG base_image=ubuntu:24.04
|
# currently will break for other images
|
||||||
|
ARG base_image=ubuntu:latest
|
||||||
|
|
||||||
#-------------------------------BUILDER--------------------------------
|
#-------------------------------BUILDER--------------------------------
|
||||||
# Start with the base image
|
# Start with the base image
|
||||||
FROM ${base_image} AS builder
|
FROM ${base_image} AS builder
|
||||||
|
|
||||||
# Renew the arg
|
# Renew the arg
|
||||||
|
ARG headless_build
|
||||||
ARG cmake_build_type
|
ARG cmake_build_type
|
||||||
|
|
||||||
ENV LANG en_US.utf8
|
ENV LANG en_US.utf8
|
||||||
ENV LANGUAGE=en_US
|
ENV LANGUAGE=en_US
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
ENV CMAKE_BUILD_TYPE=${cmake_build_type}
|
ENV CMAKE_BUILD_TYPE=${cmake_build_type}
|
||||||
|
ENV HEADLESS_BUILD=${headless_build}
|
||||||
|
|
||||||
# Install build dependencies
|
# Install build dependencies
|
||||||
RUN apt-get update -y && \
|
RUN apt-get update -y && \
|
||||||
@ -24,25 +27,31 @@ RUN apt-get update -y && \
|
|||||||
python3.12-venv \
|
python3.12-venv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
libsdl2-dev \
|
libsdl2-dev \
|
||||||
libvorbisfile3 \
|
libglut-dev \
|
||||||
freeglut3-dev \
|
|
||||||
libopenal-dev \
|
libopenal-dev \
|
||||||
|
libvorbis-dev \
|
||||||
make \
|
make \
|
||||||
curl \
|
curl \
|
||||||
rsync \
|
rsync \
|
||||||
clang-format \
|
clang-format \
|
||||||
cmake \
|
cmake
|
||||||
libvorbis-dev
|
|
||||||
|
|
||||||
# Copy source code
|
# Copy source code
|
||||||
COPY ./ /home/ubuntu/ballistica
|
COPY ./ /ballistica
|
||||||
|
|
||||||
WORKDIR /home/ubuntu/ballistica
|
WORKDIR /ballistica
|
||||||
|
|
||||||
# Compile the application
|
# Compile the application
|
||||||
RUN make cmake-server-build \
|
RUN mkdir /ballistica_cmake && \
|
||||||
&& mkdir ./../ballistica_cmake_server \
|
if [ "$HEADLESS_BUILD" != "0" ]; then \
|
||||||
&& mv build/cmake/* ./../ballistica_cmake_server
|
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--------------------------------
|
#-------------------------------RUNNER--------------------------------
|
||||||
# Create a new stage for the runtime environment
|
# Create a new stage for the runtime environment
|
||||||
@ -53,33 +62,36 @@ ENV LANGUAGE=en_US
|
|||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
# Renew the arg
|
# Renew the arg
|
||||||
|
ARG headless_build
|
||||||
|
ENV HEADLESS_BUILD=${headless_build}
|
||||||
ARG cmake_build_type
|
ARG cmake_build_type
|
||||||
LABEL BUILD_TYPE=${cmake_build_type}
|
|
||||||
|
|
||||||
ARG bombsquad_build=N/A
|
LABEL BOMBSQUAD_BUILD_TYPE=${cmake_build_type}
|
||||||
LABEL BOMBSQUAD_BUILD=${bombsquad_build}
|
|
||||||
|
|
||||||
ARG bombsquad_version=N/A
|
|
||||||
LABEL BOMBSQUAD_VERSION=${bombsquad_version}
|
|
||||||
|
|
||||||
# Install runtime dependencies
|
# Install runtime dependencies
|
||||||
RUN apt-get update -y && \
|
RUN apt-get update -y && \
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
python3.12-dev \
|
python3.12-dev && \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
if [ "$HEADLESS_BUILD" = "0" ]; then \
|
||||||
&& python3.12 -c "import uuid;print(uuid.uuid4())">/etc/machine-id
|
apt-get install -y \
|
||||||
|
libsdl2-dev \
|
||||||
|
libvorbis-dev \
|
||||||
|
libglut-dev \
|
||||||
|
libopenal-dev; \
|
||||||
|
fi && \
|
||||||
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
dbus-uuidgen > /etc/machine-id
|
||||||
|
|
||||||
# Copy the compiled application from the builder stage
|
# 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
|
/home/ubuntu/ballistica
|
||||||
# ballisticakit_headless in staged is a symlink
|
|
||||||
COPY --from=builder /home/ubuntu/ballistica_cmake_server/*/ballisticakit_headless \
|
|
||||||
/home/ubuntu/ballistica/dist
|
|
||||||
|
|
||||||
WORKDIR /home/ubuntu/ballistica
|
WORKDIR /home/ubuntu/ballistica
|
||||||
|
|
||||||
|
RUN ln -s ballisticakit* run
|
||||||
|
|
||||||
# Expose the necessary port
|
# Expose the necessary port
|
||||||
EXPOSE 43210/udp
|
EXPOSE 43210/udp
|
||||||
|
|
||||||
# Set the default command to run the application
|
# Set the default command to run the application
|
||||||
CMD [ "./ballisticakit_server" ]
|
CMD [ "./run" ]
|
||||||
@ -6,16 +6,16 @@ mypy==1.10.0
|
|||||||
pbxproj==4.1.0
|
pbxproj==4.1.0
|
||||||
pdoc==14.5.0
|
pdoc==14.5.0
|
||||||
pur==7.3.1
|
pur==7.3.1
|
||||||
pylint==3.2.1
|
pylint==3.2.2
|
||||||
pylsp-mypy==0.6.8
|
pylsp-mypy==0.6.8
|
||||||
pytest==8.2.0
|
pytest==8.2.1
|
||||||
python-daemon==3.0.1
|
python-daemon==3.0.1
|
||||||
python-lsp-black==2.0.0
|
python-lsp-black==2.0.0
|
||||||
python-lsp-server==1.11.0
|
python-lsp-server==1.11.0
|
||||||
requests==2.31.0
|
requests==2.32.3
|
||||||
Sphinx==7.3.7
|
Sphinx==7.3.7
|
||||||
tomlkit==0.12.5
|
tomlkit==0.12.5
|
||||||
types-certifi==2021.10.8.3
|
types-certifi==2021.10.8.3
|
||||||
types-filelock==3.2.7
|
types-filelock==3.2.7
|
||||||
types-requests==2.31.0.20240406
|
types-requests==2.32.0.20240523
|
||||||
typing_extensions==4.11.0
|
typing_extensions==4.12.0
|
||||||
|
|||||||
@ -116,6 +116,10 @@
|
|||||||
"ba_data/python/bacommon/net.py",
|
"ba_data/python/bacommon/net.py",
|
||||||
"ba_data/python/bacommon/servermanager.py",
|
"ba_data/python/bacommon/servermanager.py",
|
||||||
"ba_data/python/bacommon/transfer.py",
|
"ba_data/python/bacommon/transfer.py",
|
||||||
|
"ba_data/python/bacommon/workspace/__init__.py",
|
||||||
|
"ba_data/python/bacommon/workspace/__pycache__/__init__.cpython-312.opt-1.pyc",
|
||||||
|
"ba_data/python/bacommon/workspace/__pycache__/assetsv1.cpython-312.opt-1.pyc",
|
||||||
|
"ba_data/python/bacommon/workspace/assetsv1.py",
|
||||||
"ba_data/python/baenv.py",
|
"ba_data/python/baenv.py",
|
||||||
"ba_data/python/baplus/__init__.py",
|
"ba_data/python/baplus/__init__.py",
|
||||||
"ba_data/python/baplus/__pycache__/__init__.cpython-312.opt-1.pyc",
|
"ba_data/python/baplus/__pycache__/__init__.cpython-312.opt-1.pyc",
|
||||||
|
|||||||
@ -733,6 +733,8 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \
|
|||||||
$(BUILD_DIR)/ba_data/python/bacommon/net.py \
|
$(BUILD_DIR)/ba_data/python/bacommon/net.py \
|
||||||
$(BUILD_DIR)/ba_data/python/bacommon/servermanager.py \
|
$(BUILD_DIR)/ba_data/python/bacommon/servermanager.py \
|
||||||
$(BUILD_DIR)/ba_data/python/bacommon/transfer.py \
|
$(BUILD_DIR)/ba_data/python/bacommon/transfer.py \
|
||||||
|
$(BUILD_DIR)/ba_data/python/bacommon/workspace/__init__.py \
|
||||||
|
$(BUILD_DIR)/ba_data/python/bacommon/workspace/assetsv1.py \
|
||||||
$(BUILD_DIR)/ba_data/python/efro/__init__.py \
|
$(BUILD_DIR)/ba_data/python/efro/__init__.py \
|
||||||
$(BUILD_DIR)/ba_data/python/efro/call.py \
|
$(BUILD_DIR)/ba_data/python/efro/call.py \
|
||||||
$(BUILD_DIR)/ba_data/python/efro/cloudshell.py \
|
$(BUILD_DIR)/ba_data/python/efro/cloudshell.py \
|
||||||
@ -768,6 +770,8 @@ SCRIPT_TARGETS_PYC_PUBLIC_TOOLS = \
|
|||||||
$(BUILD_DIR)/ba_data/python/bacommon/__pycache__/net.cpython-312.opt-1.pyc \
|
$(BUILD_DIR)/ba_data/python/bacommon/__pycache__/net.cpython-312.opt-1.pyc \
|
||||||
$(BUILD_DIR)/ba_data/python/bacommon/__pycache__/servermanager.cpython-312.opt-1.pyc \
|
$(BUILD_DIR)/ba_data/python/bacommon/__pycache__/servermanager.cpython-312.opt-1.pyc \
|
||||||
$(BUILD_DIR)/ba_data/python/bacommon/__pycache__/transfer.cpython-312.opt-1.pyc \
|
$(BUILD_DIR)/ba_data/python/bacommon/__pycache__/transfer.cpython-312.opt-1.pyc \
|
||||||
|
$(BUILD_DIR)/ba_data/python/bacommon/workspace/__pycache__/__init__.cpython-312.opt-1.pyc \
|
||||||
|
$(BUILD_DIR)/ba_data/python/bacommon/workspace/__pycache__/assetsv1.cpython-312.opt-1.pyc \
|
||||||
$(BUILD_DIR)/ba_data/python/efro/__pycache__/__init__.cpython-312.opt-1.pyc \
|
$(BUILD_DIR)/ba_data/python/efro/__pycache__/__init__.cpython-312.opt-1.pyc \
|
||||||
$(BUILD_DIR)/ba_data/python/efro/__pycache__/call.cpython-312.opt-1.pyc \
|
$(BUILD_DIR)/ba_data/python/efro/__pycache__/call.cpython-312.opt-1.pyc \
|
||||||
$(BUILD_DIR)/ba_data/python/efro/__pycache__/cloudshell.cpython-312.opt-1.pyc \
|
$(BUILD_DIR)/ba_data/python/efro/__pycache__/cloudshell.cpython-312.opt-1.pyc \
|
||||||
|
|||||||
@ -52,7 +52,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
# Build number and version of the ballistica binary we expect to be
|
# Build number and version of the ballistica binary we expect to be
|
||||||
# using.
|
# using.
|
||||||
TARGET_BALLISTICA_BUILD = 21880
|
TARGET_BALLISTICA_BUILD = 21884
|
||||||
TARGET_BALLISTICA_VERSION = '1.7.35'
|
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
|
// We used to plug version in directly here, but that caused uuids to
|
||||||
// shuffle too rapidly during periods of rapid development. This
|
// shuffle too rapidly during periods of rapid development. This
|
||||||
// keeps it more constant.
|
// keeps it more constant.
|
||||||
// __last_rand_uuid_component_shuffle_date__ 2023 12 13
|
// __last_rand_uuid_component_shuffle_date__ 2024 6 12
|
||||||
auto rand_uuid_component{"7YM96RZHN6ZCPZGTQONULZO1JU5NMMC7"};
|
auto rand_uuid_component{"WI5XDVM7QQBD4G6O0GS2DW6IPJ4VQT9X"};
|
||||||
|
|
||||||
inputs.emplace_back(rand_uuid_component);
|
inputs.emplace_back(rand_uuid_component);
|
||||||
auto gil{Python::ScopedInterpreterLock()};
|
auto gil{Python::ScopedInterpreterLock()};
|
||||||
|
|||||||
@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
|
|||||||
namespace ballistica {
|
namespace ballistica {
|
||||||
|
|
||||||
// These are set automatically via script; don't modify them here.
|
// These are set automatically via script; don't modify them here.
|
||||||
const int kEngineBuildNumber = 21880;
|
const int kEngineBuildNumber = 21884;
|
||||||
const char* kEngineVersion = "1.7.35";
|
const char* kEngineVersion = "1.7.35";
|
||||||
const int kEngineApiVersion = 8;
|
const int kEngineApiVersion = 8;
|
||||||
|
|
||||||
|
|||||||
3
tools/bacommon/workspace/__init__.py
Normal file
3
tools/bacommon/workspace/__init__.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Workspace functionality."""
|
||||||
34
tools/bacommon/workspace/assetsv1.py
Normal file
34
tools/bacommon/workspace/assetsv1.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Defines workspace behavior."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import TYPE_CHECKING, Annotated
|
||||||
|
|
||||||
|
from efro.dataclassio import ioprepped, IOAttrs
|
||||||
|
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class AssetsV1GlobalVals:
|
||||||
|
"""Global values for an assets_v1 workspace."""
|
||||||
|
|
||||||
|
# Just dummy testing values for now.
|
||||||
|
emit: Annotated[bool, IOAttrs('emit')]
|
||||||
|
aggro: Annotated[float, IOAttrs('aggro')]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class AssetsV1PathVals:
|
||||||
|
"""Path-specific values for an assets_v1 workspace path."""
|
||||||
|
|
||||||
|
# Just dummy testing values for now.
|
||||||
|
width: Annotated[int, IOAttrs('width')]
|
||||||
|
height: Annotated[int, IOAttrs('height')]
|
||||||
@ -644,59 +644,3 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
|
|||||||
else:
|
else:
|
||||||
if verbose:
|
if verbose:
|
||||||
print(f'{Clr.BLD}{title}:{Clr.RST} Keeping existing build dir.')
|
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,
|
ensure_prefab_platform,
|
||||||
prefab_run_var,
|
prefab_run_var,
|
||||||
prefab_binary_path,
|
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,
|
make_prefab,
|
||||||
lazybuild,
|
lazybuild,
|
||||||
efro_gradle,
|
efro_gradle,
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import sys
|
|||||||
|
|
||||||
from efrotools import pcommand
|
from efrotools import pcommand
|
||||||
|
|
||||||
|
# pylint: disable=too-many-lines
|
||||||
|
|
||||||
def prune_includes() -> None:
|
def prune_includes() -> None:
|
||||||
"""Check for unnecessary includes in C++ files.
|
"""Check for unnecessary includes in C++ files.
|
||||||
@ -667,11 +668,60 @@ def prefab_binary_path() -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def build_docker() -> None:
|
def build_docker_gui_release() -> None:
|
||||||
"""Build the docker image with bombsquad cmake server."""
|
"""Build the docker image with bombsquad cmake gui."""
|
||||||
import batools.build
|
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:
|
def make_prefab() -> None:
|
||||||
|
|||||||
@ -44,6 +44,7 @@ def dataclass_to_dict(
|
|||||||
obj: Any,
|
obj: Any,
|
||||||
codec: Codec = Codec.JSON,
|
codec: Codec = Codec.JSON,
|
||||||
coerce_to_float: bool = True,
|
coerce_to_float: bool = True,
|
||||||
|
discard_extra_attrs: bool = False,
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Given a dataclass object, return a json-friendly dict.
|
"""Given a dataclass object, return a json-friendly dict.
|
||||||
|
|
||||||
@ -62,7 +63,11 @@ def dataclass_to_dict(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
out = _Outputter(
|
out = _Outputter(
|
||||||
obj, create=True, codec=codec, coerce_to_float=coerce_to_float
|
obj,
|
||||||
|
create=True,
|
||||||
|
codec=codec,
|
||||||
|
coerce_to_float=coerce_to_float,
|
||||||
|
discard_extra_attrs=discard_extra_attrs,
|
||||||
).run()
|
).run()
|
||||||
assert isinstance(out, dict)
|
assert isinstance(out, dict)
|
||||||
return out
|
return out
|
||||||
@ -157,14 +162,21 @@ def dataclass_from_json(
|
|||||||
|
|
||||||
|
|
||||||
def dataclass_validate(
|
def dataclass_validate(
|
||||||
obj: Any, coerce_to_float: bool = True, codec: Codec = Codec.JSON
|
obj: Any,
|
||||||
|
coerce_to_float: bool = True,
|
||||||
|
codec: Codec = Codec.JSON,
|
||||||
|
discard_extra_attrs: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Ensure that values in a dataclass instance are the correct types."""
|
"""Ensure that values in a dataclass instance are the correct types."""
|
||||||
|
|
||||||
# Simply run an output pass but tell it not to generate data;
|
# Simply run an output pass but tell it not to generate data;
|
||||||
# only run validation.
|
# only run validation.
|
||||||
_Outputter(
|
_Outputter(
|
||||||
obj, create=False, codec=codec, coerce_to_float=coerce_to_float
|
obj,
|
||||||
|
create=False,
|
||||||
|
codec=codec,
|
||||||
|
coerce_to_float=coerce_to_float,
|
||||||
|
discard_extra_attrs=discard_extra_attrs,
|
||||||
).run()
|
).run()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -61,6 +61,29 @@ class IOExtendedData:
|
|||||||
type-safe form.
|
type-safe form.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# pylint: disable=useless-return
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def handle_input_error(cls, exc: Exception) -> Self | None:
|
||||||
|
"""Called when an error occurs during input decoding.
|
||||||
|
|
||||||
|
This allows a type to optionally return substitute data
|
||||||
|
to be used in place of the failed decode. If it returns
|
||||||
|
None, the original exception is re-raised.
|
||||||
|
|
||||||
|
It is generally a bad idea to apply catch-alls such as this,
|
||||||
|
as it can lead to silent data loss. This should only be used
|
||||||
|
in specific cases such as user settings where an occasional
|
||||||
|
reset is harmless and is preferable to keeping all contained
|
||||||
|
enums and other values backward compatible indefinitely.
|
||||||
|
"""
|
||||||
|
del exc # Unused.
|
||||||
|
|
||||||
|
# By default we let things fail.
|
||||||
|
return None
|
||||||
|
|
||||||
|
# pylint: enable=useless-return
|
||||||
|
|
||||||
|
|
||||||
EnumT = TypeVar('EnumT', bound=Enum)
|
EnumT = TypeVar('EnumT', bound=Enum)
|
||||||
|
|
||||||
|
|||||||
@ -236,6 +236,28 @@ class _Inputter:
|
|||||||
sets should be passed as lists, enums should be passed as their
|
sets should be passed as lists, enums should be passed as their
|
||||||
associated values, and nested dataclasses should be passed as dicts.
|
associated values, and nested dataclasses should be passed as dicts.
|
||||||
"""
|
"""
|
||||||
|
try:
|
||||||
|
return self._do_dataclass_from_input(cls, fieldpath, values)
|
||||||
|
except Exception as exc:
|
||||||
|
# Extended data types can choose to sub default data in case
|
||||||
|
# of failures (generally not a good idea but occasionally
|
||||||
|
# useful).
|
||||||
|
if issubclass(cls, IOExtendedData):
|
||||||
|
fallback = cls.handle_input_error(exc)
|
||||||
|
if fallback is None:
|
||||||
|
raise
|
||||||
|
# Make sure fallback gave us the right type.
|
||||||
|
if not isinstance(fallback, cls):
|
||||||
|
raise RuntimeError(
|
||||||
|
f'handle_input_error() was expected to return a {cls}'
|
||||||
|
f' but returned a {type(fallback)}.'
|
||||||
|
) from exc
|
||||||
|
return fallback
|
||||||
|
raise
|
||||||
|
|
||||||
|
def _do_dataclass_from_input(
|
||||||
|
self, cls: type, fieldpath: str, values: dict
|
||||||
|
) -> Any:
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
# pylint: disable=too-many-statements
|
# pylint: disable=too-many-statements
|
||||||
# pylint: disable=too-many-branches
|
# pylint: disable=too-many-branches
|
||||||
@ -377,6 +399,7 @@ class _Inputter:
|
|||||||
create=False,
|
create=False,
|
||||||
codec=self._codec,
|
codec=self._codec,
|
||||||
coerce_to_float=self._coerce_to_float,
|
coerce_to_float=self._coerce_to_float,
|
||||||
|
discard_extra_attrs=False,
|
||||||
)
|
)
|
||||||
self._soft_default_validator.soft_default_check(
|
self._soft_default_validator.soft_default_check(
|
||||||
value=value, anntype=anntype, fieldpath=fieldpath
|
value=value, anntype=anntype, fieldpath=fieldpath
|
||||||
|
|||||||
@ -38,12 +38,18 @@ class _Outputter:
|
|||||||
"""Validates or exports data contained in a dataclass instance."""
|
"""Validates or exports data contained in a dataclass instance."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, obj: Any, create: bool, codec: Codec, coerce_to_float: bool
|
self,
|
||||||
|
obj: Any,
|
||||||
|
create: bool,
|
||||||
|
codec: Codec,
|
||||||
|
coerce_to_float: bool,
|
||||||
|
discard_extra_attrs: bool,
|
||||||
) -> None:
|
) -> None:
|
||||||
self._obj = obj
|
self._obj = obj
|
||||||
self._create = create
|
self._create = create
|
||||||
self._codec = codec
|
self._codec = codec
|
||||||
self._coerce_to_float = coerce_to_float
|
self._coerce_to_float = coerce_to_float
|
||||||
|
self._discard_extra_attrs = discard_extra_attrs
|
||||||
|
|
||||||
def run(self) -> Any:
|
def run(self) -> Any:
|
||||||
"""Do the thing."""
|
"""Do the thing."""
|
||||||
@ -133,17 +139,18 @@ class _Outputter:
|
|||||||
out[storagename] = outvalue
|
out[storagename] = outvalue
|
||||||
|
|
||||||
# If there's extra-attrs stored on us, check/include them.
|
# If there's extra-attrs stored on us, check/include them.
|
||||||
extra_attrs = getattr(obj, EXTRA_ATTRS_ATTR, None)
|
if not self._discard_extra_attrs:
|
||||||
if isinstance(extra_attrs, dict):
|
extra_attrs = getattr(obj, EXTRA_ATTRS_ATTR, None)
|
||||||
if not _is_valid_for_codec(extra_attrs, self._codec):
|
if isinstance(extra_attrs, dict):
|
||||||
raise TypeError(
|
if not _is_valid_for_codec(extra_attrs, self._codec):
|
||||||
f'Extra attrs on \'{fieldpath}\' contains data type(s)'
|
raise TypeError(
|
||||||
f' not supported by \'{self._codec.value}\' codec:'
|
f'Extra attrs on \'{fieldpath}\' contains data type(s)'
|
||||||
f' {extra_attrs}.'
|
f' not supported by \'{self._codec.value}\' codec:'
|
||||||
)
|
f' {extra_attrs}.'
|
||||||
if self._create:
|
)
|
||||||
assert out is not None
|
if self._create:
|
||||||
out.update(extra_attrs)
|
assert out is not None
|
||||||
|
out.update(extra_attrs)
|
||||||
|
|
||||||
# If this obj inherits from multi-type, store its type id.
|
# If this obj inherits from multi-type, store its type id.
|
||||||
if isinstance(obj, IOMultiType):
|
if isinstance(obj, IOMultiType):
|
||||||
|
|||||||
@ -28,8 +28,6 @@ from efro.dataclassio import (
|
|||||||
)
|
)
|
||||||
from efro.terminal import Clr
|
from efro.terminal import Clr
|
||||||
|
|
||||||
from efrotools.util import is_wsl_windows_build_path
|
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import efro.terminal
|
import efro.terminal
|
||||||
@ -661,6 +659,8 @@ def _write_cache_file(staging_dir: str, fname: str) -> tuple[str, str, str]:
|
|||||||
|
|
||||||
def _cache_prefix_for_file(fname: str) -> bytes:
|
def _cache_prefix_for_file(fname: str) -> bytes:
|
||||||
# pylint: disable=global-statement
|
# pylint: disable=global-statement
|
||||||
|
from efrotools.util import is_wsl_windows_build_path
|
||||||
|
|
||||||
global g_cache_prefix_exec
|
global g_cache_prefix_exec
|
||||||
global g_cache_prefix_noexec
|
global g_cache_prefix_noexec
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user