diff --git a/.gitea/workflows/unreal-build.yml b/.gitea/workflows/unreal-build.yml index 834d9f1b..43d20218 100644 --- a/.gitea/workflows/unreal-build.yml +++ b/.gitea/workflows/unreal-build.yml @@ -3,52 +3,10 @@ name: Unreal Engine Build on: push: branches: [ main, develop ] - pull_request: - branches: [ main, develop ] jobs: - # windows-build: - # runs-on: windows - # steps: - # - name: Checkout repository - # uses: actions/checkout@v3 - # with: - # lfs: true - # fetch-depth: 0 # Get all history to properly handle UE dependencies - - # - 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 + windows-build: + runs-on: windows steps: - name: Checkout repository uses: actions/checkout@v3 @@ -56,72 +14,228 @@ jobs: lfs: true fetch-depth: 0 - - name: Setup Unreal Engine + - name: Set Unreal Engine Path run: | - # Use the correct path where Unreal Engine is installed - UE_PATH="/Users/Shared/Epic Games/UE_5.5" + echo "UE_ROOT=F:\LuckyRobots\LuckyRobots\Engine" >> $Env:GITHUB_ENV + echo "DOTNET_CLI_HOME=$env:TEMP" >> $Env:GITHUB_ENV + echo "MSBUILDDISABLENODEREUSE=1" >> $Env:GITHUB_ENV + echo "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1" >> $Env:GITHUB_ENV + echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> $Env:GITHUB_ENV + echo "DOTNET_BUILD_OUTPUT_DIR=$env:TEMP\dotnet-build" >> $Env:GITHUB_ENV + + - name: Set up build environment + run: | + # Create a custom build output directory in temp + $buildRoot = Join-Path $env:TEMP "unreal-build" + $dotnetBuildDir = Join-Path $buildRoot "dotnet-build" + $buildOutputDir = Join-Path $buildRoot "output" - 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" + # Create directories with full permissions + foreach ($dir in @($buildRoot, $dotnetBuildDir, $buildOutputDir)) { + New-Item -ItemType Directory -Force -Path $dir + icacls $dir /grant Everyone:F /T + } + + # Set environment variables for build paths + echo "DOTNET_BUILD_OUTPUT_DIR=$dotnetBuildDir" >> $Env:GITHUB_ENV + echo "DOTNET_CLI_HOME=$dotnetBuildDir" >> $Env:GITHUB_ENV + echo "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1" >> $Env:GITHUB_ENV + echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> $Env:GITHUB_ENV + echo "DOTNET_USE_POLLING_FILE_WATCHER=true" >> $Env:GITHUB_ENV + echo "MSBUILDDISABLENODEREUSE=1" >> $Env:GITHUB_ENV + echo "MSBuildSDKsPath=$env:UE_ROOT\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\Sdks" >> $Env:GITHUB_ENV + + # Clean any existing build artifacts + Remove-Item -Path "$dotnetBuildDir\*" -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -Path "$buildOutputDir\*" -Recurse -Force -ErrorAction SilentlyContinue + + # Set up global.json to use the correct SDK version + $globalJson = @' + { + "sdk": { + "version": "8.0.300", + "rollForward": "latestFeature" + } + } + '@ + Set-Content -Path "global.json" -Value $globalJson + + # Create Directory.Build.props to redirect all outputs + $buildPropsContent = @' + <?xml version="1.0" encoding="utf-8"?> + <Project> + <PropertyGroup> + <BaseIntermediateOutputPath>$(DOTNET_BUILD_OUTPUT_DIR)\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath> + <BaseOutputPath>$(DOTNET_BUILD_OUTPUT_DIR)\bin\$(MSBuildProjectName)\</BaseOutputPath> + <IntermediateOutputPath>$(BaseIntermediateOutputPath)</IntermediateOutputPath> + <OutputPath>$(BaseOutputPath)</OutputPath> + <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> + <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> + <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> + <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> + <RestoreNoCache>true</RestoreNoCache> + <EnforceWritePermissions>false</EnforceWritePermissions> + </PropertyGroup> + </Project> + '@ + Set-Content -Path "Directory.Build.props" -Value $buildPropsContent -Encoding UTF8 + + # Create a temporary nuget.config file to use a local package cache + $nugetConfig = @' + <?xml version="1.0" encoding="utf-8"?> + <configuration> + <config> + <add key="globalPackagesFolder" value="$(DOTNET_BUILD_OUTPUT_DIR)\packages" /> + </config> + </configuration> + '@ + Set-Content -Path "nuget.config" -Value $nugetConfig -Encoding UTF8 + + # Set MSBuild configuration to use the temp directory + $MSBuildPath = Join-Path $env:UE_ROOT "Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300" + $env:MSBuildExtensionsPath = $MSBuildPath + $env:MSBuildSDKsPath = Join-Path $MSBuildPath "Sdks" + echo "MSBuildExtensionsPath=$env:MSBuildExtensionsPath" >> $Env:GITHUB_ENV + echo "MSBuildSDKsPath=$env:MSBuildSDKsPath" >> $Env:GITHUB_ENV + echo "MSBUILD_EXE_PATH=$MSBuildPath\MSBuild.dll" >> $Env:GITHUB_ENV + + - name: Locate .uproject file + run: | + $projectPath = Get-ChildItem -Path ".\" -Filter "*.uproject" -Recurse | Select-Object -First 1 -ExpandProperty FullName + if (-not $projectPath) { + Write-Error "No .uproject file found in repository" 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" - + } + echo "UPROJECT_PATH=$projectPath" >> $Env:GITHUB_ENV + Write-Host "Found project file: $projectPath" + - 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 + # Create and set permissions for build output directory + $buildOutputDir = Join-Path $env:TEMP "unreal-build\output" + New-Item -ItemType Directory -Force -Path $buildOutputDir + icacls $buildOutputDir /grant Everyone:F - echo "=== Unreal Engine Information ===" - ls -la "$UE_ROOT/Build/BatchFiles" + # Register dotnet locally + $dotnetPath = Join-Path $env:UE_ROOT "Binaries\ThirdParty\DotNet\8.0.300\win-x64\dotnet.exe" + $env:PATH = "$env:UE_ROOT\Binaries\ThirdParty\DotNet\8.0.300\win-x64;$env:PATH" - echo "=== Project Information ===" - # Detailed search for the project file - echo "Searching for .uproject files:" - find . -name "*.uproject" -type f + # Make a local copy of the MSBuild directory with write permissions + $customMSBuildDir = Join-Path $env:TEMP "msbuild-custom" + New-Item -ItemType Directory -Force -Path $customMSBuildDir + Copy-Item -Path "$env:UE_ROOT\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\*" -Destination $customMSBuildDir -Recurse -Force + icacls $customMSBuildDir /grant Everyone:F /T - # 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" + # Set environment variables for the custom MSBuild + $env:MSBuildExtensionsPath = $customMSBuildDir + $env:MSBuildSDKsPath = Join-Path $customMSBuildDir "Sdks" + + # Run the build with environment variables + $uatPath = Join-Path $env:UE_ROOT "Build\BatchFiles\RunUAT.bat" + $envVars = "set DOTNET_CLI_HOME=$env:DOTNET_CLI_HOME && " + + "set DOTNET_BUILD_OUTPUT_DIR=$env:DOTNET_BUILD_OUTPUT_DIR && " + + "set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 && " + + "set DOTNET_CLI_TELEMETRY_OPTOUT=1 && " + + "set DOTNET_USE_POLLING_FILE_WATCHER=true && " + + "set MSBuildExtensionsPath=$env:MSBuildExtensionsPath && " + + "set MSBuildSDKsPath=$env:MSBuildSDKsPath && " + + "set MSBUILD_EXE_PATH=$env:MSBUILD_EXE_PATH && " + + # Find project file + $projectPath = Get-ChildItem -Path ".\" -Filter "*.uproject" -Recurse | Select-Object -First 1 -ExpandProperty FullName + if (-not $projectPath) { + Write-Error "No .uproject file found in repository" exit 1 - fi + } + Write-Host "Using project file: $projectPath" - # 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 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" - "$UE_ROOT/Build/BatchFiles/RunUAT.sh" BuildCookRun \ - -project="$UPROJECT_ABSOLUTE_PATH" \ - -noP4 \ - -platform=Mac \ - -clientconfig=Development \ - -cook -build -stage -pak -archive \ - -archivedirectory="$(pwd)/Build" - + # Run UAT with full command + $cmdLine = "$envVars cmd.exe /c `"$uatPath`" BuildCookRun -project=`"$projectPath`" -noP4 -platform=Win64 -clientconfig=Development -cook -build -stage -pak -archive -archivedirectory=`"$buildOutputDir`"" + Write-Host "Running command: $cmdLine" + Invoke-Expression $cmdLine + - name: Upload build artifacts uses: actions/upload-artifact@v3 with: - name: macos-build - path: Build/ - retention-days: 7 \ No newline at end of file + name: windows-build + path: BuildOutput/ + 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 + # 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" + + # - 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 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" + # "$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 \ No newline at end of file