From ca710b04bcd3cee39966c049d30f82f3aba9fdb3 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Thu, 6 Jun 2024 21:41:03 +0530 Subject: [PATCH 01/10] one beautiful commit for docker --- .efrocachemap | 100 +++++----- .github/workflows/nightly.yml | 30 ++- .github/workflows/release.yml | 32 +++- CHANGELOG.md | 2 +- Makefile | 32 +++- config/docker/Dockerfile | 68 ++++--- config/requirements.txt | 10 +- src/assets/.asset_manifest_public.json | 4 + src/assets/Makefile | 4 + src/assets/ba_data/python/baenv.py | 2 +- src/ballistica/base/platform/base_platform.cc | 4 +- src/ballistica/shared/ballistica.cc | 2 +- tools/bacommon/workspace/__init__.py | 3 + tools/bacommon/workspace/assetsv1.py | 34 ++++ tools/batools/build.py | 56 ------ tools/batools/docker.py | 173 ++++++++++++++++++ tools/batools/pcommandmain.py | 9 +- tools/batools/pcommands.py | 58 +++++- tools/efro/dataclassio/_api.py | 18 +- tools/efro/dataclassio/_base.py | 23 +++ tools/efro/dataclassio/_inputter.py | 23 +++ tools/efro/dataclassio/_outputter.py | 31 ++-- tools/efrotools/efrocache.py | 4 +- 23 files changed, 539 insertions(+), 183 deletions(-) create mode 100644 tools/bacommon/workspace/__init__.py create mode 100644 tools/bacommon/workspace/assetsv1.py create mode 100644 tools/batools/docker.py diff --git a/.efrocachemap b/.efrocachemap index 856e00b0..25ba089b 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -421,9 +421,9 @@ "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": "faffc0854bc4c34f4ef427404ec75c4d", - "build/assets/ba_data/data/languages/arabic.json": "5c27239be3d4f8daefd9f3bd7e99ff8d", - "build/assets/ba_data/data/languages/belarussian.json": "260d190aae3282a726b4a27019972d58", + "build/assets/ba_data/data/langdata.json": "7e73466677344c1722aebe94003360d5", + "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", "build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39", "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/english.json": "9754e816d3bc3214b7e809950d642309", "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/german.json": "198b9860c5b9df7b8e3e30b03d8755cb", "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/korean.json": "4e3524327a0174250aff5e1ef4c0c597", "build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f", - "build/assets/ba_data/data/languages/persian.json": "8bd6251e46c8ca7fcd075d989e79f0d9", - "build/assets/ba_data/data/languages/polish.json": "82ad9f88c7d0499a049d2008c85aa6f1", + "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/russian.json": "41e06eda170fb5960393dd6b58d046e1", @@ -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": "9ac7439035bfc6e58c09fd333be7bf32", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "0a6c29a617a2a7f75b5ea74ae31c00ba", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "090c580f73c18253ad03fa7bdb5410c6", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "fb8aa86a244b28b683ea8148f63800e2", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "a6fb7f0164a400a8bce7c7cb2327f41b", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c6e86f716993e4db6d40b387c1887bf9", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "fdb8c01b631d5475740f0101b301ff03", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "8c58b1dff5c711bf8dfe6bcc0c033e02", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "68b0c339ca50a9d498f044d1b9c25665", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "4bd338604cf6288636422ef3b62e5d44", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "d585e0b8f0a2a1edefd52b9d9fb2fd40", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "316e826a593499760060c1c2c09fe278", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7070657c31c247dac4d1b14607a8435f", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "606f7ed5a63fad5acbdba62b8f2e953f", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "ccfa7d16a67a8b5e28b832861433b536", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "f98f149307ee2096aa5c82fb666d96b2", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b3d826dae3e8105e5507a50d53142b56", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "ffc3963828ad90d6da6237aa374909b9", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "21b69244af53ac854f513dbe574e9281", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "92edda56e8cc74c3552f87d766a83a8c", - "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": "50245294e53c993dd3a25db2868f22e0", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "84d98c5f0dbab599afd67a0fcf8e28d8", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "08f5b3b61056a65d7f39009426d08c48", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "3e4073e334438027320f3fcc2268357f", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "51ac5f179b08a8892580ba915452b40a", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "a61545d3d93c89c5298536c133745c5d", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "1a0c96f28a75527e975af1c023716f0f", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "0725628caf7f5baa9a59d1022f62a441", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "0c51eee4af632ca8e9132edfea6c5ef5", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "d086ea46307e571d6278a1ac00e7199f", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "4119ef59158a5572098c997a01988d42", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "6f59df95b4c858986852123b779ea70c", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "62505635f81cb7ed9804ec5b0eb43c5a", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "8e493b1b5c987401daa7cda81e7faeb9", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "bb97152641a4ce2c41722ef4da314086", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "843f0dfcd9bdc2b6886cdd1ac6ba0fc2", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "76fff737c7e5e513aa0c55d6dbe179a4", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "4e81fe4c953d35f96c81ec19f93525d3", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "33d430a5730d2c226765a11f86dd0599", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "6cd4a729aacbb3838ea020bdfc7d67d2", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "2b5f1112f0328d69f3863fb2e06a730d", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "b051c7642dfcf446dcd1657c121eac21", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "dc8e5d62bcfc1a645c028a7df7ecb738", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "4548c17cdfe8998aa8ecb31ad973ae74", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "333d8035d9233fee2e2b09c158c720e6", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3f4453380fd5d175c8fb18d8ca3ece4f", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "8d19f198e01491a98bede19987b8cc8f", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "2270da9585ffdca2c0eab77196c3f7d4", + "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "bb11ac758712a51791340d19121b9791", + "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "c47ac1d2e839e4e3b701a7c59080dd09", + "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "bb11ac758712a51791340d19121b9791", + "build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "c47ac1d2e839e4e3b701a7c59080dd09", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "9cb1b5b345dd00b58992913677a4ad7e", + "build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "8a961e945aeb0120d924ec06a162fb55", + "build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "9cb1b5b345dd00b58992913677a4ad7e", + "build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "8a961e945aeb0120d924ec06a162fb55", + "build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "5fcc0e89141d36e5b152095bfcc21fa1", + "build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "1b63b3daeff198825740a426fe5f7a9f", + "build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "5fcc0e89141d36e5b152095bfcc21fa1", + "build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "1b63b3daeff198825740a426fe5f7a9f", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "e86e8adff4bf043e2c3796ed499ca134", + "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "2fddab497b60617bcaa467a458e5534c", + "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "b21ff6427895bcd8628ea55a3c2d8609", + "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "2fddab497b60617bcaa467a458e5534c", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "4594d3bdd6f0d5103da725b67c442ca5", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "37f0e4fef1e9106835c572a12f8a0354", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "660139dfa55cdbc071bf43526504823b", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "a1961b9730c58599ef326b6af9da7f93", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "f534609cbfc3b2743a07c0aafb380f4b", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "fd05e46d0f3acbf9dfa6a6d3b7f75926", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "db3a41fe7b3b22c90229b3ecdeb2e5ec", + "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/enums.py": "5548f407d97e380069f6c596c4e36cd7", "src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d", diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index d64062a5..c92f6428 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -5,7 +5,7 @@ on: - cron: '30 5 * * *' jobs: - make_docker_image: + make_docker_gui_debug_image: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -16,13 +16,35 @@ jobs: - name: Setup project environment run: make env - name: Make the build - run: make docker-save + run: | + make docker-gui-debug + make docker-save - name: Upload the build uses: actions/upload-artifact@v4 with: - name: docker_server(release) - path: build/docker/bombsquad_server_docker.tar + 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: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 050ce036..356a19f6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -208,7 +208,7 @@ jobs: allowUpdates: true artifacts: windows_x86_server_debug.tar - release_docker_image: + release_docker_gui_image: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -219,12 +219,38 @@ jobs: - name: Setup project environment run: make env - 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 uses: ncipollo/release-action@v1 with: 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: runs-on: ubuntu-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 779ee850..88c3c78c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 until Ctrl-D was pressed in the calling terminal. - V2 accounts have been around for a while now, so the old V1 device login diff --git a/Makefile b/Makefile index cfe969d9..79fba828 100644 --- a/Makefile +++ b/Makefile @@ -1183,23 +1183,35 @@ clion-staging: assets-cmake resources meta # # ################################################################################ -# Build the docker image named bombsquad_server -docker-build: assets-cmake - $(PCOMMAND) build_docker +# Build the docker image +docker-gui-release: assets-cmake + $(PCOMMAND) build_docker_gui_release -# Run the bombsquad_server image -docker-run: - docker run -it bombsquad_server +# Build the docker image +docker-gui-debug: assets-cmake + $(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 -docker-save: docker-build +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 diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index 957ad891..f6d54d7c 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -1,21 +1,24 @@ # 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 +ARG headless_build ARG cmake_build_type ENV LANG en_US.utf8 ENV LANGUAGE=en_US 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,25 +27,31 @@ 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 +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 @@ -53,33 +62,36 @@ ENV LANGUAGE=en_US ENV DEBIAN_FRONTEND=noninteractive # Renew the arg +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 + 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/* && \ + dbus-uuidgen > /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 WORKDIR /home/ubuntu/ballistica +RUN ln -s ballisticakit* run + # Expose the necessary port -EXPOSE 43210/udp +EXPOSE 43210/udp # Set the default command to run the application -CMD [ "./ballisticakit_server" ] \ No newline at end of file +CMD [ "./run" ] \ No newline at end of file diff --git a/config/requirements.txt b/config/requirements.txt index 4988589f..f0c0d8b6 100644 --- a/config/requirements.txt +++ b/config/requirements.txt @@ -6,16 +6,16 @@ mypy==1.10.0 pbxproj==4.1.0 pdoc==14.5.0 pur==7.3.1 -pylint==3.2.1 +pylint==3.2.2 pylsp-mypy==0.6.8 -pytest==8.2.0 +pytest==8.2.1 python-daemon==3.0.1 python-lsp-black==2.0.0 python-lsp-server==1.11.0 -requests==2.31.0 +requests==2.32.3 Sphinx==7.3.7 tomlkit==0.12.5 types-certifi==2021.10.8.3 types-filelock==3.2.7 -types-requests==2.31.0.20240406 -typing_extensions==4.11.0 +types-requests==2.32.0.20240523 +typing_extensions==4.12.0 diff --git a/src/assets/.asset_manifest_public.json b/src/assets/.asset_manifest_public.json index 38cfd626..e7346f00 100644 --- a/src/assets/.asset_manifest_public.json +++ b/src/assets/.asset_manifest_public.json @@ -116,6 +116,10 @@ "ba_data/python/bacommon/net.py", "ba_data/python/bacommon/servermanager.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/baplus/__init__.py", "ba_data/python/baplus/__pycache__/__init__.cpython-312.opt-1.pyc", diff --git a/src/assets/Makefile b/src/assets/Makefile index f7da779c..88ae95d2 100644 --- a/src/assets/Makefile +++ b/src/assets/Makefile @@ -733,6 +733,8 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \ $(BUILD_DIR)/ba_data/python/bacommon/net.py \ $(BUILD_DIR)/ba_data/python/bacommon/servermanager.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/call.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__/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/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__/call.cpython-312.opt-1.pyc \ $(BUILD_DIR)/ba_data/python/efro/__pycache__/cloudshell.cpython-312.opt-1.pyc \ diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index 9acc46e5..0958e534 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -52,7 +52,7 @@ if TYPE_CHECKING: # Build number and version of the ballistica binary we expect to be # using. -TARGET_BALLISTICA_BUILD = 21880 +TARGET_BALLISTICA_BUILD = 21884 TARGET_BALLISTICA_VERSION = '1.7.35' diff --git a/src/ballistica/base/platform/base_platform.cc b/src/ballistica/base/platform/base_platform.cc index d07e2ab0..4fb91846 100644 --- a/src/ballistica/base/platform/base_platform.cc +++ b/src/ballistica/base/platform/base_platform.cc @@ -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 12 + auto rand_uuid_component{"WI5XDVM7QQBD4G6O0GS2DW6IPJ4VQT9X"}; inputs.emplace_back(rand_uuid_component); auto gil{Python::ScopedInterpreterLock()}; diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 75acd734..395a3093 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -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 = 21880; +const int kEngineBuildNumber = 21884; const char* kEngineVersion = "1.7.35"; const int kEngineApiVersion = 8; diff --git a/tools/bacommon/workspace/__init__.py b/tools/bacommon/workspace/__init__.py new file mode 100644 index 00000000..c17a0f04 --- /dev/null +++ b/tools/bacommon/workspace/__init__.py @@ -0,0 +1,3 @@ +# Released under the MIT License. See LICENSE for details. +# +"""Workspace functionality.""" diff --git a/tools/bacommon/workspace/assetsv1.py b/tools/bacommon/workspace/assetsv1.py new file mode 100644 index 00000000..1bc68c0a --- /dev/null +++ b/tools/bacommon/workspace/assetsv1.py @@ -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')] diff --git a/tools/batools/build.py b/tools/batools/build.py index 940d8d19..bb0bf65c 100644 --- a/tools/batools/build.py +++ b/tools/batools/build.py @@ -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, - ) diff --git a/tools/batools/docker.py b/tools/batools/docker.py new file mode 100644 index 00000000..68d6c5d6 --- /dev/null +++ b/tools/batools/docker.py @@ -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) diff --git a/tools/batools/pcommandmain.py b/tools/batools/pcommandmain.py index 581af8d8..d50fa1f1 100644 --- a/tools/batools/pcommandmain.py +++ b/tools/batools/pcommandmain.py @@ -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, diff --git a/tools/batools/pcommands.py b/tools/batools/pcommands.py index d5a08277..f8f85203 100644 --- a/tools/batools/pcommands.py +++ b/tools/batools/pcommands.py @@ -9,6 +9,7 @@ import sys from efrotools import pcommand +# pylint: disable=too-many-lines def prune_includes() -> None: """Check for unnecessary includes in C++ files. @@ -667,11 +668,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: diff --git a/tools/efro/dataclassio/_api.py b/tools/efro/dataclassio/_api.py index ae0554e3..7475cbab 100644 --- a/tools/efro/dataclassio/_api.py +++ b/tools/efro/dataclassio/_api.py @@ -44,6 +44,7 @@ def dataclass_to_dict( obj: Any, codec: Codec = Codec.JSON, coerce_to_float: bool = True, + discard_extra_attrs: bool = False, ) -> dict: """Given a dataclass object, return a json-friendly dict. @@ -62,7 +63,11 @@ def dataclass_to_dict( """ 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() assert isinstance(out, dict) return out @@ -157,14 +162,21 @@ def dataclass_from_json( 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: """Ensure that values in a dataclass instance are the correct types.""" # Simply run an output pass but tell it not to generate data; # only run validation. _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() diff --git a/tools/efro/dataclassio/_base.py b/tools/efro/dataclassio/_base.py index 3c38975d..246b04e7 100644 --- a/tools/efro/dataclassio/_base.py +++ b/tools/efro/dataclassio/_base.py @@ -61,6 +61,29 @@ class IOExtendedData: 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) diff --git a/tools/efro/dataclassio/_inputter.py b/tools/efro/dataclassio/_inputter.py index 41588e98..e913816f 100644 --- a/tools/efro/dataclassio/_inputter.py +++ b/tools/efro/dataclassio/_inputter.py @@ -236,6 +236,28 @@ class _Inputter: sets should be passed as lists, enums should be passed as their 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-statements # pylint: disable=too-many-branches @@ -377,6 +399,7 @@ class _Inputter: create=False, codec=self._codec, coerce_to_float=self._coerce_to_float, + discard_extra_attrs=False, ) self._soft_default_validator.soft_default_check( value=value, anntype=anntype, fieldpath=fieldpath diff --git a/tools/efro/dataclassio/_outputter.py b/tools/efro/dataclassio/_outputter.py index 56417ddc..d9f9acec 100644 --- a/tools/efro/dataclassio/_outputter.py +++ b/tools/efro/dataclassio/_outputter.py @@ -38,12 +38,18 @@ class _Outputter: """Validates or exports data contained in a dataclass instance.""" 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: self._obj = obj self._create = create self._codec = codec self._coerce_to_float = coerce_to_float + self._discard_extra_attrs = discard_extra_attrs def run(self) -> Any: """Do the thing.""" @@ -133,17 +139,18 @@ class _Outputter: out[storagename] = outvalue # If there's extra-attrs stored on us, check/include them. - extra_attrs = getattr(obj, EXTRA_ATTRS_ATTR, None) - if isinstance(extra_attrs, dict): - if not _is_valid_for_codec(extra_attrs, self._codec): - raise TypeError( - f'Extra attrs on \'{fieldpath}\' contains data type(s)' - f' not supported by \'{self._codec.value}\' codec:' - f' {extra_attrs}.' - ) - if self._create: - assert out is not None - out.update(extra_attrs) + if not self._discard_extra_attrs: + extra_attrs = getattr(obj, EXTRA_ATTRS_ATTR, None) + if isinstance(extra_attrs, dict): + if not _is_valid_for_codec(extra_attrs, self._codec): + raise TypeError( + f'Extra attrs on \'{fieldpath}\' contains data type(s)' + f' not supported by \'{self._codec.value}\' codec:' + f' {extra_attrs}.' + ) + if self._create: + assert out is not None + out.update(extra_attrs) # If this obj inherits from multi-type, store its type id. if isinstance(obj, IOMultiType): diff --git a/tools/efrotools/efrocache.py b/tools/efrotools/efrocache.py index c25cbf04..6f92b731 100644 --- a/tools/efrotools/efrocache.py +++ b/tools/efrotools/efrocache.py @@ -28,8 +28,6 @@ from efro.dataclassio import ( ) from efro.terminal import Clr -from efrotools.util import is_wsl_windows_build_path - if TYPE_CHECKING: 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: # pylint: disable=global-statement + from efrotools.util import is_wsl_windows_build_path + global g_cache_prefix_exec global g_cache_prefix_noexec From fe2b40054f11aea481273811ab81179b3e3fdcc4 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Thu, 13 Jun 2024 18:19:35 +0530 Subject: [PATCH 02/10] finishing touches --- CHANGELOG.md | 2 +- CONTRIBUTORS.md | 3 ++- Makefile | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88c3c78c..2a0337b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,7 +60,7 @@ 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 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 30865a77..2aaa069b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -64,4 +64,5 @@ ### Loup Garou - Added sphinx documentation generation -- Added docker build \ No newline at end of file +- Added docker build system +- Various CI/CD improvements \ No newline at end of file diff --git a/Makefile b/Makefile index 79fba828..9cbdb0f9 100644 --- a/Makefile +++ b/Makefile @@ -1193,7 +1193,7 @@ docker-gui-debug: assets-cmake # Build the docker image docker-server-release: assets-cmake - $(PCOMMAND) build_docker_server_release, + $(PCOMMAND) build_docker_server_release # Build the docker image docker-server-debug: assets-cmake From f1e766d86a9f38b674162d1815c8c9615ae53f01 Mon Sep 17 00:00:00 2001 From: Loup <90267658+Loup-Garou911XD@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:32:42 +0530 Subject: [PATCH 03/10] Update Dockerfile --- config/docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index f6d54d7c..70baa30d 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -80,7 +80,7 @@ RUN apt-get update -y && \ libopenal-dev; \ fi && \ rm -rf /var/lib/apt/lists/* && \ - dbus-uuidgen > /etc/machine-id + python3 -c 'import uuid; print(uuid.uuid4()) > /etc/machine-id' # Copy the compiled application from the builder stage COPY --from=builder /ballistica_cmake \ @@ -94,4 +94,4 @@ RUN ln -s ballisticakit* run EXPOSE 43210/udp # Set the default command to run the application -CMD [ "./run" ] \ No newline at end of file +CMD [ "./run" ] From 89f0d1b55be117cf59195b47775168e4b23b1550 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Thu, 13 Jun 2024 18:46:55 +0530 Subject: [PATCH 04/10] oopsies --- config/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index 70baa30d..29b8aa9c 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -80,7 +80,7 @@ RUN apt-get update -y && \ libopenal-dev; \ fi && \ rm -rf /var/lib/apt/lists/* && \ - python3 -c 'import uuid; print(uuid.uuid4()) > /etc/machine-id' + python3 -c 'import uuid; print(uuid.uuid4())' > /etc/machine-id # Copy the compiled application from the builder stage COPY --from=builder /ballistica_cmake \ From 56341a0255bd7090cb8bf74a7eb059b987c9a951 Mon Sep 17 00:00:00 2001 From: Loup <90267658+Loup-Garou911XD@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:52:07 +0530 Subject: [PATCH 05/10] Update Dockerfile --- config/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index 29b8aa9c..32c64b1f 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -80,7 +80,7 @@ RUN apt-get update -y && \ libopenal-dev; \ fi && \ rm -rf /var/lib/apt/lists/* && \ - python3 -c 'import uuid; print(uuid.uuid4())' > /etc/machine-id + python3.12 -c 'import uuid; print(uuid.uuid4())' > /etc/machine-id # Copy the compiled application from the builder stage COPY --from=builder /ballistica_cmake \ From 1762cc9050cf57bb25148ad937c6b32c50283fc6 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Sat, 15 Jun 2024 22:37:46 +0530 Subject: [PATCH 06/10] Added a env variable for fixing warning in build --- config/docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index 32c64b1f..09b6eba3 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -14,8 +14,9 @@ FROM ${base_image} AS builder ARG headless_build ARG cmake_build_type -ENV LANG en_US.utf8 +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} From f79b9dee26627ffbaf39b118487e262dea0c357d Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Sat, 15 Jun 2024 22:41:53 +0530 Subject: [PATCH 07/10] missed a bit --- config/docker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index 09b6eba3..dd378535 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -60,6 +60,7 @@ FROM ${base_image} ENV LANG en_US.utf8 ENV LANGUAGE=en_US +ENV LC_ALL=en_US.utf8 ENV DEBIAN_FRONTEND=noninteractive # Renew the arg From 28d4bfc8f93646bf086df2faf0348b68b77c6453 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Mon, 17 Jun 2024 02:38:38 +0530 Subject: [PATCH 08/10] added arm64 dockerfile --- config/docker/Dockerfile_arm64 | 123 +++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 config/docker/Dockerfile_arm64 diff --git a/config/docker/Dockerfile_arm64 b/config/docker/Dockerfile_arm64 new file mode 100644 index 00000000..d2457192 --- /dev/null +++ b/config/docker/Dockerfile_arm64 @@ -0,0 +1,123 @@ +# 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 DEBIAN_FRONTEND=noninteractive +ENV CMAKE_BUILD_TYPE=${cmake_build_type} +ENV HEADLESS_BUILD=${headless_build} + +# Enable ARM64 architecture and update package lists +RUN dpkg --add-architecture arm64 && apt-get update -y + +# Install necessary tools to create users and groups +RUN apt-get install -y adduser \ + && apt-cache search clang-tools + +# Configure dpkg to skip systemd post-installation scripts +RUN mkdir -p /etc/systemd/system && \ + echo "exit 0" > /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d && \ + apt-get install -y --no-install-recommends \ +# testing + clang + +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 \ + cmake \ + libvorbis-dev \ + build-essential \ + && rm /usr/sbin/policy-rc.d + +# Copy source code +COPY ./ /home/ubuntu/ballistica + +# Set the working directory +WORKDIR /home/ubuntu/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 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 necessary tools to create users and groups +RUN apt-get update -y && apt-get install -y adduser + +# Pre-create necessary users and groups to avoid systemd configuration errors +RUN addgroup --system systemd-journal && \ + adduser --system --no-create-home --ingroup systemd-journal systemd-network + +# Configure dpkg to skip systemd post-installation scripts +RUN mkdir -p /etc/systemd/system && \ + echo "exit 0" > /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d && \ + 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 && \ + rm /usr/sbin/policy-rc.d + +# 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" ] \ No newline at end of file From a526c0a0fc93957318b0485414091ec5444f8d27 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Mon, 17 Jun 2024 02:45:23 +0530 Subject: [PATCH 09/10] fixed makefile target --- Makefile | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 9cbdb0f9..e93a30f3 100644 --- a/Makefile +++ b/Makefile @@ -1183,25 +1183,29 @@ clion-staging: assets-cmake resources meta # # ################################################################################ -# Build the docker image +# Build the gui release docker image docker-gui-release: assets-cmake $(PCOMMAND) build_docker_gui_release -# Build the docker image +# Build the gui debug docker image docker-gui-debug: assets-cmake $(PCOMMAND) build_docker_gui_debug -# Build the docker image +# Build the server release docker image docker-server-release: assets-cmake $(PCOMMAND) build_docker_server_release -# Build the docker image +# Build the server debug docker image docker-server-debug: assets-cmake $(PCOMMAND) build_docker_server_debug -# Build the docker image for arm64 +# Build the gui release docker image for arm64 docker-arm64-gui-release: assets-cmake - $(PCOMMAND) build_docker_arm64 + $(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: From 6be9e270da3e3ba22f19f9780a48440571a23f78 Mon Sep 17 00:00:00 2001 From: Loup-Garou911XD Date: Mon, 17 Jun 2024 07:25:12 +0530 Subject: [PATCH 10/10] Cleanup on arm64 dockerfile --- config/docker/Dockerfile | 16 +++++++---- config/docker/Dockerfile_arm64 | 51 ++++++++++------------------------ 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index dd378535..c5c66559 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -10,10 +10,11 @@ ARG base_image=ubuntu:latest # Start with the base image FROM ${base_image} AS builder -# Renew the arg +# 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 @@ -40,6 +41,7 @@ RUN apt-get update -y && \ # Copy source code COPY ./ /ballistica +# Set the working directory WORKDIR /ballistica # Compile the application @@ -58,12 +60,13 @@ RUN mkdir /ballistica_cmake && \ # 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 @@ -72,7 +75,7 @@ LABEL BOMBSQUAD_BUILD_TYPE=${cmake_build_type} # Install runtime dependencies RUN apt-get update -y && \ - apt-get install -y \ + apt-get install -y \ python3.12-dev && \ if [ "$HEADLESS_BUILD" = "0" ]; then \ apt-get install -y \ @@ -82,18 +85,19 @@ RUN apt-get update -y && \ libopenal-dev; \ fi && \ rm -rf /var/lib/apt/lists/* && \ - python3.12 -c 'import uuid; print(uuid.uuid4())' > /etc/machine-id + 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 +EXPOSE 43210/udp # Set the default command to run the application -CMD [ "./run" ] +CMD [ "./run" ] \ No newline at end of file diff --git a/config/docker/Dockerfile_arm64 b/config/docker/Dockerfile_arm64 index d2457192..e592ed98 100644 --- a/config/docker/Dockerfile_arm64 +++ b/config/docker/Dockerfile_arm64 @@ -10,31 +10,19 @@ ARG base_image=ubuntu:latest # Start with the base image FROM --platform=linux/arm64 ${base_image} AS builder -# Renew the ARGs +# Renew the args ARG headless_build ARG cmake_build_type # Environment settings -ENV LANG en_US.utf8 +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} -# Enable ARM64 architecture and update package lists -RUN dpkg --add-architecture arm64 && apt-get update -y - -# Install necessary tools to create users and groups -RUN apt-get install -y adduser \ - && apt-cache search clang-tools - -# Configure dpkg to skip systemd post-installation scripts -RUN mkdir -p /etc/systemd/system && \ - echo "exit 0" > /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d && \ - apt-get install -y --no-install-recommends \ -# testing - clang - +# Install build dependencies RUN apt-get install -y --no-install-recommends \ python3.12-dev \ python3.12-venv \ @@ -46,16 +34,16 @@ RUN apt-get install -y --no-install-recommends \ curl \ rsync \ clang-format \ + clang \ cmake \ libvorbis-dev \ - build-essential \ - && rm /usr/sbin/policy-rc.d + build-essential # Copy source code -COPY ./ /home/ubuntu/ballistica +COPY ./ /ballistica # Set the working directory -WORKDIR /home/ubuntu/ballistica +WORKDIR /ballistica # Compile the application RUN mkdir /ballistica_cmake && \ @@ -75,25 +63,17 @@ 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 +# Renew the args ARG headless_build ENV HEADLESS_BUILD=${headless_build} ARG cmake_build_type LABEL BOMBSQUAD_BUILD_TYPE=${cmake_build_type} -# Install necessary tools to create users and groups -RUN apt-get update -y && apt-get install -y adduser - -# Pre-create necessary users and groups to avoid systemd configuration errors -RUN addgroup --system systemd-journal && \ - adduser --system --no-create-home --ingroup systemd-journal systemd-network - -# Configure dpkg to skip systemd post-installation scripts -RUN mkdir -p /etc/systemd/system && \ - echo "exit 0" > /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d && \ - apt-get update -y && \ +# Install runtime dependencies +RUN apt-get update -y && \ apt-get install -y \ python3.12-dev && \ if [ "$HEADLESS_BUILD" = "0" ]; then \ @@ -104,14 +84,13 @@ RUN mkdir -p /etc/systemd/system && \ libopenal-dev; \ fi && \ rm -rf /var/lib/apt/lists/* && \ - python3.12 -c "import uuid;print(uuid.uuid4())" > /etc/machine-id && \ - rm /usr/sbin/policy-rc.d + 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 + /home/ubuntu/ballistica - # Set the working directory +# Set the working directory WORKDIR /home/ubuntu/ballistica RUN ln -s ballisticakit* run