diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index a3975538817..0f87ce2004d 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -38,7 +38,7 @@ jobs: - name: Download build outputs uses: actions/download-artifact@v8 with: - name: build-artifact-${{ inputs.major || env.BYOND_MAJOR }}-${{ inputs.minor || env.BYOND_MINOR}} + name: build-artifact-${{ inputs.major || env.BYOND_MAJOR }}-${{ inputs.minor || env.BYOND_MINOR }} path: ./ - name: Setup database env: @@ -65,7 +65,7 @@ jobs: if: always() uses: actions/upload-artifact@v7 with: - name: test_artifacts_${{ inputs.map }}_${{ inputs.major }}_${{ inputs.minor }} + name: test_artifacts_${{ inputs.map }}_${{ inputs.major || env.BYOND_MAJOR }}_${{ inputs.minor || env.BYOND_MINOR }} path: data/screenshots_new/ retention-days: 1 - name: On test fail, write a step summary diff --git a/_maps/runtimestation_minimal.json b/_maps/runtimestation_minimal.json index d638519ef91..3923a1f15a1 100644 --- a/_maps/runtimestation_minimal.json +++ b/_maps/runtimestation_minimal.json @@ -13,7 +13,7 @@ "/datum/unit_test/nuke_cinematic", "/datum/unit_test/atmospherics_sanity", "/datum/unit_test/maptest_mapload_space_verification", - "/datum/unit_test/modify_fantasy_variable", - "/datum/unit_test/create_and_destroy" - ] + "/datum/unit_test/modify_fantasy_variable" + ], + "is_unit_test_map": true } diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index 021c53b336d..c3793f141e5 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -60,8 +60,12 @@ /// Boolean - if TRUE, players spawn with grappling hooks in their bags var/give_players_hooks = FALSE +#if defined(UNIT_TESTS) || defined(SPACEMAN_DMM) /// List of unit tests that are skipped when running this map var/list/skipped_tests + /// If TRUE, only unit tests with UNIT_TEST_DEBUG_MAP_ONLY will run on this map + var/is_unit_test_map = FALSE +#endif /// Boolean that tells SSmapping to load all away missions in the codebase. var/load_all_away_missions = FALSE @@ -266,6 +270,9 @@ stack_trace("Invalid path in mapping config for ignored unit tests: \[[path_as_text]\]") continue LAZYADD(skipped_tests, path_real) + + if ("is_unit_test_map" in json) + is_unit_test_map = json["is_unit_test_map"] #endif defaulted = FALSE diff --git a/code/modules/admin/view_variables/reference_tracking.dm b/code/modules/admin/view_variables/reference_tracking.dm index cccb97f6c9b..d7123e84484 100644 --- a/code/modules/admin/view_variables/reference_tracking.dm +++ b/code/modules/admin/view_variables/reference_tracking.dm @@ -205,7 +205,7 @@ GLOBAL_ALIST_EMPTY(reftracker_skip_typecache_b) DoSearchVar(element_in_list, "[container_name] -> [element_in_list] (list)", search_time, recursion_count + 1) //Check normal entrys else if(element_in_list == src) - #ifdef REFERENCE_TRACKING_DEBUG +#ifdef REFERENCE_TRACKING_DEBUG if(SSgarbage.should_save_refs) if(!found_refs) found_refs = list() @@ -213,9 +213,9 @@ GLOBAL_ALIST_EMPTY(reftracker_skip_typecache_b) continue else log_reftracker("Found [type] [text_ref(src)] in list [container_name].") - #else +#else log_reftracker("Found [type] [text_ref(src)] in list [container_name].") - #endif +#endif // This is dumb as hell I'm sorry // I don't want the garbage subsystem to count as a ref for the purposes of this number diff --git a/code/modules/capture_the_flag/ctf_controller.dm b/code/modules/capture_the_flag/ctf_controller.dm index dbc152d6bf4..55becb73c5d 100644 --- a/code/modules/capture_the_flag/ctf_controller.dm +++ b/code/modules/capture_the_flag/ctf_controller.dm @@ -233,10 +233,7 @@ ///Creates a CTF game with the provided team ID then returns a reference to the new controller. If a controller already exists provides a reference to it. /proc/create_ctf_game(game_id) - if(GLOB.ctf_games[game_id]) - return GLOB.ctf_games[game_id] - var/datum/ctf_controller/CTF = new(game_id) - return CTF + return GLOB.ctf_games[game_id] || new /datum/ctf_controller(game_id) #undef CTF_DEFAULT_RESPAWN #undef CTF_INSTAGIB_RESPAWN diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index 2b164277aba..e7316c12ec6 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -20,9 +20,7 @@ /obj/machinery/ctf/Initialize(mapload) . = ..() - ctf_game = GLOB.ctf_games[game_id] - if(isnull(ctf_game)) - ctf_game = create_ctf_game(game_id) + ctf_game = create_ctf_game(game_id) ///A spawn point for CTF, ghosts can interact with this to vote for CTF or spawn in if a game is running. /obj/machinery/ctf/spawner @@ -447,10 +445,10 @@ /obj/effect/ctf/dead_barricade/Initialize(mapload) . = ..() ctf_game = GLOB.ctf_games[game_id] - ctf_game.barricades += src + ctf_game?.barricades += src /obj/effect/ctf/dead_barricade/Destroy() - ctf_game.barricades -= src + ctf_game?.barricades -= src return ..() /obj/effect/ctf/dead_barricade/proc/respawn() @@ -473,10 +471,8 @@ ///Proc that handles toggling and unloading CTF. /proc/toggle_id_ctf(user, activated_id, automated = FALSE, unload = FALSE, area/ctf_area = /area/centcom/ctf) var/static/loading = CTF_LOADING_UNLOADED - var/datum/ctf_controller/ctf_controller = GLOB.ctf_games[activated_id] - if(isnull(ctf_controller)) - ctf_controller = create_ctf_game(activated_id) - if(unload == TRUE) + var/datum/ctf_controller/ctf_controller = create_ctf_game(activated_id) + if(unload) log_admin("[key_name_admin(user)] is attempting to unload CTF.") message_admins("[key_name_admin(user)] is attempting to unload CTF.") if(loading == CTF_LOADING_UNLOADED) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index d53bd596bfa..ebaff3921fc 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -39,7 +39,7 @@ /// *Only* run the test provided within the parentheses /// This is useful for debugging when you want to reduce noise, but should never be pushed /// Intended to be used in the manner of `TEST_FOCUS(/datum/unit_test/math)` -#define TEST_FOCUS(test_path) ##test_path { focus = TRUE; } +#define TEST_FOCUS(test_path) ##test_path { test_flags = UNIT_TEST_FOCUS; } /// Run the test provided within the parentheses run_count times /// Useful for debugging flaky tests that only fail sometimes @@ -67,6 +67,16 @@ */ #define TEST_AFTER_CREATE_AND_DESTROY INFINITY +// Unit test bitflags + +/// If any unit test has this bitflag, only unit tests with UNIT_TEST_FOCUS will run. +#define UNIT_TEST_FOCUS (1<<0) +/// This unit test only runs on specially designated unit test maps (Should only ever be one). +#define UNIT_TEST_DEBUG_MAP_ONLY (1<<1) + +#define UNIT_TEST_BASIC (UNIT_TEST_DEBUG_MAP_ONLY) +#define UNIT_TEST_MAP_TEST (NONE) + /// Change color to red on ANSI terminal output, if enabled with -DANSICOLORS. #ifdef ANSICOLORS #define TEST_OUTPUT_RED(text) "\x1B\x5B1;31m[text]\x1B\x5B0m" diff --git a/code/modules/unit_tests/area_contents.dm b/code/modules/unit_tests/area_contents.dm index dea3c0a3057..0b5c792561d 100644 --- a/code/modules/unit_tests/area_contents.dm +++ b/code/modules/unit_tests/area_contents.dm @@ -1,6 +1,7 @@ /// Verifies that an area's perception of their "turfs" is correct, and no other area overlaps with them /// Quite slow, but needed /datum/unit_test/maptest_area_contents + test_flags = UNIT_TEST_MAP_TEST priority = TEST_LONGER /datum/unit_test/maptest_area_contents/Run() diff --git a/code/modules/unit_tests/atmospherics_sanity.dm b/code/modules/unit_tests/atmospherics_sanity.dm index d7348a096d3..f3efb4d0a13 100644 --- a/code/modules/unit_tests/atmospherics_sanity.dm +++ b/code/modules/unit_tests/atmospherics_sanity.dm @@ -2,6 +2,7 @@ * This test checks that all areas are connected to their distribution loops */ /datum/unit_test/atmospherics_sanity + test_flags = UNIT_TEST_MAP_TEST priority = TEST_LONGER // we iterate over all atmospherics devices on the starting networks /// List of areas to start crawling from diff --git a/code/modules/unit_tests/cable_powernets.dm b/code/modules/unit_tests/cable_powernets.dm index f462dcf5bc9..24da321f585 100644 --- a/code/modules/unit_tests/cable_powernets.dm +++ b/code/modules/unit_tests/cable_powernets.dm @@ -1,5 +1,6 @@ ///Checking all powernets to see if they are properly connected and powered. /datum/unit_test/cable_powernets + test_flags = UNIT_TEST_MAP_TEST /datum/unit_test/cable_powernets/Run() for(var/datum/powernet/powernets as anything in SSmachines.powernets) diff --git a/code/modules/unit_tests/cargo_dep_order_locations.dm b/code/modules/unit_tests/cargo_dep_order_locations.dm index 106a0eb19a7..aa262628d2d 100644 --- a/code/modules/unit_tests/cargo_dep_order_locations.dm +++ b/code/modules/unit_tests/cargo_dep_order_locations.dm @@ -1,4 +1,5 @@ /datum/unit_test/cargo_dep_order_locations + test_flags = UNIT_TEST_MAP_TEST /datum/unit_test/cargo_dep_order_locations/Run() for(var/datum/job_department/department as anything in SSjob.joinable_departments) diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index 366ebc29c13..76feb7b8b01 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -1,5 +1,7 @@ ///Delete one of every type, sleep a while, then check to see if anything has gone fucky /datum/unit_test/create_and_destroy + // Since this unit test takes so damn long, we split it up across all runners + test_flags = parent_type::test_flags & ~UNIT_TEST_DEBUG_MAP_ONLY //You absolutely must run after (almost) everything else priority = TEST_CREATE_AND_DESTROY @@ -15,6 +17,30 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) GLOB.running_create_and_destroy = TRUE var/list/type_paths_to_check = (valid_typesof(/atom/movable) + valid_typesof(/turf)) - uncreatables // No areas please + + // This code is responsible for splitting up create & destroy across multiple integration tests. + var/total_amount_to_check = length(type_paths_to_check) + var/runner_count = length(config.maplist) + + var/split_up_amount = floor(total_amount_to_check / runner_count) + + var/what_map_index_are_we = 1 + for(var/map_name, _map_config in config.maplist) + var/datum/map_config/map_config = _map_config + if(SSmapping.current_map.map_name == map_config.map_name) + break + what_map_index_are_we++ + + var/start_index = (what_map_index_are_we - 1) * split_up_amount + // Instead of super trying to make it an equal split, we just give the remainder tests to the final runner + var/end_index = (what_map_index_are_we == runner_count) ? total_amount_to_check : start_index + split_up_amount + + // +1 because byond's list.Copy() implementation is weird + type_paths_to_check = type_paths_to_check.Copy(start_index, end_index + 1) + + log_world("Running create and destroy on [length(type_paths_to_check)] atoms out of the [total_amount_to_check] total") + log_world("([start_index] [type_paths_to_check[1]]) - ([end_index] [type_paths_to_check[length(type_paths_to_check)]])") + for(var/type_path in type_paths_to_check) if(ispath(type_path, /turf)) spawn_at.ChangeTurf(type_path) @@ -28,6 +54,8 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) else var/atom/creation = new type_path(spawn_at) if(QDELETED(creation)) + // Same as below + creation = null continue //Go all in qdel(creation, force = TRUE) @@ -50,7 +78,7 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) var/list/queues_we_care_about = list() // All of em, I want hard deletes too, since we rely on the debug info from them - for(var/i in 1 to GC_QUEUE_HARDDELETE) + for(var/i in GC_QUEUE_FILTER to GC_QUEUE_HARDDELETE) queues_we_care_about += i //Now that we've qdel'd everything, let's sleep until the gc has processed all the shit we care about diff --git a/code/modules/unit_tests/dcs_check_list_arguments.dm b/code/modules/unit_tests/dcs_check_list_arguments.dm index 769574cf95f..0358ecfc2b9 100644 --- a/code/modules/unit_tests/dcs_check_list_arguments.dm +++ b/code/modules/unit_tests/dcs_check_list_arguments.dm @@ -25,6 +25,7 @@ * This unit test requires every (unless ignored) atom to have been created at least once * for a more accurate search, which is why it's run after create_and_destroy is done running. */ + test_flags = parent_type::test_flags & ~UNIT_TEST_DEBUG_MAP_ONLY priority = TEST_AFTER_CREATE_AND_DESTROY /datum/unit_test/dcs_check_list_arguments/Run() diff --git a/code/modules/unit_tests/firedoor_regions.dm b/code/modules/unit_tests/firedoor_regions.dm index 6b64a4a7260..0e2dbfc32ef 100644 --- a/code/modules/unit_tests/firedoor_regions.dm +++ b/code/modules/unit_tests/firedoor_regions.dm @@ -7,6 +7,7 @@ * Then, checks if every non-ignored region has a fire alarm in it */ /datum/unit_test/firedoor_regions + test_flags = UNIT_TEST_MAP_TEST priority = TEST_LONGER /datum/unit_test/firedoor_regions/Run() diff --git a/code/modules/unit_tests/map_landmarks.dm b/code/modules/unit_tests/map_landmarks.dm index f81b67aa667..a454ed447fc 100644 --- a/code/modules/unit_tests/map_landmarks.dm +++ b/code/modules/unit_tests/map_landmarks.dm @@ -1,5 +1,6 @@ /// Tests that [/datum/job/proc/get_default_roundstart_spawn_point] returns a landmark from all joinable jobs. /datum/unit_test/maptest_job_roundstart_spawnpoints + test_flags = UNIT_TEST_MAP_TEST /datum/unit_test/maptest_job_roundstart_spawnpoints/Run() for(var/datum/job/job as anything in SSjob.joinable_occupations) diff --git a/code/modules/unit_tests/mapload_space_verification.dm b/code/modules/unit_tests/mapload_space_verification.dm index c7c9845956a..c51ac0ba549 100644 --- a/code/modules/unit_tests/mapload_space_verification.dm +++ b/code/modules/unit_tests/mapload_space_verification.dm @@ -1,6 +1,7 @@ /// Verifies that there are no space turfs inside a station area, or on any planetary z-level. Sometimes, these are introduced during the load of the map and are not present in the DMM itself. /// Let's just make sure that we have a stop-gap measure in place to catch these if they pop up so we don't put it onto production servers should something errant come up. /datum/unit_test/maptest_mapload_space_verification + test_flags = UNIT_TEST_MAP_TEST // This test is quite taxing time-wise, so let's run it later than other faster tests. priority = TEST_LONGER diff --git a/code/modules/unit_tests/mapping.dm b/code/modules/unit_tests/mapping.dm index 6b1509ba64e..ffdd66e2f67 100644 --- a/code/modules/unit_tests/mapping.dm +++ b/code/modules/unit_tests/mapping.dm @@ -1,5 +1,6 @@ /// Conveys all log_mapping messages as unit test failures, as they all indicate mapping problems. /datum/unit_test/maptest_log_mapping + test_flags = UNIT_TEST_MAP_TEST // Happen before all other tests, to make sure we only capture normal mapping logs. priority = TEST_PRE diff --git a/code/modules/unit_tests/mapping_nearstation_test.dm b/code/modules/unit_tests/mapping_nearstation_test.dm index 39898432fa0..6cdfe9be078 100644 --- a/code/modules/unit_tests/mapping_nearstation_test.dm +++ b/code/modules/unit_tests/mapping_nearstation_test.dm @@ -1,5 +1,6 @@ ///Detects movables that may have been accidentally placed in space, as well as movables which do not have the proper nearspace area (meaning they aren't lit properly.) /datum/unit_test/maptest_mapping_nearstation_test + test_flags = UNIT_TEST_MAP_TEST priority = TEST_PRE /datum/unit_test/maptest_mapping_nearstation_test/Run() diff --git a/code/modules/unit_tests/orphaned_genturf.dm b/code/modules/unit_tests/orphaned_genturf.dm index 289b883d2de..ce1d97faec3 100644 --- a/code/modules/unit_tests/orphaned_genturf.dm +++ b/code/modules/unit_tests/orphaned_genturf.dm @@ -1,6 +1,7 @@ /// Ensures we do not leave genturfs sitting around post work /// They serve as notice to the mapper and have no functionality, but it's good to make note of it here /datum/unit_test/orphaned_genturf + test_flags = UNIT_TEST_MAP_TEST /datum/unit_test/orphaned_genturf/Run() for(var/turf/open/genturf/orphaned in ALL_TURFS()) diff --git a/code/modules/unit_tests/required_map_items.dm b/code/modules/unit_tests/required_map_items.dm index a1b1f516d7f..4d65d7651e1 100644 --- a/code/modules/unit_tests/required_map_items.dm +++ b/code/modules/unit_tests/required_map_items.dm @@ -6,6 +6,7 @@ * - In the type's initialize, REGISTER_REQUIRED_MAP_ITEM() a minimum and maximum */ /datum/unit_test/maptest_required_map_items + test_flags = UNIT_TEST_MAP_TEST /// A list of all typepaths that we expect to be in the required items list var/list/expected_types = list() diff --git a/code/modules/unit_tests/subsystem_init.dm b/code/modules/unit_tests/subsystem_init.dm index f5168079a90..3f49b5069e0 100644 --- a/code/modules/unit_tests/subsystem_init.dm +++ b/code/modules/unit_tests/subsystem_init.dm @@ -1,5 +1,6 @@ /// Tests that all subsystems that need to properly initialize. /datum/unit_test/subsystem_init + test_flags = UNIT_TEST_MAP_TEST /datum/unit_test/subsystem_init/Run() for(var/datum/controller/subsystem/subsystem as anything in Master.subsystems) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 74f41bf1088..0b922c77e01 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -27,35 +27,37 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) /proc/focused_tests() var/list/focused_tests = list() for (var/datum/unit_test/unit_test as anything in subtypesof(/datum/unit_test)) - if (initial(unit_test.focus)) + if (unit_test::test_flags & UNIT_TEST_FOCUS) focused_tests += unit_test - return focused_tests.len > 0 ? focused_tests : null + return length(focused_tests) ? focused_tests : null /datum/unit_test - /// Do not instantiate if type matches this abstract_type = /datum/unit_test - //Bit of metadata for the future maybe - var/list/procs_tested - - /// The bottom left floor turf of the testing zone - var/turf/run_loc_floor_bottom_left - - /// The top right floor turf of the testing zone - var/turf/run_loc_floor_top_right - ///The priority of the test, the larger it is the later it fires + /// Behavior flags for this unit test + var/test_flags = UNIT_TEST_BASIC + /// The priority of the test, the larger it is the later it fires var/priority = TEST_DEFAULT - //internal shit - var/focus = FALSE - var/succeeded = TRUE - var/list/allocated - var/list/fail_reasons + /// How many times this unit test will run. Use the TEST_REPEAT() macro var/times_to_run = 1 - /// List of atoms that we don't want to ever initialize in an agnostic context, like for Create and Destroy. Stored on the base datum for usability in other relevant tests that need this data. - var/static/list/uncreatables = null + // internal shit + /// If this test has passed or not + var/succeeded = TRUE + /// The bottom left floor turf of the testing zone + var/turf/run_loc_floor_bottom_left + /// The top right floor turf of the testing zone + var/turf/run_loc_floor_top_right + /// A list of instances created by this unit test. Use allocate() + var/list/allocated + /// Lazy list of why this unit test failed. + var/list/fail_reasons + /// List of atoms that we don't want to ever initialize in an agnostic context, like for Create and Destroy. + /// Stored on the base datum for usability in other relevant tests that need this data. + var/static/list/uncreatables = null + /// Reference to the blank z-level containing our testing enviroment var/static/datum/space_level/reservation /proc/cmp_unit_test_priority(datum/unit_test/a, datum/unit_test/b) @@ -66,10 +68,9 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) var/datum/map_template/unit_tests/template = new reservation = template.load_new_z() - if (isnull(uncreatables)) - uncreatables = build_list_of_uncreatables() + uncreatables ||= build_list_of_uncreatables() - allocated = new + allocated = list() run_loc_floor_bottom_left = get_turf(locate(/obj/effect/landmark/unit_test_bottom_left) in GLOB.landmarks_list) run_loc_floor_top_right = get_turf(locate(/obj/effect/landmark/unit_test_top_right) in GLOB.landmarks_list) @@ -367,15 +368,37 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) /proc/RunUnitTests() CHECK_TICK - var/list/tests_to_run = subtypesof(/datum/unit_test) + // Find our primary unit test map & find out if we are the secondary + var/datum/map_config/primary_unit_test_map + var/is_secondary_unit_test_map = FALSE + var/found_secondary_unit_test_map = FALSE + for(var/map_name, _map_config in config.maplist) + var/datum/map_config/map_config = _map_config + if(map_config.is_unit_test_map) + primary_unit_test_map = map_config + if(!LAZYLEN(map_config.skipped_tests) && !found_secondary_unit_test_map) + found_secondary_unit_test_map = TRUE + if(SSmapping.current_map.map_name == map_config.map_name) + is_secondary_unit_test_map = TRUE + + var/list/tests_to_run = list() var/list/focused_tests = list() - for (var/_test_to_run in tests_to_run) - var/datum/unit_test/test_to_run = _test_to_run - if (initial(test_to_run.focus)) - focused_tests += test_to_run + for (var/datum/unit_test/potential_test as anything in subtypesof(/datum/unit_test)) + // If the test has [UNIT_TEST_DEBUG_MAP_ONLY] and we aren't the primary unit test map, skip it. + // HOWEVER, some unit tests are incompatible with the primary testing map, so we must offload them a secondary one with no blacklisted tests. + if((potential_test::test_flags & UNIT_TEST_DEBUG_MAP_ONLY) && !SSmapping.current_map.is_unit_test_map && \ + !(primary_unit_test_map.skipped_tests?.Find(potential_test) && is_secondary_unit_test_map) \ + ) + continue + if (potential_test::test_flags & UNIT_TEST_FOCUS) + focused_tests += potential_test + continue + tests_to_run += potential_test if(length(focused_tests)) tests_to_run = focused_tests + primary_unit_test_map = null // I'm paranoid + sortTim(tests_to_run, GLOBAL_PROC_REF(cmp_unit_test_priority)) var/list/test_results = list() diff --git a/config/maps.txt b/config/maps.txt index 56771ade99a..d9d967b5477 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -15,6 +15,8 @@ Format: webmap_url (link to the a webmap to see the map in the user's browser) endmap +# When adding or removing maps be sure to also add/remove from ci_config_maps.txt + # Production-level maps. map deltastation @@ -65,3 +67,6 @@ endmap map runtimestation endmap + +map runtimestation_minimal +endmap diff --git a/tools/ci/ci_config_maps.txt b/tools/ci/ci_config_maps.txt new file mode 100644 index 00000000000..b9dc69d4e68 --- /dev/null +++ b/tools/ci/ci_config_maps.txt @@ -0,0 +1,32 @@ +map deltastation +endmap + +map icebox +endmap + +map catwalkstation +endmap + +map metastation +endmap + +map tramstation +endmap + +map nebulastation +endmap + +map wawastation +endmap + +map gateway_test +endmap + +map multiz_debug +endmap + +map runtimestation +endmap + +map runtimestation_minimal +endmap diff --git a/tools/ci/run_server.sh b/tools/ci/run_server.sh index 178bd2c5b5d..e55b9a987ee 100644 --- a/tools/ci/run_server.sh +++ b/tools/ci/run_server.sh @@ -11,6 +11,7 @@ mkdir -p ci_test/data #test config cp tools/ci/ci_config.txt ci_test/config/config.txt +cp tools/ci/ci_config_maps.txt ci_test/config/maps.txt #set the map cp _maps/$MAP.json ci_test/data/next_map.json @@ -20,8 +21,11 @@ DreamDaemon tgstation.dmb -close -trusted -verbose -params "log-directory=ci" cd .. -mkdir -p data/screenshots_new -cp -r ci_test/data/screenshots_new data/screenshots_new +mkdir -p data +if [ -d "ci_test/data/screenshots_new" ]; then + mkdir -p data/screenshots_new + cp -r ci_test/data/screenshots_new data/screenshots_new +fi cp ci_test/data/unit_tests.json data/unit_tests.json cat ci_test/data/logs/ci/clean_run.lk