Files
Commonwealth-Online-Server/cmake/stage_server.cmake
T

71 lines
2.4 KiB
CMake

# Stage server/ next to the Host GUI while preserving local runtime state.
if(NOT EXISTS "${CO_SERVER_SOURCE_DIR}")
message(FATAL_ERROR "Server source directory not found: ${CO_SERVER_SOURCE_DIR}")
endif()
if(NOT EXISTS "${CO_SERVER_SOURCE_DIR}/consumer_server_cli.py")
message(FATAL_ERROR
"Server entrypoint not found: ${CO_SERVER_SOURCE_DIR}/consumer_server_cli.py")
endif()
set(_preserve_config "")
if(EXISTS "${CO_SERVER_STAGE_CONFIG}")
file(READ "${CO_SERVER_STAGE_CONFIG}" _preserve_config)
endif()
set(_stage_bans "${CO_SERVER_STAGE_DIR}/bans.json")
set(_preserve_bans "")
if(EXISTS "${_stage_bans}")
file(READ "${_stage_bans}" _preserve_bans)
endif()
set(_stage_admin_token "${CO_SERVER_STAGE_DIR}/.admin-token")
set(_preserve_admin_token "")
if(EXISTS "${_stage_admin_token}")
file(READ "${_stage_admin_token}" _preserve_admin_token)
endif()
file(REMOVE_RECURSE "${CO_SERVER_STAGE_DIR}")
file(MAKE_DIRECTORY "${CO_SERVER_STAGE_DIR}")
# Prefer a filtered copy so caches and local runtime state do not ship with the build.
file(GLOB _server_entries RELATIVE "${CO_SERVER_SOURCE_DIR}" "${CO_SERVER_SOURCE_DIR}/*")
foreach(_entry IN LISTS _server_entries)
if(_entry STREQUAL "__pycache__"
OR _entry STREQUAL ".pytest_cache"
OR _entry STREQUAL ".venv"
OR _entry STREQUAL "logs"
OR _entry STREQUAL "tests"
OR _entry STREQUAL "bans.json"
OR _entry STREQUAL ".admin-token")
continue()
endif()
file(COPY "${CO_SERVER_SOURCE_DIR}/${_entry}"
DESTINATION "${CO_SERVER_STAGE_DIR}"
PATTERN "__pycache__" EXCLUDE
PATTERN "*.pyc" EXCLUDE
PATTERN ".pytest_cache" EXCLUDE
PATTERN ".venv" EXCLUDE
PATTERN "logs" EXCLUDE
PATTERN "bans.json" EXCLUDE
PATTERN ".admin-token" EXCLUDE
)
endforeach()
if(NOT "${_preserve_config}" STREQUAL "")
file(WRITE "${CO_SERVER_STAGE_CONFIG}" "${_preserve_config}")
endif()
if(NOT "${_preserve_bans}" STREQUAL "")
file(WRITE "${_stage_bans}" "${_preserve_bans}")
endif()
if(NOT "${_preserve_admin_token}" STREQUAL "")
file(WRITE "${_stage_admin_token}" "${_preserve_admin_token}")
endif()
if(NOT EXISTS "${CO_SERVER_STAGE_DIR}/consumer_server_cli.py")
message(FATAL_ERROR
"Failed to stage server entrypoint to ${CO_SERVER_STAGE_DIR}/consumer_server_cli.py")
endif()