LuckyWorld/.gitea/workflows/unreal-build.yml
Goran Lazarevski 8f01f72b98
Some checks failed
Unreal Engine Build / macos-build (push) Failing after 10m34s
MacOS build
2025-03-25 12:35:22 +01:00

178 lines
7.2 KiB
YAML

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:
lfs: true
fetch-depth: 0
- name: Setup Unreal Engine
timeout-minutes: 5 # Add timeout to prevent hanging
run: |
# Use the correct path where Unreal Engine is installed
UE_PATH="/Users/Shared/Epic Games/UE_5.5"
if [ ! -d "$UE_PATH" ]; then
echo "Error: Unreal Engine is not installed in the expected location"
echo "Please ensure Unreal Engine is installed at $UE_PATH"
exit 1
fi
# Set environment variable with the correct Engine path
echo "UE_ROOT=$UE_PATH/Engine" >> $GITHUB_ENV
echo "Using Unreal Engine 5.5"
# Create a MuJoCo dummy file in a different way that requires no sudo
# Instead of trying to copy to the system location, we'll modify the build process
# 1. First, verify if the MuJoCo library exists in the project
PROJECT_MUJOCO_LIB="Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib/mujoco.dylib"
if [ -f "$PROJECT_MUJOCO_LIB" ]; then
echo "Found MuJoCo library in the project at: $PROJECT_MUJOCO_LIB"
echo "Will use environment variables to point the linker to this location instead"
else
echo "WARNING: MuJoCo library not found in the project at: $PROJECT_MUJOCO_LIB"
echo "Creating a dummy library file in the project"
# Create the directory if it doesn't exist
mkdir -p "Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib"
# Create a dummy .dylib file that will satisfy the linker
echo '/* Dummy MuJoCo library */' > "Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib/mujoco.dylib"
chmod +x "Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib/mujoco.dylib"
fi
# Set DYLD_LIBRARY_PATH to include the project's library directory
# This will override the linker's search path to find our library first
echo "DYLD_LIBRARY_PATH=$(pwd)/Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV
# Create a patch file for Mujoco.Build.cs to use the project-local path
MUJOCO_BUILD_CS="Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/Mujoco.Build.cs"
if [ -f "$MUJOCO_BUILD_CS" ]; then
echo "Patching $MUJOCO_BUILD_CS to use local library path..."
# Create a backup
cp "$MUJOCO_BUILD_CS" "${MUJOCO_BUILD_CS}.bak"
# Use sed to modify the file to use only the local library path
sed -i.tmp 's|RuntimeDependencies.Add(Path.Combine("$(TargetOutputDir)", "mujoco.dylib"), Path.Combine(ModuleDirectory, "lib", "mujoco.dylib"));|// Modified to use local path only\n\t\t\tPublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, "lib", "mujoco.dylib"));|g' "$MUJOCO_BUILD_CS"
echo "Modified Mujoco.Build.cs to use local library path"
else
echo "Mujoco.Build.cs not found at $MUJOCO_BUILD_CS"
fi
- name: Build Unreal Project
run: |
# Debug information
echo "=== Environment Information ==="
echo "macOS Version:"
sw_vers
echo "Current working directory: $(pwd)"
ls -la # List all files in current directory
echo "=== Unreal Engine Information ==="
ls -la "$UE_ROOT/Build/BatchFiles"
echo "=== Project Information ==="
# Detailed search for the project file
echo "Searching for .uproject files:"
find . -name "*.uproject" -type f
# Get the absolute path of the project file
UPROJECT_PATH=$(find . -name "*.uproject" -type f | head -1)
if [ -z "$UPROJECT_PATH" ]; then
echo "Error: Could not find .uproject file"
exit 1
fi
# Convert to absolute path and verify file exists
UPROJECT_ABSOLUTE_PATH=$(realpath "$UPROJECT_PATH")
echo "Project absolute path: $UPROJECT_ABSOLUTE_PATH"
if [ ! -f "$UPROJECT_ABSOLUTE_PATH" ]; then
echo "Error: Project file does not exist at: $UPROJECT_ABSOLUTE_PATH"
exit 1
fi
echo "Using Unreal Engine at: $UE_ROOT"
# Make sure we're using the environment variable for library path
if [ -n "$DYLD_LIBRARY_PATH" ]; then
echo "Using DYLD_LIBRARY_PATH: $DYLD_LIBRARY_PATH"
else
# If not set in environment, set it here
export DYLD_LIBRARY_PATH="$(pwd)/Plugins/LuckyMujoco/Source/ThirdParty/Mujoco/lib:$DYLD_LIBRARY_PATH"
echo "Setting DYLD_LIBRARY_PATH: $DYLD_LIBRARY_PATH"
fi
# Make the project file readable and executable
chmod 755 "$UPROJECT_ABSOLUTE_PATH"
# Run the build using absolute paths
chmod +x "$UE_ROOT/Build/BatchFiles/RunUAT.sh"
# Pass DYLD_LIBRARY_PATH to RunUAT.sh
DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH" "$UE_ROOT/Build/BatchFiles/RunUAT.sh" BuildCookRun \
-project="$UPROJECT_ABSOLUTE_PATH" \
-noP4 \
-platform=Mac \
-clientconfig=Development \
-cook -build -stage -pak -archive \
-archivedirectory="$(pwd)/Build"
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: macos-build
path: Build/
retention-days: 7