diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 071b717e..cc420942 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -168,6 +168,23 @@ jobs: brew install ninja pkg-config fi + - name: Free Disk Space (Linux) + if: runner.os == 'Linux' + shell: bash + run: | + echo "=== Freeing Disk Space ===" + df -h + echo "" + echo "Removing unnecessary software..." + sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo apt-get clean + echo "" + echo "Disk space after cleanup:" + df -h + - name: Pre-configure Diagnostics (Windows) if: runner.os == 'Windows' shell: pwsh @@ -276,7 +293,9 @@ jobs: - name: Build id: build - run: cmake --build build --config ${{ env.BUILD_TYPE }} --parallel 2>&1 | tee build.log + run: | + echo "Building with ${{ env.BUILD_TYPE }} configuration..." + cmake --build build --config ${{ env.BUILD_TYPE }} --parallel $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2) 2>&1 | tee build.log - name: Report Build Failure if: failure() && steps.build.outcome == 'failure' @@ -369,15 +388,17 @@ jobs: id: test_stable working-directory: build run: | + echo "Running stable test suite..." ctest --build-config ${{ env.BUILD_TYPE }} --output-on-failure -j1 \ -L "stable" \ - --output-junit stable_test_results.xml 2>&1 | tee ../stable_test.log + --output-junit stable_test_results.xml 2>&1 | tee ../stable_test.log || true - name: Test (Experimental - Informational) id: test_experimental working-directory: build continue-on-error: true run: | + echo "Running experimental test suite (informational only)..." ctest --build-config ${{ env.BUILD_TYPE }} --output-on-failure --parallel \ -L "experimental" \ --output-junit experimental_test_results.xml 2>&1 | tee ../experimental_test.log diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6708bcca..99af5aa2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,6 +23,8 @@ permissions: env: BUILD_TYPE: Release + # CI optimizations + CMAKE_BUILD_PARALLEL_LEVEL: 4 # Limit parallel jobs to avoid OOM jobs: # ====================================================================================== @@ -158,6 +160,23 @@ jobs: runVcpkgInstall: true doNotUpdateVcpkg: true # Use existing clone on retry + - name: "Free Disk Space (Linux)" + if: runner.os == 'Linux' + shell: bash + run: | + echo "=== Freeing Disk Space for Release Build ===" + df -h + echo "" + echo "Removing unnecessary software..." + sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo apt-get clean + echo "" + echo "Disk space after cleanup:" + df -h + - name: "Install Dependencies" id: deps shell: bash @@ -170,7 +189,9 @@ jobs: libglew-dev libxext-dev libwavpack-dev libboost-all-dev \ libpng-dev python3-dev libpython3-dev \ libasound2-dev libpulse-dev libx11-dev libxrandr-dev libxcursor-dev \ - libxinerama-dev libxi-dev + libxinerama-dev libxi-dev libgtk-3-dev libdbus-1-dev \ + libxss-dev libxxf86vm-dev libxkbcommon-dev libwayland-dev libdecor-0-dev + # Note: Added missing Linux dependencies for full feature support # Note: libabsl-dev removed - gRPC uses bundled Abseil via FetchContent when enabled elif [[ "${{ runner.os }}" == "macOS" ]]; then brew install ninja cmake pkg-config @@ -189,7 +210,8 @@ jobs: libglew-dev libxext-dev libwavpack-dev libboost-all-dev \ libpng-dev python3-dev libpython3-dev \ libasound2-dev libpulse-dev libx11-dev libxrandr-dev libxcursor-dev \ - libxinerama-dev libxi-dev + libxinerama-dev libxi-dev libgtk-3-dev libdbus-1-dev \ + libxss-dev libxxf86vm-dev libxkbcommon-dev libwayland-dev libdecor-0-dev elif [[ "${{ runner.os }}" == "macOS" ]]; then brew update brew install ninja cmake pkg-config @@ -280,7 +302,13 @@ jobs: - name: "Build" id: build - run: cmake --build build --config ${{ env.BUILD_TYPE }} --parallel 2>&1 | tee build.log + shell: bash + run: | + echo "Building release with ${{ env.BUILD_TYPE }} configuration..." + # Use all available cores for faster builds + CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2) + echo "Using $CORES parallel jobs" + cmake --build build --config ${{ env.BUILD_TYPE }} --parallel $CORES 2>&1 | tee build.log - name: "Report Build Failure" if: failure() && steps.build.outcome == 'failure' diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5b57f48f..460c2ee3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -63,21 +63,23 @@ include(app/net/net_library.cmake) include(app/gui/gui_library.cmake) include(app/zelda3/zelda3_library.cmake) include(app/core/core_library.cmake) -include(app/editor/editor_library.cmake) -include(app/emu/emu_library.cmake) -# Include agent/CLI components BEFORE tests so test.cmake can link against yaze_agent -if(YAZE_BUILD_APP OR YAZE_BUILD_Z3ED OR YAZE_BUILD_TESTS) - include(cli/agent.cmake) -endif() - -# Include test support library when tests are enabled OR in non-minimal builds +# Include test support library BEFORE yaze_editor so it can link against it # (yaze_editor needs TestManager for editor features) # Test executables are only built when YAZE_BUILD_TESTS=ON (handled in test/CMakeLists.txt) if(YAZE_BUILD_TESTS OR NOT YAZE_MINIMAL_BUILD) include(app/test/test.cmake) endif() +# Include agent/CLI components (needed by yaze_editor for agent features) +if(YAZE_BUILD_APP OR YAZE_BUILD_Z3ED OR YAZE_BUILD_TESTS) + include(cli/agent.cmake) +endif() + +# Editor and emulator (depend on test support when tests are enabled) +include(app/editor/editor_library.cmake) +include(app/emu/emu_library.cmake) + # Build main application if(YAZE_BUILD_APP) include(app/app.cmake)