aegis-game 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aegis_game-2.0.0/.github/pull_request_template.md +20 -0
- aegis_game-2.0.0/.github/workflows/old-release.yml +156 -0
- aegis_game-2.0.0/.github/workflows/python-ci.yml +52 -0
- aegis_game-2.0.0/.github/workflows/release-aegis.yml +96 -0
- aegis_game-2.0.0/.github/workflows/release-client.yml +135 -0
- aegis_game-2.0.0/.github/workflows/typescript-ci.yml +57 -0
- aegis_game-2.0.0/.gitignore +41 -0
- aegis_game-2.0.0/.python-version +1 -0
- aegis_game-2.0.0/PKG-INFO +192 -0
- aegis_game-2.0.0/README.md +180 -0
- aegis_game-2.0.0/agents/agent_mas/main.py +33 -0
- aegis_game-2.0.0/agents/agent_path/main.py +27 -0
- aegis_game-2.0.0/agents/agent_prediction/main.py +71 -0
- aegis_game-2.0.0/agents/agent_prediction/train_model.py +68 -0
- aegis_game-2.0.0/agents/agent_prediction/trained_net.keras +0 -0
- aegis_game-2.0.0/client/.eslintrc.cjs +20 -0
- aegis_game-2.0.0/client/.prettierignore +7 -0
- aegis_game-2.0.0/client/.prettierrc.yaml +8 -0
- aegis_game-2.0.0/client/README.md +27 -0
- aegis_game-2.0.0/client/components.json +21 -0
- aegis_game-2.0.0/client/electron.vite.config.ts +66 -0
- aegis_game-2.0.0/client/index.html +16 -0
- aegis_game-2.0.0/client/package-lock.json +11959 -0
- aegis_game-2.0.0/client/package.json +140 -0
- aegis_game-2.0.0/client/postcss.config.js +6 -0
- aegis_game-2.0.0/client/src/App.tsx +17 -0
- aegis_game-2.0.0/client/src/assets/drone-scan-eye.png +0 -0
- aegis_game-2.0.0/client/src/assets/goob-team-a.png +0 -0
- aegis_game-2.0.0/client/src/assets/goob-team-b.png +0 -0
- aegis_game-2.0.0/client/src/assets/goob.png +0 -0
- aegis_game-2.0.0/client/src/assets/move-cost-tiles.png +0 -0
- aegis_game-2.0.0/client/src/assets/rubble.png +0 -0
- aegis_game-2.0.0/client/src/assets/survivor-dark.png +0 -0
- aegis_game-2.0.0/client/src/assets/survivor-light.png +0 -0
- aegis_game-2.0.0/client/src/assets/survivor.png +0 -0
- aegis_game-2.0.0/client/src/components/ConfirmClearDialog.tsx +58 -0
- aegis_game-2.0.0/client/src/components/Console.tsx +122 -0
- aegis_game-2.0.0/client/src/components/ExportDialog.tsx +85 -0
- aegis_game-2.0.0/client/src/components/Game-area.tsx +33 -0
- aegis_game-2.0.0/client/src/components/GameCycler.tsx +46 -0
- aegis_game-2.0.0/client/src/components/NumberInput.tsx +58 -0
- aegis_game-2.0.0/client/src/components/controls-bar/Controls-bar.tsx +150 -0
- aegis_game-2.0.0/client/src/components/controls-bar/Timeline.tsx +66 -0
- aegis_game-2.0.0/client/src/components/dnd/Layer.tsx +160 -0
- aegis_game-2.0.0/client/src/components/dnd/LayerEditor.tsx +133 -0
- aegis_game-2.0.0/client/src/components/dnd/LayerItem.tsx +184 -0
- aegis_game-2.0.0/client/src/components/dnd/LayerList.tsx +113 -0
- aegis_game-2.0.0/client/src/components/dnd/dnd-utils.tsx +33 -0
- aegis_game-2.0.0/client/src/components/editor/Brush.tsx +52 -0
- aegis_game-2.0.0/client/src/components/editor/Editor.tsx +342 -0
- aegis_game-2.0.0/client/src/components/editor/Field.tsx +65 -0
- aegis_game-2.0.0/client/src/components/editor/MapGenerator.ts +94 -0
- aegis_game-2.0.0/client/src/components/info-panel/Info-panel.tsx +115 -0
- aegis_game-2.0.0/client/src/components/sidebar/Aegis.tsx +205 -0
- aegis_game-2.0.0/client/src/components/sidebar/Game.tsx +83 -0
- aegis_game-2.0.0/client/src/components/sidebar/Settings.tsx +152 -0
- aegis_game-2.0.0/client/src/components/sidebar/Sidebar.tsx +127 -0
- aegis_game-2.0.0/client/src/components/ui/alert.tsx +59 -0
- aegis_game-2.0.0/client/src/components/ui/badge.tsx +34 -0
- aegis_game-2.0.0/client/src/components/ui/button.tsx +56 -0
- aegis_game-2.0.0/client/src/components/ui/card.tsx +68 -0
- aegis_game-2.0.0/client/src/components/ui/command.tsx +144 -0
- aegis_game-2.0.0/client/src/components/ui/dialog.tsx +114 -0
- aegis_game-2.0.0/client/src/components/ui/input.tsx +22 -0
- aegis_game-2.0.0/client/src/components/ui/label.tsx +24 -0
- aegis_game-2.0.0/client/src/components/ui/multiselect.tsx +141 -0
- aegis_game-2.0.0/client/src/components/ui/popover.tsx +31 -0
- aegis_game-2.0.0/client/src/components/ui/progress.tsx +26 -0
- aegis_game-2.0.0/client/src/components/ui/select.tsx +150 -0
- aegis_game-2.0.0/client/src/components/ui/separator.tsx +24 -0
- aegis_game-2.0.0/client/src/components/ui/stepper.tsx +279 -0
- aegis_game-2.0.0/client/src/components/ui/switch.tsx +27 -0
- aegis_game-2.0.0/client/src/components/ui/tabs.tsx +53 -0
- aegis_game-2.0.0/client/src/components/ui/tooltip.tsx +30 -0
- aegis_game-2.0.0/client/src/core/Agents.ts +153 -0
- aegis_game-2.0.0/client/src/core/Brushes.ts +247 -0
- aegis_game-2.0.0/client/src/core/Game.ts +119 -0
- aegis_game-2.0.0/client/src/core/Games.ts +48 -0
- aegis_game-2.0.0/client/src/core/Listeners.ts +34 -0
- aegis_game-2.0.0/client/src/core/Renderer.ts +211 -0
- aegis_game-2.0.0/client/src/core/Round.ts +96 -0
- aegis_game-2.0.0/client/src/core/Runner.ts +125 -0
- aegis_game-2.0.0/client/src/core/Stats.ts +64 -0
- aegis_game-2.0.0/client/src/core/World.ts +372 -0
- aegis_game-2.0.0/client/src/hooks/useCanvas.ts +28 -0
- aegis_game-2.0.0/client/src/hooks/useControl.ts +17 -0
- aegis_game-2.0.0/client/src/hooks/useGame.ts +20 -0
- aegis_game-2.0.0/client/src/hooks/useGames.ts +15 -0
- aegis_game-2.0.0/client/src/hooks/useHover.ts +18 -0
- aegis_game-2.0.0/client/src/hooks/useLocalStorage.tsx +25 -0
- aegis_game-2.0.0/client/src/hooks/useRound.ts +21 -0
- aegis_game-2.0.0/client/src/index.css +79 -0
- aegis_game-2.0.0/client/src/lib/utils.ts +6 -0
- aegis_game-2.0.0/client/src/main.tsx +10 -0
- aegis_game-2.0.0/client/src/services/aegis-api.ts +34 -0
- aegis_game-2.0.0/client/src/services/config.ts +52 -0
- aegis_game-2.0.0/client/src/services/index.ts +4 -0
- aegis_game-2.0.0/client/src/services/scaffold.ts +280 -0
- aegis_game-2.0.0/client/src/services/websocket.ts +80 -0
- aegis_game-2.0.0/client/src/store/useAppStore.ts +24 -0
- aegis_game-2.0.0/client/src/types/core.types.ts +42 -0
- aegis_game-2.0.0/client/src/types/extra.types.ts +65 -0
- aegis_game-2.0.0/client/src/types/index.ts +3 -0
- aegis_game-2.0.0/client/src/types/map-editor.types.ts +8 -0
- aegis_game-2.0.0/client/src/utils/constants.ts +6 -0
- aegis_game-2.0.0/client/src/utils/ringBuffer.ts +80 -0
- aegis_game-2.0.0/client/src/utils/util.ts +65 -0
- aegis_game-2.0.0/client/src/vite-env.d.ts +1 -0
- aegis_game-2.0.0/client/src-electron/main.ts +292 -0
- aegis_game-2.0.0/client/src-electron/preload.ts +58 -0
- aegis_game-2.0.0/client/tailwind.config.js +52 -0
- aegis_game-2.0.0/client/tsconfig.json +17 -0
- aegis_game-2.0.0/config/config.yaml +20 -0
- aegis_game-2.0.0/config/presets/README.md +30 -0
- aegis_game-2.0.0/config/presets/competition-single.yaml +16 -0
- aegis_game-2.0.0/config/presets/competiton-versus.yaml +16 -0
- aegis_game-2.0.0/config/presets/multi-agent-assignment.yaml +16 -0
- aegis_game-2.0.0/config/presets/pathfinding-assignment.yaml +16 -0
- aegis_game-2.0.0/docs/.eslintrc.json +3 -0
- aegis_game-2.0.0/docs/.gitignore +28 -0
- aegis_game-2.0.0/docs/README.md +48 -0
- aegis_game-2.0.0/docs/app/(home)/errors/[...slug]/page.tsx +59 -0
- aegis_game-2.0.0/docs/app/(home)/errors/page.tsx +38 -0
- aegis_game-2.0.0/docs/app/(home)/guides/[slug]/page.tsx +59 -0
- aegis_game-2.0.0/docs/app/(home)/guides/page.tsx +24 -0
- aegis_game-2.0.0/docs/app/(home)/layout.tsx +7 -0
- aegis_game-2.0.0/docs/app/(home)/page.tsx +19 -0
- aegis_game-2.0.0/docs/app/api/search/route.ts +6 -0
- aegis_game-2.0.0/docs/app/docs/[[...slug]]/page.tsx +52 -0
- aegis_game-2.0.0/docs/app/docs/layout.tsx +12 -0
- aegis_game-2.0.0/docs/app/favicon.ico +0 -0
- aegis_game-2.0.0/docs/app/global.css +3 -0
- aegis_game-2.0.0/docs/app/layout.config.tsx +42 -0
- aegis_game-2.0.0/docs/app/layout.tsx +24 -0
- aegis_game-2.0.0/docs/app/provider.tsx +16 -0
- aegis_game-2.0.0/docs/components/search.tsx +51 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_agent_id.mdx +22 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_cell_at.mdx +35 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_charging_cells.mdx +32 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_energy_level.mdx +25 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_location.mdx +24 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_round_number.mdx +24 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/get_survs.mdx +31 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/log.mdx +29 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/on_map.mdx +33 -0
- aegis_game-2.0.0/docs/content/docs/api/agent/send.mdx +30 -0
- aegis_game-2.0.0/docs/content/docs/api/agent_commands/dig.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/agent_commands/move.mdx +24 -0
- aegis_game-2.0.0/docs/content/docs/api/agent_commands/observe.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/agent_commands/recharge.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/agent_commands/save.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/agent_commands/send_message.mdx +31 -0
- aegis_game-2.0.0/docs/content/docs/api/common/agentid.mdx +26 -0
- aegis_game-2.0.0/docs/content/docs/api/common/direction/get_opposite.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/common/direction/index.mdx +47 -0
- aegis_game-2.0.0/docs/content/docs/api/common/direction/rotate_left.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/common/direction/rotate_right.mdx +23 -0
- aegis_game-2.0.0/docs/content/docs/api/common/location/add.mdx +24 -0
- aegis_game-2.0.0/docs/content/docs/api/common/location/direction_to.mdx +25 -0
- aegis_game-2.0.0/docs/content/docs/api/common/location/distance_to.mdx +29 -0
- aegis_game-2.0.0/docs/content/docs/api/common/location/index.mdx +63 -0
- aegis_game-2.0.0/docs/content/docs/api/index.mdx +4 -0
- aegis_game-2.0.0/docs/content/docs/api/meta.json +18 -0
- aegis_game-2.0.0/docs/content/docs/api/world/cell/get_top_layer.mdx +29 -0
- aegis_game-2.0.0/docs/content/docs/api/world/cell/index.mdx +13 -0
- aegis_game-2.0.0/docs/content/docs/api/world/cell/is_charging_cell.mdx +27 -0
- aegis_game-2.0.0/docs/content/docs/api/world/cell/is_killer_cell.mdx +27 -0
- aegis_game-2.0.0/docs/content/docs/api/world/cell/is_normal_cell.mdx +27 -0
- aegis_game-2.0.0/docs/content/docs/api/world_objects/rubble.mdx +17 -0
- aegis_game-2.0.0/docs/content/docs/api/world_objects/survivor.mdx +10 -0
- aegis_game-2.0.0/docs/content/docs/getting-started/(getting-started)/installation.mdx +75 -0
- aegis_game-2.0.0/docs/content/docs/getting-started/(getting-started)/running.mdx +155 -0
- aegis_game-2.0.0/docs/content/docs/getting-started/aegis/file-structure.mdx +4 -0
- aegis_game-2.0.0/docs/content/docs/getting-started/aegis/lore.mdx +50 -0
- aegis_game-2.0.0/docs/content/docs/getting-started/meta.json +12 -0
- aegis_game-2.0.0/docs/content/docs/index.mdx +6 -0
- aegis_game-2.0.0/docs/content/docs/meta.json +3 -0
- aegis_game-2.0.0/docs/content/errors/general/override.mdx +5 -0
- aegis_game-2.0.0/docs/content/errors/mac/security.mdx +5 -0
- aegis_game-2.0.0/docs/content/errors/windows/scripts.mdx +5 -0
- aegis_game-2.0.0/docs/content/guides/git.mdx +7 -0
- aegis_game-2.0.0/docs/content/guides/python.mdx +6 -0
- aegis_game-2.0.0/docs/lib/source.ts +24 -0
- aegis_game-2.0.0/docs/mdx-components.tsx +16 -0
- aegis_game-2.0.0/docs/next.config.mjs +17 -0
- aegis_game-2.0.0/docs/package-lock.json +10437 -0
- aegis_game-2.0.0/docs/package.json +38 -0
- aegis_game-2.0.0/docs/postcss.config.mjs +5 -0
- aegis_game-2.0.0/docs/public/mac_error.png +0 -0
- aegis_game-2.0.0/docs/source.config.ts +44 -0
- aegis_game-2.0.0/docs/tsconfig.json +30 -0
- aegis_game-2.0.0/prediction_data/README.md +32 -0
- aegis_game-2.0.0/prediction_data/testing/x_test_symbols.npy +0 -0
- aegis_game-2.0.0/prediction_data/testing/y_test_symbols.npy +0 -0
- aegis_game-2.0.0/prediction_data/training/x_train_symbols.npy +0 -0
- aegis_game-2.0.0/prediction_data/training/y_train_symbols.npy +0 -0
- aegis_game-2.0.0/pyproject.toml +60 -0
- aegis_game-2.0.0/schema/README.md +27 -0
- aegis_game-2.0.0/schema/package-lock.json +709 -0
- aegis_game-2.0.0/schema/package.json +28 -0
- aegis_game-2.0.0/schema/protos/cell.proto +21 -0
- aegis_game-2.0.0/schema/protos/event.proto +16 -0
- aegis_game-2.0.0/schema/protos/game.proto +43 -0
- aegis_game-2.0.0/schema/protos/location.proto +8 -0
- aegis_game-2.0.0/schema/protos/spawn.proto +12 -0
- aegis_game-2.0.0/schema/protos/team.proto +21 -0
- aegis_game-2.0.0/schema/protos/turn.proto +15 -0
- aegis_game-2.0.0/schema/protos/world.proto +14 -0
- aegis_game-2.0.0/schema/protos/world_object.proto +27 -0
- aegis_game-2.0.0/schema/python/cell_pb2.py +40 -0
- aegis_game-2.0.0/schema/python/cell_pb2.pyi +34 -0
- aegis_game-2.0.0/schema/python/event_pb2.py +37 -0
- aegis_game-2.0.0/schema/python/event_pb2.pyi +22 -0
- aegis_game-2.0.0/schema/python/game_pb2.py +53 -0
- aegis_game-2.0.0/schema/python/game_pb2.pyi +65 -0
- aegis_game-2.0.0/schema/python/location_pb2.py +36 -0
- aegis_game-2.0.0/schema/python/location_pb2.pyi +13 -0
- aegis_game-2.0.0/schema/python/spawn_pb2.py +38 -0
- aegis_game-2.0.0/schema/python/spawn_pb2.pyi +17 -0
- aegis_game-2.0.0/schema/python/team_pb2.py +38 -0
- aegis_game-2.0.0/schema/python/team_pb2.pyi +35 -0
- aegis_game-2.0.0/schema/python/turn_pb2.py +38 -0
- aegis_game-2.0.0/schema/python/turn_pb2.pyi +24 -0
- aegis_game-2.0.0/schema/python/world_object_pb2.py +42 -0
- aegis_game-2.0.0/schema/python/world_object_pb2.pyi +41 -0
- aegis_game-2.0.0/schema/python/world_pb2.py +37 -0
- aegis_game-2.0.0/schema/python/world_pb2.pyi +23 -0
- aegis_game-2.0.0/schema/scripts/fix_imports.py +34 -0
- aegis_game-2.0.0/schema/scripts/make_index.py +37 -0
- aegis_game-2.0.0/schema/ts/cell.ts +146 -0
- aegis_game-2.0.0/schema/ts/event.ts +165 -0
- aegis_game-2.0.0/schema/ts/game.ts +485 -0
- aegis_game-2.0.0/schema/ts/index.aegis.ts +9 -0
- aegis_game-2.0.0/schema/ts/index.ts +1 -0
- aegis_game-2.0.0/schema/ts/location.ts +80 -0
- aegis_game-2.0.0/schema/ts/spawn.ts +93 -0
- aegis_game-2.0.0/schema/ts/team.ts +177 -0
- aegis_game-2.0.0/schema/ts/turn.ts +129 -0
- aegis_game-2.0.0/schema/ts/world.ts +129 -0
- aegis_game-2.0.0/schema/ts/world_object.ts +268 -0
- aegis_game-2.0.0/scripts/create_datasets_for_a3.py +38 -0
- aegis_game-2.0.0/scripts/model_script.py +58 -0
- aegis_game-2.0.0/setup.py +222 -0
- aegis_game-2.0.0/src/_aegis/__init__.py +0 -0
- aegis_game-2.0.0/src/_aegis/aegis_config.py +38 -0
- aegis_game-2.0.0/src/_aegis/agent.py +92 -0
- aegis_game-2.0.0/src/_aegis/agent_controller.py +187 -0
- aegis_game-2.0.0/src/_aegis/agent_predictions/__init__.py +0 -0
- aegis_game-2.0.0/src/_aegis/agent_predictions/data_loader.py +50 -0
- aegis_game-2.0.0/src/_aegis/agent_predictions/prediction_handler.py +104 -0
- aegis_game-2.0.0/src/_aegis/args_parser.py +127 -0
- aegis_game-2.0.0/src/_aegis/cli.py +33 -0
- aegis_game-2.0.0/src/_aegis/common/__init__.py +11 -0
- aegis_game-2.0.0/src/_aegis/common/cell.py +111 -0
- aegis_game-2.0.0/src/_aegis/common/cell_info.py +46 -0
- aegis_game-2.0.0/src/_aegis/common/direction.py +64 -0
- aegis_game-2.0.0/src/_aegis/common/location.py +96 -0
- aegis_game-2.0.0/src/_aegis/common/objects/__init__.py +5 -0
- aegis_game-2.0.0/src/_aegis/common/objects/rubble.py +40 -0
- aegis_game-2.0.0/src/_aegis/common/objects/survivor.py +68 -0
- aegis_game-2.0.0/src/_aegis/common/objects/world_object.py +21 -0
- aegis_game-2.0.0/src/_aegis/constants.py +36 -0
- aegis_game-2.0.0/src/_aegis/full_stub.py +178 -0
- aegis_game-2.0.0/src/_aegis/game.py +447 -0
- aegis_game-2.0.0/src/_aegis/game_pb.py +212 -0
- aegis_game-2.0.0/src/_aegis/id_gen.py +13 -0
- aegis_game-2.0.0/src/_aegis/logger.py +88 -0
- aegis_game-2.0.0/src/_aegis/message.py +16 -0
- aegis_game-2.0.0/src/_aegis/message_buffer.py +86 -0
- aegis_game-2.0.0/src/_aegis/play.py +112 -0
- aegis_game-2.0.0/src/_aegis/py.typed +0 -0
- aegis_game-2.0.0/src/_aegis/sandbox/__init__.py +0 -0
- aegis_game-2.0.0/src/_aegis/sandbox/core.py +251 -0
- aegis_game-2.0.0/src/_aegis/sandbox/sandbox.py +149 -0
- aegis_game-2.0.0/src/_aegis/sandbox/typed_ast.py +70 -0
- aegis_game-2.0.0/src/_aegis/schemas/cell_pb2.py +40 -0
- aegis_game-2.0.0/src/_aegis/schemas/cell_pb2.pyi +34 -0
- aegis_game-2.0.0/src/_aegis/schemas/event_pb2.py +37 -0
- aegis_game-2.0.0/src/_aegis/schemas/event_pb2.pyi +22 -0
- aegis_game-2.0.0/src/_aegis/schemas/game_pb2.py +53 -0
- aegis_game-2.0.0/src/_aegis/schemas/game_pb2.pyi +65 -0
- aegis_game-2.0.0/src/_aegis/schemas/location_pb2.py +36 -0
- aegis_game-2.0.0/src/_aegis/schemas/location_pb2.pyi +13 -0
- aegis_game-2.0.0/src/_aegis/schemas/spawn_pb2.py +38 -0
- aegis_game-2.0.0/src/_aegis/schemas/spawn_pb2.pyi +17 -0
- aegis_game-2.0.0/src/_aegis/schemas/team_pb2.py +38 -0
- aegis_game-2.0.0/src/_aegis/schemas/team_pb2.pyi +35 -0
- aegis_game-2.0.0/src/_aegis/schemas/turn_pb2.py +38 -0
- aegis_game-2.0.0/src/_aegis/schemas/turn_pb2.pyi +24 -0
- aegis_game-2.0.0/src/_aegis/schemas/world_object_pb2.py +42 -0
- aegis_game-2.0.0/src/_aegis/schemas/world_object_pb2.pyi +41 -0
- aegis_game-2.0.0/src/_aegis/schemas/world_pb2.py +37 -0
- aegis_game-2.0.0/src/_aegis/schemas/world_pb2.pyi +23 -0
- aegis_game-2.0.0/src/_aegis/server_websocket.py +105 -0
- aegis_game-2.0.0/src/_aegis/stub_generator.py +220 -0
- aegis_game-2.0.0/src/_aegis/team.py +11 -0
- aegis_game-2.0.0/src/_aegis/team_info.py +60 -0
- aegis_game-2.0.0/src/_aegis/types/__init__.py +3 -0
- aegis_game-2.0.0/src/_aegis/types/others.py +72 -0
- aegis_game-2.0.0/src/_aegis/types/prediction.py +19 -0
- aegis_game-2.0.0/src/_aegis/types/world.py +41 -0
- aegis_game-2.0.0/src/_aegis/world.py +42 -0
- aegis_game-2.0.0/src/_aegis/world_pb.py +115 -0
- aegis_game-2.0.0/src/aegis/__init__.py +18 -0
- aegis_game-2.0.0/src/aegis/py.typed +0 -0
- aegis_game-2.0.0/src/aegis/stub.py +116 -0
- aegis_game-2.0.0/uv.lock +777 -0
- aegis_game-2.0.0/worlds/3-survs-line.world +0 -0
- aegis_game-2.0.0/worlds/ExampleWorld.world +0 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ExampleWorld.world +232 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ver1_1.world +257 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ver1_2.world +281 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ver2_1.world +281 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ver2_2.world +232 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ver3_1.world +245 -0
- aegis_game-2.0.0/worlds/a1-assignment-worlds/ver3_2.world +245 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/AStarGiant.world +7232 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/bonus.world +485 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test11.world +265 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test12.world +269 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test13.world +257 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test14.world +2229 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test15.world +8933 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test21.world +232 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test22.world +232 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test23.world +232 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test24.world +1832 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test25.world +7232 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test31.world +281 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test32.world +432 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test33.world +432 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test34.world +1832 -0
- aegis_game-2.0.0/worlds/a1-test-worlds/test35.world +7232 -0
- aegis_game-2.0.0/worlds/a3-assignment-worlds/ExampleWorld.world +1860 -0
- aegis_game-2.0.0/worlds/a3-bonus-worlds/ForFunRandomSplit.world +2294 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-1.world +1886 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-2.world +2135 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-3.world +613 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-4.world +1965 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-5.world +1985 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-6.world +2242 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-7.world +1905 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-8.world +2009 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-1.world +1050 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-2.world +2174 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-3.world +1853 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-4.world +1856 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-5.world +1867 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-6.world +1867 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-1.world +1841 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-2.world +1870 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-3.world +1841 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-4.world +1907 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-5.world +1837 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-1.world +1878 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-2.world +1881 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-3.world +1896 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-4.world +1863 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-1.world +2009 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-2.world +1872 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-3.world +1881 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-4.world +1858 -0
- aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/maps_v3.zip +0 -0
- aegis_game-2.0.0/worlds/dead.world +0 -0
- aegis_game-2.0.0/worlds/move_cost.world +0 -0
- aegis_game-2.0.0/worlds/test.world +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
Please include a summary of the change and which issue is fixed.
|
|
4
|
+
|
|
5
|
+
Resolves #[issue number]
|
|
6
|
+
|
|
7
|
+
## Type of change
|
|
8
|
+
|
|
9
|
+
- [ ] Bug fix
|
|
10
|
+
- [ ] New feature
|
|
11
|
+
- [ ] Breaking change
|
|
12
|
+
- [ ] Documentation update
|
|
13
|
+
- [ ] Other (please explain):
|
|
14
|
+
|
|
15
|
+
## Checklist
|
|
16
|
+
|
|
17
|
+
- [ ] I have tested this code
|
|
18
|
+
- [ ] I have added comments / documentation
|
|
19
|
+
- [ ] My code follows the code style of the project
|
|
20
|
+
- [ ] I have linked related issues and discussions
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
name: Legacy Combined Release (disabled)
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
note:
|
|
7
|
+
description: "This legacy workflow is disabled; use Release Client or Release PyPI instead."
|
|
8
|
+
required: false
|
|
9
|
+
default: ""
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build-electron:
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
include:
|
|
16
|
+
- os: macos-latest
|
|
17
|
+
platform: mac
|
|
18
|
+
path: "mac-universal/*.app"
|
|
19
|
+
- os: "ubuntu-22.04"
|
|
20
|
+
platform: linux
|
|
21
|
+
path: "*.AppImage"
|
|
22
|
+
- os: windows-latest
|
|
23
|
+
platform: win
|
|
24
|
+
path: "*.exe"
|
|
25
|
+
env:
|
|
26
|
+
NODE_VERSION: "20"
|
|
27
|
+
WORKING_DIR: ./client
|
|
28
|
+
ARTIFACT_PATH: "./packed-client/${{ matrix.path }}"
|
|
29
|
+
|
|
30
|
+
runs-on: ${{ matrix.os }}
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- name: Checkout code
|
|
34
|
+
uses: actions/checkout@v4
|
|
35
|
+
|
|
36
|
+
- name: Set up Node.js
|
|
37
|
+
uses: actions/setup-node@v4
|
|
38
|
+
with:
|
|
39
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
40
|
+
|
|
41
|
+
- name: Install dependencies
|
|
42
|
+
working-directory: ${{ env.WORKING_DIR }}
|
|
43
|
+
run: npm install
|
|
44
|
+
|
|
45
|
+
- name: Build app
|
|
46
|
+
working-directory: ${{ env.WORKING_DIR }}
|
|
47
|
+
run: |
|
|
48
|
+
if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
|
|
49
|
+
npm run build:pack:a1
|
|
50
|
+
else
|
|
51
|
+
npm run build:pack
|
|
52
|
+
fi
|
|
53
|
+
shell: bash
|
|
54
|
+
|
|
55
|
+
- name: Create ZIP archive
|
|
56
|
+
working-directory: ${{ env.WORKING_DIR }}
|
|
57
|
+
run: 7z a packed-client/${{ matrix.platform }}-electron.zip ${{ env.ARTIFACT_PATH }}
|
|
58
|
+
|
|
59
|
+
- name: Upload Artifact
|
|
60
|
+
uses: actions/upload-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: ${{ matrix.platform }}-electron
|
|
63
|
+
path: ${{ env.WORKING_DIR }}/packed-client/*.zip
|
|
64
|
+
|
|
65
|
+
release:
|
|
66
|
+
needs: [build-electron]
|
|
67
|
+
runs-on: ubuntu-latest
|
|
68
|
+
permissions:
|
|
69
|
+
contents: write
|
|
70
|
+
|
|
71
|
+
steps:
|
|
72
|
+
- name: Checkout code
|
|
73
|
+
uses: actions/checkout@v4
|
|
74
|
+
|
|
75
|
+
- name: Clean client directory
|
|
76
|
+
run: |
|
|
77
|
+
rm -rf client
|
|
78
|
+
mkdir client
|
|
79
|
+
|
|
80
|
+
- name: Download artifacts
|
|
81
|
+
uses: actions/download-artifact@v4
|
|
82
|
+
with:
|
|
83
|
+
path: ./artifacts/
|
|
84
|
+
|
|
85
|
+
- name: Setup version-specific files
|
|
86
|
+
run: |
|
|
87
|
+
# Select correct requirements file
|
|
88
|
+
if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
|
|
89
|
+
cp requirements-a1.txt requirements.txt
|
|
90
|
+
else
|
|
91
|
+
cp requirements-mas.txt requirements.txt
|
|
92
|
+
fi
|
|
93
|
+
rm requirements-a1.txt requirements-mas.txt
|
|
94
|
+
|
|
95
|
+
# Update imports for A1 if needed
|
|
96
|
+
if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
|
|
97
|
+
find ./src/aegis -type f \
|
|
98
|
+
-not -path "*/__pycache__/*" \
|
|
99
|
+
-not -path "*/agent_predictions/*" \
|
|
100
|
+
-exec grep -l "mas" {} + | xargs sed -i 's/mas/a1/g'
|
|
101
|
+
grep -lrw "PREDICT" ./src/aegis --include="__init__.py" | xargs sed -i '/PREDICT/d'
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
- name: Update world files
|
|
105
|
+
run: |
|
|
106
|
+
VERSION=$(if [[ "${{ github.ref_name }}" == *"-a1" ]]; then echo "a1"; else echo "a3"; fi)
|
|
107
|
+
find ./worlds -mindepth 1 \
|
|
108
|
+
-not -path "*/${VERSION}-assignment-worlds/*" \
|
|
109
|
+
-not -path "*/${VERSION}-assignment-worlds" \
|
|
110
|
+
-delete
|
|
111
|
+
mv ./worlds/${VERSION}-assignment-worlds/* ./worlds/
|
|
112
|
+
rm -rf ./worlds/${VERSION}-assignment-worlds
|
|
113
|
+
|
|
114
|
+
- name: Update agent files
|
|
115
|
+
run: |
|
|
116
|
+
VERSION=$(if [[ "${{ github.ref_name }}" == *"-a1" ]]; then echo "a1"; else echo "mas"; fi)
|
|
117
|
+
find ./src/agents -mindepth 1 \
|
|
118
|
+
-not -path "*/example_agent_${VERSION}/*" \
|
|
119
|
+
-not -path "*/example_agent_${VERSION}" \
|
|
120
|
+
-delete
|
|
121
|
+
|
|
122
|
+
- name: Cleanup extra files
|
|
123
|
+
run: |
|
|
124
|
+
# Remove version-specific directories
|
|
125
|
+
if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
|
|
126
|
+
rm -rf ./src/mas
|
|
127
|
+
rm sys_files/*.npy
|
|
128
|
+
else
|
|
129
|
+
rm -rf ./src/a1
|
|
130
|
+
rm sys_files/*.npy # added line above for temp spring sem not needing it
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# Remove development files
|
|
134
|
+
rm -rf .git .github ./docs scripts .gitignore README.md
|
|
135
|
+
|
|
136
|
+
- name: Create Electron zip
|
|
137
|
+
run: |
|
|
138
|
+
mkdir -p temp_electron/aegis/client
|
|
139
|
+
|
|
140
|
+
for platform in mac linux win; do
|
|
141
|
+
mkdir -p "temp_electron/aegis/client/${platform}-client"
|
|
142
|
+
cp "artifacts/${platform}-electron/"* "temp_electron/aegis/client/${platform}-client/${platform}-client.zip"
|
|
143
|
+
done
|
|
144
|
+
|
|
145
|
+
cp -r src worlds sys_files run.py setup.py requirements.txt temp_electron/aegis/
|
|
146
|
+
cd temp_electron
|
|
147
|
+
zip -r ../aegis-electron.zip aegis
|
|
148
|
+
|
|
149
|
+
- name: Create Release
|
|
150
|
+
uses: svenstaro/upload-release-action@v2
|
|
151
|
+
with:
|
|
152
|
+
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
|
153
|
+
file_glob: true
|
|
154
|
+
file: aegis-*.zip
|
|
155
|
+
tag: ${{ github.ref_name }}
|
|
156
|
+
release_name: "Aegis clients for version ${{ github.ref_name }}"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Python CI Pipeline
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
lint:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout Repository
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Setup Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: '3.12'
|
|
21
|
+
|
|
22
|
+
- name: Install ruff
|
|
23
|
+
run: pip install ruff
|
|
24
|
+
|
|
25
|
+
- name: Run ruff lint
|
|
26
|
+
run: ruff check src
|
|
27
|
+
|
|
28
|
+
format:
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
needs: lint
|
|
31
|
+
permissions:
|
|
32
|
+
contents: write
|
|
33
|
+
steps:
|
|
34
|
+
- name: Checkout Repository
|
|
35
|
+
uses: actions/checkout@v4
|
|
36
|
+
|
|
37
|
+
- name: Set up Python
|
|
38
|
+
uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: '3.12'
|
|
41
|
+
|
|
42
|
+
- name: Install ruff
|
|
43
|
+
run: pip install ruff
|
|
44
|
+
|
|
45
|
+
- name: Run ruff format
|
|
46
|
+
run: ruff format src
|
|
47
|
+
|
|
48
|
+
- name: Commit formatted changes
|
|
49
|
+
uses: stefanzweifel/git-auto-commit-action@v4
|
|
50
|
+
with:
|
|
51
|
+
commit_message: Auto format by Ruff
|
|
52
|
+
branch: ${{ github.head_ref }}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
name: Release Aegis
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "aegis-v*.*.*"
|
|
7
|
+
- "aegis-v*.*.*-*"
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
tag:
|
|
11
|
+
description: "Tag to release (e.g., aegis-v1.2.3 or aegis-v1.2.3-rc1). If empty, uses current ref name when it's a tag."
|
|
12
|
+
required: false
|
|
13
|
+
default: ""
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
id-token: write
|
|
17
|
+
contents: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: Set up Python
|
|
27
|
+
uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version: "3.12"
|
|
30
|
+
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v6
|
|
33
|
+
|
|
34
|
+
- name: Build distributions
|
|
35
|
+
run: uv build
|
|
36
|
+
|
|
37
|
+
- name: Upload dist as artifact
|
|
38
|
+
uses: actions/upload-artifact@v4
|
|
39
|
+
with:
|
|
40
|
+
name: pypi-dist
|
|
41
|
+
path: dist/**
|
|
42
|
+
if-no-files-found: error
|
|
43
|
+
|
|
44
|
+
publish:
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
needs: [build]
|
|
47
|
+
steps:
|
|
48
|
+
- name: Resolve release tag
|
|
49
|
+
id: resolve
|
|
50
|
+
run: |
|
|
51
|
+
if [ "${{ github.ref_type }}" = "tag" ]; then
|
|
52
|
+
RAW_TAG="${{ github.ref_name }}"
|
|
53
|
+
else
|
|
54
|
+
RAW_TAG="${{ inputs.tag }}"
|
|
55
|
+
fi
|
|
56
|
+
if [ -z "${RAW_TAG}" ]; then
|
|
57
|
+
echo "No tag provided" >&2
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
echo "tag=${RAW_TAG}" >> $GITHUB_OUTPUT
|
|
61
|
+
|
|
62
|
+
- name: Detect prerelease
|
|
63
|
+
id: pre
|
|
64
|
+
run: |
|
|
65
|
+
TAG='${{ steps.resolve.outputs.tag }}'
|
|
66
|
+
if echo "$TAG" | grep -Ei -- '-(rc|alpha|beta|pre|preview|dev)' >/dev/null; then
|
|
67
|
+
echo "prerelease=true" >> $GITHUB_OUTPUT
|
|
68
|
+
else
|
|
69
|
+
echo "prerelease=false" >> $GITHUB_OUTPUT
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
- name: Download dist
|
|
73
|
+
uses: actions/download-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: pypi-dist
|
|
76
|
+
path: ./dist
|
|
77
|
+
# repository-url: https://test.pypi.org/legacy/
|
|
78
|
+
|
|
79
|
+
- name: Upload distributions to GitHub Release
|
|
80
|
+
uses: svenstaro/upload-release-action@v2
|
|
81
|
+
with:
|
|
82
|
+
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
|
83
|
+
file: dist/*
|
|
84
|
+
file_glob: true
|
|
85
|
+
tag: ${{ steps.resolve.outputs.tag }}
|
|
86
|
+
release_name: "Aegis Release ${{ steps.resolve.outputs.tag }}"
|
|
87
|
+
overwrite: true
|
|
88
|
+
make_latest: true
|
|
89
|
+
prerelease: ${{ steps.pre.outputs.prerelease }}
|
|
90
|
+
|
|
91
|
+
- name: Publish to PyPI
|
|
92
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
93
|
+
with:
|
|
94
|
+
packages-dir: dist/
|
|
95
|
+
# repository-url: https://test.pypi.org/legacy/
|
|
96
|
+
# comment line above to publish to normal pypi
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
name: Release Client
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "client-v*.*.*"
|
|
7
|
+
- "client-v*.*.*-*"
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
tag:
|
|
11
|
+
description: "Tag to release (e.g., client-v1.2.3 or client-v1.2.3-rc1). If empty, uses current ref name when it's a tag."
|
|
12
|
+
required: false
|
|
13
|
+
default: ""
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: write
|
|
17
|
+
|
|
18
|
+
env:
|
|
19
|
+
NODE_VERSION: "20"
|
|
20
|
+
WORKING_DIR: ./client
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build-electron:
|
|
24
|
+
name: Build Electron Clients
|
|
25
|
+
strategy:
|
|
26
|
+
matrix:
|
|
27
|
+
include:
|
|
28
|
+
- os: macos-latest
|
|
29
|
+
platform: mac
|
|
30
|
+
- os: ubuntu-22.04
|
|
31
|
+
platform: linux
|
|
32
|
+
- os: windows-latest
|
|
33
|
+
platform: win
|
|
34
|
+
runs-on: ${{ matrix.os }}
|
|
35
|
+
steps:
|
|
36
|
+
- name: Checkout
|
|
37
|
+
uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
- name: Setup Node.js
|
|
40
|
+
uses: actions/setup-node@v4
|
|
41
|
+
with:
|
|
42
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
43
|
+
cache: npm
|
|
44
|
+
cache-dependency-path: ${{ env.WORKING_DIR }}/package-lock.json
|
|
45
|
+
|
|
46
|
+
- name: Install dependencies
|
|
47
|
+
working-directory: ${{ env.WORKING_DIR }}
|
|
48
|
+
run: npm ci
|
|
49
|
+
|
|
50
|
+
- name: Build app
|
|
51
|
+
working-directory: ${{ env.WORKING_DIR }}
|
|
52
|
+
shell: bash
|
|
53
|
+
run: |
|
|
54
|
+
case "${{ matrix.platform }}" in
|
|
55
|
+
mac)
|
|
56
|
+
npm run build:pack:mac
|
|
57
|
+
;;
|
|
58
|
+
linux)
|
|
59
|
+
npm run build:pack:linux
|
|
60
|
+
;;
|
|
61
|
+
win)
|
|
62
|
+
npm run build:pack:win
|
|
63
|
+
;;
|
|
64
|
+
esac
|
|
65
|
+
|
|
66
|
+
- name: Upload built client as artifact
|
|
67
|
+
uses: actions/upload-artifact@v4
|
|
68
|
+
with:
|
|
69
|
+
name: ${{ matrix.platform }}-electron
|
|
70
|
+
path: |
|
|
71
|
+
${{ env.WORKING_DIR }}/packed-client/**
|
|
72
|
+
if-no-files-found: error
|
|
73
|
+
|
|
74
|
+
release:
|
|
75
|
+
name: Create/Update GitHub Release
|
|
76
|
+
needs: [build-electron]
|
|
77
|
+
runs-on: ubuntu-latest
|
|
78
|
+
steps:
|
|
79
|
+
- name: Resolve release tag
|
|
80
|
+
id: resolve
|
|
81
|
+
run: |
|
|
82
|
+
if [ "${{ github.ref_type }}" = "tag" ]; then
|
|
83
|
+
RAW_TAG="${{ github.ref_name }}"
|
|
84
|
+
else
|
|
85
|
+
RAW_TAG="${{ inputs.tag }}"
|
|
86
|
+
fi
|
|
87
|
+
if [ -z "${RAW_TAG}" ]; then
|
|
88
|
+
echo "No tag provided" >&2
|
|
89
|
+
exit 1
|
|
90
|
+
fi
|
|
91
|
+
echo "Using tag '${RAW_TAG}' for GitHub Release"
|
|
92
|
+
echo "tag=${RAW_TAG}" >> $GITHUB_OUTPUT
|
|
93
|
+
|
|
94
|
+
- name: Detect prerelease
|
|
95
|
+
id: pre
|
|
96
|
+
run: |
|
|
97
|
+
TAG='${{ steps.resolve.outputs.tag }}'
|
|
98
|
+
if echo "$TAG" | grep -Ei -- '-(rc|alpha|beta|pre|preview|dev)' >/dev/null; then
|
|
99
|
+
echo "prerelease=true" >> $GITHUB_OUTPUT
|
|
100
|
+
else
|
|
101
|
+
echo "prerelease=false" >> $GITHUB_OUTPUT
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
- name: Download artifacts
|
|
105
|
+
uses: actions/download-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
path: ./artifacts/
|
|
108
|
+
|
|
109
|
+
- name: Prepare zips
|
|
110
|
+
run: |
|
|
111
|
+
mkdir -p release
|
|
112
|
+
# mac: keep .app bundle structure under packed-client/mac-universal/*.app
|
|
113
|
+
if compgen -G "artifacts/mac-electron/packed-client/mac-universal/*.app" > /dev/null; then
|
|
114
|
+
zip -r release/mac-client.zip artifacts/mac-electron/packed-client/mac-universal/*.app
|
|
115
|
+
fi
|
|
116
|
+
# linux: include just the AppImage under packed-client/*.AppImage
|
|
117
|
+
if compgen -G "artifacts/linux-electron/packed-client/*.AppImage" > /dev/null; then
|
|
118
|
+
zip -j release/linux-client.zip artifacts/linux-electron/packed-client/*.AppImage
|
|
119
|
+
fi
|
|
120
|
+
# windows: include just the exe under packed-client/*.exe
|
|
121
|
+
if compgen -G "artifacts/win-electron/packed-client/*.exe" > /dev/null; then
|
|
122
|
+
zip -j release/win-client.zip artifacts/win-electron/packed-client/*.exe
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
- name: Upload assets to GitHub Release
|
|
126
|
+
uses: svenstaro/upload-release-action@v2
|
|
127
|
+
with:
|
|
128
|
+
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
|
129
|
+
file: release/*.zip
|
|
130
|
+
file_glob: true
|
|
131
|
+
tag: ${{ steps.resolve.outputs.tag }}
|
|
132
|
+
release_name: "Client Release ${{ steps.resolve.outputs.tag }}"
|
|
133
|
+
overwrite: true
|
|
134
|
+
make_latest: true
|
|
135
|
+
prerelease: ${{ steps.pre.outputs.prerelease }}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: TypeScript CI Pipeline
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
lint:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- name: Checkout Repository
|
|
12
|
+
uses: actions/checkout@v4
|
|
13
|
+
|
|
14
|
+
- name: Setup Node
|
|
15
|
+
uses: actions/setup-node@v3
|
|
16
|
+
with:
|
|
17
|
+
node-version: 18
|
|
18
|
+
cache: 'npm'
|
|
19
|
+
cache-dependency-path: client/package-lock.json
|
|
20
|
+
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
working-directory: ./client
|
|
23
|
+
run: npm ci
|
|
24
|
+
|
|
25
|
+
- name: Run ESLint
|
|
26
|
+
working-directory: ./client
|
|
27
|
+
run: npx eslint src src-electron
|
|
28
|
+
|
|
29
|
+
format:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
needs: lint
|
|
32
|
+
permissions:
|
|
33
|
+
contents: write
|
|
34
|
+
steps:
|
|
35
|
+
- name: Checkout Repository
|
|
36
|
+
uses: actions/checkout@v4
|
|
37
|
+
|
|
38
|
+
- name: Setup Node
|
|
39
|
+
uses: actions/setup-node@v3
|
|
40
|
+
with:
|
|
41
|
+
node-version: 18
|
|
42
|
+
cache: 'npm'
|
|
43
|
+
cache-dependency-path: client/package-lock.json
|
|
44
|
+
|
|
45
|
+
- name: Install dependencies
|
|
46
|
+
working-directory: ./client
|
|
47
|
+
run: npm ci
|
|
48
|
+
|
|
49
|
+
- name: Run Prettier format
|
|
50
|
+
working-directory: ./client
|
|
51
|
+
run: npm run format
|
|
52
|
+
|
|
53
|
+
- name: Commit formatted changes
|
|
54
|
+
uses: stefanzweifel/git-auto-commit-action@v6
|
|
55
|
+
with:
|
|
56
|
+
commit_message: Auto format by Prettier
|
|
57
|
+
branch: ${{ github.head_ref }}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Python venv
|
|
2
|
+
.venv
|
|
3
|
+
|
|
4
|
+
# Python-generated files
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.py[oc]
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
wheels/
|
|
10
|
+
*.egg-info
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# Client Stuff
|
|
14
|
+
# Logs
|
|
15
|
+
logs
|
|
16
|
+
*.log
|
|
17
|
+
npm-debug.log*
|
|
18
|
+
yarn-debug.log*
|
|
19
|
+
yarn-error.log*
|
|
20
|
+
pnpm-debug.log*
|
|
21
|
+
lerna-debug.log*
|
|
22
|
+
|
|
23
|
+
node_modules
|
|
24
|
+
out
|
|
25
|
+
dist
|
|
26
|
+
dist-ssr
|
|
27
|
+
*.local
|
|
28
|
+
|
|
29
|
+
# Editor directories and files
|
|
30
|
+
.vscode/*
|
|
31
|
+
!.vscode/extensions.json
|
|
32
|
+
.idea
|
|
33
|
+
.DS_Store
|
|
34
|
+
*.suo
|
|
35
|
+
*.ntvs*
|
|
36
|
+
*.njsproj
|
|
37
|
+
*.sln
|
|
38
|
+
*.sw?
|
|
39
|
+
packed-client
|
|
40
|
+
.prettierrc
|
|
41
|
+
replay.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|