name: Unreal Engine Build on: 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: Set Unreal Engine Path # run: | # 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" # # 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 = @' # # # # $(DOTNET_BUILD_OUTPUT_DIR)\obj\$(MSBuildProjectName)\ # $(DOTNET_BUILD_OUTPUT_DIR)\bin\$(MSBuildProjectName)\ # $(BaseIntermediateOutputPath) # $(BaseOutputPath) # false # false # true # true # true # false # # # '@ # Set-Content -Path "Directory.Build.props" -Value $buildPropsContent -Encoding UTF8 # # Create a temporary nuget.config file to use a local package cache # $nugetConfig = @' # # # # # # # '@ # 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 # } # echo "UPROJECT_PATH=$projectPath" >> $Env:GITHUB_ENV # Write-Host "Found project file: $projectPath" # - name: Build Unreal Project # run: | # # 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 # # 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" # # 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 # # 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 # } # Write-Host "Using project file: $projectPath" # # 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: 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)/Builds" - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: macos-build path: Builds/ retention-days: 7 - name: Create Tag if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' run: | TAG="v${{ github.run_number }}" echo "Creating git tag: $TAG" # Configure git with token authentication git config --global user.email "actions@gitea.com" git config --global user.name "Gitea Actions" # Direct token approach - simplest method git remote set-url origin "https://goran:${{ secrets.GITEATOKEN }}@luckyrobots.com/goran/lyra_game_ue.git" # Set git to not prompt for input export GIT_TERMINAL_PROMPT=0 # Check if tag exists if ! git rev-parse "$TAG" >/dev/null 2>&1; then # Create tag without opening editor (-m flag) git tag -a "$TAG" -m "Release $TAG" # Push with timeout and debug echo "Pushing tag $TAG to origin..." git push --verbose origin "$TAG" || { echo "Error: Failed to push tag. Check your token permissions." exit 1 } echo "Successfully created and pushed tag: $TAG" else echo "Tag $TAG already exists, skipping tag creation" fi echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV - name: Create Gitea Release if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' uses: https://gitea.com/actions/gitea-release-action@main with: token: ${{ secrets.GITEATOKEN }} tag_name: ${{ env.RELEASE_TAG }} title: "Release ${{ env.RELEASE_TAG }}" files: Builds/*.app