# Local-only dedicated-server build and verification image. Pin the Godot # release family used by project.godot; no image is pushed by this repository. FROM --platform=linux/amd64 barichello/godot-ci:4.7.1 AS project-imported WORKDIR /workspace RUN apt-get update \ && apt-get install -y --no-install-recommends libfontconfig1 \ && rm -rf /var/lib/apt/lists/* COPY Game /workspace/Game # `.import` metadata is tracked but the generated `.godot/imported` cache is # intentionally not. A fresh checkout gives both source and metadata the # same timestamp, which can make Godot skip regeneration. Mark importable # sources newer so this image always contains a complete generated cache. RUN find Game -type f \( -name '*.blend' -o -name '*.glb' -o -name '*.png' -o -name '*.svg' \) -exec touch {} + \ && godot --headless --editor --path Game --import --quit \ && test -f Game/.godot/imported/nebula_station.glb-fa9a6dd87ae3789d04205b52215e2e76.scn \ && test -f Game/.godot/imported/nebula_debris.glb-39af77a17c0998b5b73172577d906cb9.scn \ && test -f Game/.godot/imported/nebula_planet.glb-2431590907ff85cf1057e7d6ad614ed7.scn # Test the source client from an untouched, fully imported project. The # dedicated-server export below rewrites the main scene and must not be used # to run client integration tests. FROM project-imported AS enet-test COPY scripts/verify_enet_integration.sh /workspace/scripts/verify_enet_integration.sh # Godot dedicated exports disallow command-line scene overrides. Bake the # server scene into this export (the interactive project's source stays # unchanged), then generate the global-script/autoload metadata it needs. FROM project-imported AS exporter RUN sed -i 's|^run/main_scene=.*$|run/main_scene="res://scenes/server_boot.tscn"|' Game/project.godot \ && mkdir -p /opt/cosmic-clash \ && godot --headless --path Game --export-release "Linux Dedicated Server" /opt/cosmic-clash/CosmicClashServer.x86_64 FROM --platform=linux/amd64 ubuntu:24.04 AS server RUN apt-get update && apt-get install -y --no-install-recommends libfontconfig1 libgl1 libstdc++6 && rm -rf /var/lib/apt/lists/* COPY --from=exporter /opt/cosmic-clash/ /opt/cosmic-clash/ COPY deploy/cosmic-clash-server /opt/cosmic-clash/cosmic-clash-server RUN chmod 0755 /opt/cosmic-clash/cosmic-clash-server WORKDIR /opt/cosmic-clash EXPOSE 7777/udp ENTRYPOINT ["/opt/cosmic-clash/cosmic-clash-server"] # Test-only target: runs the source client harness against the exported server. FROM exporter AS smoke-client WORKDIR /workspace ENTRYPOINT ["godot", "--headless", "--path", "Game", "res://tests/export_server_smoke.tscn", "--"]