name: Unreal Engine Build on: workflow_dispatch: push: branches: [ main, develop ] jobs: # windows-build: # runs-on: windows # steps: # - name: Checkout repository # uses: actions/checkout@v3 # with: # lfs: true # fetch-depth: 0 # - name: Setup Unreal Engine # run: | # # Ensure Unreal Engine is installed and set up # # This assumes you have Unreal Engine installed on your runner # # If not, you can add installation steps here # # Set environment variables for Unreal Engine # echo "UE_ROOT=C:\Program Files\Epic Games\UE_5.2" >> $GITHUB_ENV # - name: Build Unreal Project # run: | # # Find your .uproject file (adjust path as needed) # $UPROJECT_PATH = Get-ChildItem -Path . -Filter "*.uproject" -Recurse | Select-Object -First 1 -ExpandProperty FullName # Write-Host "Building project: $UPROJECT_PATH" # # Use Unreal Automation Tool to build the project # & "$env:UE_ROOT\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun ` # -project="$UPROJECT_PATH" ` # -noP4 ` # -platform=Win64 ` # -clientconfig=Development ` # -cook -build -stage -pak -archive ` # -archivedirectory="$PWD\Build" # - name: Upload build artifacts # uses: actions/upload-artifact@v3 # with: # name: windows-build # path: Build/ # retention-days: 7 macos-build: runs-on: macos steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 1 lfs: true # Remove sparse checkout as it's not supported in older Git versions # We'll use a full checkout with shallow depth for speed - name: Cache build dependencies uses: actions/cache@v3 with: path: | ~/Library/Caches/Unreal Engine Intermediate/ Saved/ DerivedDataCache/ key: ${{ runner.os }}-unreal-build-${{ hashFiles('**/*.uproject') }} restore-keys: | ${{ runner.os }}-unreal-build- - name: Setup Unreal Engine run: | # Install necessary tools brew install unrar brew install coreutils # For realpath # Use the correct path where Unreal Engine is installed # Note: Paths with spaces need special handling UE_PATH="/Users/Shared/Epic\ Games/UE_5.5" # Check the directory exists but use unescaped version for test if [ ! -d "/Users/Shared/Epic Games/UE_5.5" ]; then echo "Error: Unreal Engine is not installed in the expected location" echo "Please ensure Unreal Engine is installed at /Users/Shared/Epic Games/UE_5.5" exit 1 fi # Set environment variables with proper escaping # Use double quotes to preserve the backslash escaping echo "UE_ROOT=\"${UE_PATH}/Engine\"" >> $GITHUB_ENV echo "UE_PATH=\"${UE_PATH}\"" >> $GITHUB_ENV # Export variables directly for this script export UE_ROOT="${UE_PATH}/Engine" export UE_PATH="${UE_PATH}" echo "Unreal Engine paths:" echo "UE_ROOT=$UE_ROOT" echo "UE_PATH=$UE_PATH" # Set up MuJoCo library MUJOCO_LIB_DIR="Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib" mkdir -p "$MUJOCO_LIB_DIR" # Simplify MuJoCo dylib handling - download directly if needed if [ ! -f "$MUJOCO_LIB_DIR/mujoco.dylib" ]; then echo "Downloading MuJoCo directly..." # Download pre-built dylib for macOS (simpler approach) curl -L -o "$MUJOCO_LIB_DIR/mujoco.dylib" "https://github.com/google-deepmind/mujoco/releases/download/2.3.7/mujoco-2.3.7-macos-universal2.dylib" || echo "Failed to download dylib" if [ ! -f "$MUJOCO_LIB_DIR/mujoco.dylib" ]; then echo "Direct download failed, creating placeholder..." # Create placeholder file for testing touch "$MUJOCO_LIB_DIR/mujoco.dylib" fi else echo "Using existing MuJoCo dylib" fi chmod +x "$MUJOCO_LIB_DIR/mujoco.dylib" # Try multiple locations for the mujoco library # 1. Create directory in Engine/Source UE_ENGINE_PATH="/Users/Shared/Epic Games/UE_5.5/Engine" mkdir -p "${UE_ENGINE_PATH}/Source" echo "Created directory: ${UE_ENGINE_PATH}/Source" # 2. Copy the library directly (don't rely on symlinks) if [ -f "$MUJOCO_LIB_DIR/mujoco.dylib" ]; then cp "$(pwd)/$MUJOCO_LIB_DIR/mujoco.dylib" "${UE_ENGINE_PATH}/Source/" echo "Copied library to: ${UE_ENGINE_PATH}/Source/mujoco.dylib" # 3. Also copy to Binaries/Mac directory mkdir -p "${UE_ENGINE_PATH}/Binaries/Mac" cp "$(pwd)/$MUJOCO_LIB_DIR/mujoco.dylib" "${UE_ENGINE_PATH}/Binaries/Mac/" echo "Copied library to: ${UE_ENGINE_PATH}/Binaries/Mac/mujoco.dylib" # 4. Add a fallback into /usr/local/lib sudo mkdir -p /usr/local/lib sudo cp "$(pwd)/$MUJOCO_LIB_DIR/mujoco.dylib" /usr/local/lib/ echo "Copied library to: /usr/local/lib/mujoco.dylib" else echo "ERROR: mujoco.dylib not found in $MUJOCO_LIB_DIR" echo "Attempting to create empty placeholder file for testing" # Create an empty placeholder file for testing touch "${UE_ENGINE_PATH}/Source/mujoco.dylib" touch "${UE_ENGINE_PATH}/Binaries/Mac/mujoco.dylib" sudo touch /usr/local/lib/mujoco.dylib fi # Set up environment for the build export DYLD_LIBRARY_PATH="$(pwd)/Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib:${UE_ENGINE_PATH}/Source:${UE_ENGINE_PATH}/Binaries/Mac:/usr/local/lib:$DYLD_LIBRARY_PATH" export DYLD_FRAMEWORK_PATH="${UE_ENGINE_PATH}/Binaries/Mac:$DYLD_FRAMEWORK_PATH" export DYLD_FALLBACK_LIBRARY_PATH="${UE_ENGINE_PATH}/Binaries/Mac:${UE_ENGINE_PATH}/Source:/usr/local/lib:$DYLD_FALLBACK_LIBRARY_PATH" - name: Build Unreal Project run: | # Ensure required tools are installed if ! command -v realpath &> /dev/null; then echo "realpath not found, using alternative method for absolute path" REALPATH_CMD="pwd -P" else REALPATH_CMD="realpath" fi # Use direct path instead of environment variable UE_ENGINE_PATH="/Users/Shared/Epic Games/UE_5.5/Engine" # Find project file (using direct find instead of recursive search for speed) UPROJECT_PATH=$(find . -maxdepth 1 -name "*.uproject" -type f | head -1) if [ -z "$UPROJECT_PATH" ]; then echo "Error: Could not find .uproject file in root directory" exit 1 fi # Convert to absolute path (handle potential realpath availability issues) if command -v realpath &> /dev/null; then UPROJECT_ABSOLUTE_PATH=$(realpath "$UPROJECT_PATH") else UPROJECT_ABSOLUTE_PATH="$(cd "$(dirname "$UPROJECT_PATH")" && pwd)/$(basename "$UPROJECT_PATH")" fi echo "Project absolute path: $UPROJECT_ABSOLUTE_PATH" # Make the project file readable and executable chmod 755 "$UPROJECT_ABSOLUTE_PATH" # Ensure RunUAT.sh is executable chmod +x "${UE_ENGINE_PATH}/Build/BatchFiles/RunUAT.sh" # Set up runtime environment for the build export DYLD_LIBRARY_PATH="$(pwd)/Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib:${UE_ENGINE_PATH}/Source:${UE_ENGINE_PATH}/Binaries/Mac:/usr/local/lib:$DYLD_LIBRARY_PATH" export DYLD_FRAMEWORK_PATH="${UE_ENGINE_PATH}/Binaries/Mac:$DYLD_FRAMEWORK_PATH" export DYLD_FALLBACK_LIBRARY_PATH="${UE_ENGINE_PATH}/Binaries/Mac:${UE_ENGINE_PATH}/Source:/usr/local/lib:$DYLD_FALLBACK_LIBRARY_PATH" # Verify library locations once more echo "Verifying library locations before build:" echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH" ls -la "${UE_ENGINE_PATH}/Source/mujoco.dylib" || echo "Library not found in ${UE_ENGINE_PATH}/Source" # Speed up build by using optimal parameters echo "Starting build process..." "${UE_ENGINE_PATH}/Build/BatchFiles/RunUAT.sh" BuildCookRun \ -project="$UPROJECT_ABSOLUTE_PATH" \ -noP4 \ -platform=Mac \ -clientconfig=Development \ -cook -build -stage -pak -archive \ -archivedirectory="$(pwd)/Build" \ -SkipCookingEditorContent \ -iterativecooking \ -fastcook \ -compressed \ -allmaps - name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: macos-build path: Build/ retention-days: 7