# Build Fresh-checkout build, content-pipeline and packaging procedure for the walkable demo. Begun 2026-11-07 from a blank build and extended through the `0.1.x` patches; the release checks that exercise it are in [release-checks.md](release-checks.md). ## Constraints - Engine installation is external to the repository. Record its path and exact version in [toolchain.md](toolchain.md). - Build output (`Binaries/`, `Intermediate/`, `Saved/`, `DerivedDataCache/`) is never committed. - Large content is LFS-tracked, so a fresh clone needs `git lfs install && git lfs pull` before any build. ## Engine Pinned install: **Unreal Engine 5.8.4** (CL 58902052, promoted build) at `/run/media/system/DATA/Engines/UE_5.8.4`. The engine bundles **no** Linux clang; the system clang (23.1.4, Fedora 45) is the game-code toolchain. Game targets must use `BuildSettingsVersion.V7` to share the installed editor's build environment. ## Fresh-checkout build ```bash git clone gig-line && cd gig-line git lfs install && git lfs pull Tools/check-lfs.sh # must pass before any content build # Compile the project's editor target (first build also proves the toolchain) cd /run/media/system/DATA/Engines/UE_5.8.4 Engine/Build/BatchFiles/Linux/Build.sh GigLineEditor Linux Development \ -project="$PWD/../../Documents/06-games/gig-line/Game/GigLine/GigLine.uproject" \ -WaitMutex # Expected tail: "Result: Succeeded"; module binary lands in # Game/GigLine/Binaries/Linux/libUnrealEditor-GigLine.so # Open in the editor (GUI, Vulkan) ./Engine/Binaries/Linux/UnrealEditor \ /run/media/system/DATA/Documents/06-games/gig-line/Game/GigLine/GigLine.uproject ``` Adapt the `-project=` path to the actual checkout location. ## Package a Linux build ```bash cd /run/media/system/DATA/Engines/UE_5.8.4 Engine/Build/BatchFiles/RunUAT.sh BuildCookRun \ -project="/run/media/system/DATA/Documents/06-games/gig-line/Game/GigLine/GigLine.uproject" \ -noP4 -platform=Linux -clientconfig=Development \ -cook -build -stage -pak \ -archive -archivedirectory="/run/media/system/DATA/Builds/GigLineQA" \ -unattended # Expected: "AutomationTool exiting with ExitCode=0 (Success)" and "EXIT=0", ~90 s # Launch test (plain, no -map): /run/media/system/DATA/Builds/GigLineQA/Linux/GigLine.sh ``` **Launch test must open the DemoMap.** A plain `./GigLine.sh` should load `/Game/Hollywood/DemoMap` (set via `DefaultEngine.ini` `GameMapsSettings`). If it instead opens `/Engine/Maps/Templates/OpenWorld`, the game shows an empty non-interactive "stuck" scene — check that `GameDefaultMap` is in `DefaultEngine.ini`, not `DefaultGame.ini`. Confirm the loaded map in the engine log: `.../Linux/GigLine/Saved/Logs/GigLine.log` (`LoadMap: /Game/Hollywood/DemoMap`). The archive directory is deliberately **outside** the repository; never archive into the checkout. ## Headless content checks Both content-acceptance tests run headless and are the template for all asset import verification: ```bash # Static-mesh scale test (Blender export -> Unreal import -> measure) # Blender: Tools/blender/scale_test_export.py, Unreal: Tools/unreal/ue_scale_test_import.py # MPFB character (generate -> rig -> bake -> export -> skeletal import) # Blender: Tools/blender/mpfb_character_export.py, Unreal: Tools/unreal/ue_character_import.py # Unreal side of any test: ./Engine/Binaries/Linux/UnrealEditor-Cmd \ /run/media/system/DATA/Documents/06-games/gig-line/Game/GigLine/GigLine.uproject \ -run=pythonscript -script=/Tools/